Halo semua,
tutorial ini merupakan pengantar untuk fungsi SAP2000 API. Saya akan mencoba untuk menunjukkan bagaimana untuk mengatur pilihan dasar yang akan membantu menghindari mengganggu bug dalam kode Anda jika Anda seorang pemula dalam bidang ini.
Baiklah, mari kita mulai kemudian...Katakanlah kita ingin mendapatkan koordinat berkas dari SAP2000 dan menuliskannya di Excel melalui VSTA untuk Revit! (Saya menggunakan VSTA untuk Revit karena dengan meletakkan togheter tutorial ini dan satu dari Demetris Anda dapat memiliki produk kerja akhir!).
Langkah pertama, mari kita membuka Revit dan Mari kita pergi di bagian makro.
Manajer makro akan terlihat seperti ini:
dari sini dengan mengklik pada modul kami akan membuat yang baru:
Untuk contoh khusus ini saya akan menggunakan proyek bukan aplikasi (ini berarti bahwa makro ini tidak akan tersedia untuk semua saya Revit proyek lainnya:
Semua benar kami baik untuk pergi!
Mari kita memulai coding... tidak bahwa cepat! Hal pertama pernah ingat, jangan lupa untuk memuat referensi! dalam kasus ini akan mudah cukup kita akan memuat SAP2000 dan Excel referensi dalam proyek kami. Jadi, klik Edit dan jendela ini akan poup keluar. Klik kanan pada import_geometry dan memilih preferensi:
bentuk sana pergi untuk referensi dan ADD:
dan di sini kita pergi... di Tab COM kita akhirnya dapat menemukan: SAP2000v12 dan Microsoft Excel 12,0 perpustakaan objek dan menambahkan mereka!
OK, semua set, mari kita memulai coding! Ini adalah langkah-langkah utama yang kita akan mengikuti:
-menghitung jumlah elemen (balok) dalam kasus kami akan menjadi 1 karena kita mengimpor berkas hanya 1 tapi kalau-kalau kau untuk mengimpor lebih dari satu berkas kode akan masih bekerja!;
-mendapatkan data dari SAP;
-menulis data ke excel.
OK, hal pertama kita perlu lakukan adalah membuat sebuah instance dari SAP dan menciptakan model SAP baru:
'create an instance of the Sap2000 object
SapObject = New Sap2000.SapObject
'create the SapModel object
SapModel = SapObject.SapModel
let’s define some variables now:
Dim ret As Long
Dim StartPoint As String
Dim EndPoint As String
Dim myStartX As Double
Dim myStartY As Double
Dim myStartZ As Double
Dim myEndX As Double
Dim myEndY As Double
Dim myEndZ As Double
Dim sectname As String
Dim sectpropr As String
Dim j As Integer
Dim b As Integer ' beams
dan sekarang kita ingin menghitung berapa banyak elemnts yang ada di proyek kami:
'counting elements
Dim framenumber As Long
framenumber = SapModel.FrameObj.Count
'Loop to count each element (beams, columns, braces) here we used i
For i As Integer = 1 To framenumber
ret = SapModel.FrameObj.GetPoints(i, StartPoint, EndPoint)
ret = SapModel.PointObj.GetCoordCartesian(StartPoint, myStartX, myStartY, myStartZ)
ret = SapModel.PointObj.GetCoordCartesian(EndPoint, myEndX, myEndY, myEndZ)
next
dan di sini adalah bagian di mana kita menambahkan berkas untuk kami vektor yang akan dicetak di Excel:
If myStartZ = myEndZ Then
beam_Num.Add(j)
end if
Sekarang kita dapat redimensioning array yang akan dicetak dalam excel:
''redimensioning the arrays
ReDim beamData(beam_Num.Count - 1, 8 ) '---------------it might change
and after this we can start reading data and printing it to excel:
'Loop in order to get the parameters we want into 2d arrays we used k
For k As Integer = 1 To framenumber
ret = SapModel.FrameObj.GetPoints(k, StartPoint, EndPoint)
ret = SapModel.PointObj.GetCoordCartesian(StartPoint, myStartX, myStartY, myStartZ)
ret = SapModel.PointObj.GetCoordCartesian(EndPoint, myEndX, myEndY, myEndZ)
ret = SapModel.FrameObj.GetSection(k, sectname, sectpropr)
ret = SapModel.PropFrame.GetType(sectname, sectiontype)
If myStartZ = myEndZ Then
beaNum.Add(l)
b = beaNum.Count - 1
beamData(b, 0) = k 'Beam names
beamData(b, 1) = myStartX 'x value
beamData(b, 2) = myStartY 'y value
beamData(b, 3) = myStartZ 'z value
beamData(b, 4) = myEndX
beamData(b, 5) = myEndY
beamData(b, 6) = myEndZ
beamData(b, 7) = sectname
beamData(b, 8 ) = sectiontype
zValues(b) = myStartZ 'constructing a list of zValues in order to use it for Levels
end if
Harap perhatikan bahwa jika pernyataan yang muncul dari waktu ke waktu itu tidak diperlukan dalam contoh ini tetapi ini adalah petunjuk bagi Anda jika Anda ingin mulai mengimpor kolom dan semua penjuru!
OK, mari kita lihat hasil sekarang... kita pada dasarnya telah pergi dari geometri SAP yang terlihat seperti ini:
ini:
Tidak buruk!
tetapi tidak lebih dari namun... hanya menggabungkan tutorial ini dan ini lain satu togheter dan Anda akan memiliki bekerja penuh SAP2000 untuk Revit penerjemah untuk balok:
Harap Anda menikmati ini tutorial dan terima kasih untuk membaca!
Cara membuat elemen-elemen linier Revit struktur dengan VSTA Macros (vb.net)
by Demetris Kekatos: demetris.kekatos@gmail.com
Ini adalah tutorial untuk amatir pengguna alat-alat VSTA makro dalam Revit. Setelah tutorial ini Anda akan mampu menarik struktural unsur-unsur linier Revit (balok, kolom dan kawat gigi) memperoleh data geometri dari spreadsheet Excel terbuka.
Ketika mentransfer geometri dari salah satu perangkat lunak lain, Excel dapat menjadi langkah pertengahan antara dua perangkat lunak. Misalnya Anda dapat mengambil awal dan titik akhir dari semua unsur-unsur dari model bangunan belalang, mencetak data ini ke Excel Spreadsheet dan kemudian membuat makro VSTA membaca data ini dan menarik unsur-unsur Revit.
Bahkan jika Anda tidak memiliki dalam pikiran untuk mentransfer elemen dari perangkat lunak apa pun ke Revit, tutorial ini akan menunjukkan cara untuk menarik balok, kolom dan kawat gigi secara umum. Maka Anda dapat menggunakan alat-alat ini untuk membuat makro yang menarik menara secara otomatis misalnya.
Jadi kita akan mulai dari awal:
Buka proyek Revit 2011 baru dan menghemat proyek sebagai importingGeometry
-Dalam lingkungan Revit:
Pergi ke "Manage" tab, klik pada ikon makro dan pilih Macro Manager
-Jendela makro manajer muncul dan di sini Anda dapat melihat dua tab. Aplikasi dan Tab dengan nama file. Kami akan membuat makro importingGeometry Tab, yang berarti bahwa makro hanya dapat digunakan dari file tertentu ini.
Klik pada Create > Module
Catatan: Jika kita ingin membuat makro dan dalam berbagai proyek, Anda harus membuat makro sama ke tab aplikasi.
- Masukkan nama untuk modul (nama terus-menerus dengan tidak ada kesenjangan). Pilih VB.NET sebagai bahasa pemrograman dan sebelum mengklik OK, Anda dapat menambahkan keterangan apa makro.
Ini kemudian akan membantu Anda ketika Anda memiliki daftar macro berbeda di Revit.
Sekarang Anda akan dapat melihat Anda kosong makro.
- Selanjutnya klik pada > Edit, untuk masuk ke makro dan menulis kode kita.
- Jadi kami subrutin "membuat balok" akan ditempatkan antara subrutin default yang Revit tempat di kelas ini (disebut: ThisDocument)
Di sini kita hanya diimpor kotak pesan
- Untuk membuat ini sederhana makro bekerja, kita harus mengkompilasi ini pertama.
Go to > Build > Build import_geometry
- Setelah kompilasi makro, kami masih bisa untuk menggunakan dan menjalankannya dari jendela makro Manager.
- Klik pada Run dan pesan akan keluar pop:
Sekarang kami yakin bahwa semuanya berjalan..
kembali ke drawBeams tutorial, selanjutnya langkah:
Mendapatkan akses ke Microsoft Excel dari lingkungan VSTA makro :
- Langkah pertama adalah untuk menambahkan file referensi yang tepat, yang Revit akan digunakan untuk "berbicara" dengan Excel.
Go to > Project > Add Reference…
Pada COM tab memilih Microsoft Excel referensi seperti yang ditunjukkan pada gambar di bawah ini
- Selanjutnya kita harus mengimpor namespace of Excel. Perhatian tempat terbaik untuk mengimpor namespaces di Revit VSTA adalah di atas semua kode standar yang Revit impor di setiap makro
Sebelum menyajikan diperlukan kode saya hanya ingin merujuk Revit apa kebutuhan untuk menarik elemen seperti berkas:
- Start and End point of the element
- The section of the element and
- The level placed to the project
Ketika coding itu benar-benar penting untuk mengetahui apa yang Anda butuhkan untuk mencapai tujuan Anda … Sekarang kita telah siap untuk menulis beberapa kode
Mendapatkan akses ke Revit model dan terbuka Excel Spreadsheet:
'' method for creating Beams in Revit
Public Sub createBeams()
MsgBox("Retrieve Beam Data")
''the first thing to do is get access to the Revit project
Dim myModel As Autodesk.Revit.DB.Document
myModel = Me.Document
''Get access to the active Excel Document
Dim myExcel As Microsoft.Office.Interop.Excel.Application
Dim myWorkBook As Microsoft.Office.Interop.Excel.Workbook
myExcel = CType(GetObject(, "Excel.Application"), Application)
myWorkBook = myExcel.ActiveWorkbook
''get access to the right spreadsheet
Dim beam_sheet As Microsoft.Office.Interop.Excel.Worksheet
beam_sheet = myWorkBook.Worksheets(1)
'the number of the parenthesis sets the sheet we want to reach
Mengambil unsur data dari Excel:
''InputBox where the user is called to type the number of beams
Dim num_beams As Integer
num_beams = InputBox("Please enter the number of Beams...")
'' a loop to read data for each element from excel and draw it in Revit
For i As Integer = 2 To num_beams + 1
'' retrieve Start Point x,y,z
Dim my_x1 As Double
Dim my_y1 As Double
Dim my_z1 As Double
my_x1 = beam_sheet.Cells(i, 2).value
my_y1 = beam_sheet.Cells(i, 3).value
my_z1 = beam_sheet.Cells(i, 4).value
'' retrieve End Point x,y,z
Dim my_x2 As Double
Dim my_y2 As Double
Dim my_z2 As Double
my_x2 = beam_sheet.Cells(i, 5).value
my_y2 = beam_sheet.Cells(i, 6).value
my_z2 = beam_sheet.Cells(i, 7).value
'' retrieve beam section
Dim section As String
section = beam_sheet.Cells(i, 8).text
Akhirnya menarik elemen ke dalam proyek Revit:
''Transaction(in order to change the existing Revit model we always have to start a transaction)
Dim structure_builder As Autodesk.Revit.DB.Transaction
structure_builder = New Autodesk.Revit.DB.Transaction(myModel, "create Beams")
'' lets create some beams
If (structure_builder.Start() = Autodesk.Revit.DB.TransactionStatus.Started) Then
''set start point and end point of the element
Dim start_point As Autodesk.Revit.DB.XYZ = Nothing
Dim end_point As Autodesk.Revit.DB.XYZ = Nothing
start_point = New Autodesk.Revit.DB.XYZ(my_x1, my_y1, my_z1)
end_point = New Autodesk.Revit.DB.XYZ(my_x2, my_y2, my_z2)
'define the element line
Dim myBeamLine As Autodesk.Revit.DB.Line = Nothing
myBeamLine = Autodesk.Revit.DB.Line.Bound(start_point, end_point)
'load the Section of the element from Revit Structural Library
Dim beamLibrary As String
beamLibrary = "C:\ProgramData\Autodesk\RST 2011\Imperial Library\Structural\Framing\I_W_Wide Flange.rfa"
Dim beam_sym As Autodesk.Revit.DB.FamilySymbol = Nothing
Dim loaded As Boolean
loaded = myModel.LoadFamilySymbol(beamLibrary, section, beam_sym)
'define Levels
Dim my_level As Autodesk.Revit.DB.Level
'finally draw the beam
Dim myBeam As Autodesk.Revit.DB.FamilyInstance = Nothing
myBeam = myModel.Create.NewFamilyInstance(myBeamLine, beam_sym, my_level, Autodesk.Revit.DB.Structure.StructuralType.Beam)
''finalize the transaction and update model
structure_builder.Commit()
End If
Next
MsgBox("Macro Completed")
End Sub
Catatan:
a. untuk menarik berkas kita harus memuat keluarga yang tepat dari bagian yang Revit dalam database-nya. C:\ProgramData\Autodesk\RST 2011\Imperial Library\Structural\Framing\I_W_Wide Flange.rfa… Jadi Anda harus menemukan di mana Revit membuat keluarga struktural dalam sistem Anda dan paste jalan yang benar untuk kode ini.
b. Tentang tingkat. Kita dapat menyadari bahwa tingkat yang digunakan dalam kode tanpa menentukan nilai. Memberikan awal dan titik akhir unsur Revit tidak membutuhkan tingkat untuk menempatkan elemen untuk ketinggian yang benar
Setelah mengimpor kode kita harus "Membangun" makro dan kemudian jalankan dari jendela Manger makro
Jangan lupa untuk membuat excel spreadsheet dengan info yang tepat, karena makro akan gagal jika tidak menemukan sumber untuk membaca data
Ini adalah apa yang harus Anda dapatkan di Revit setelah menjalankan makro ini …
Untuk menyimpulkan: Ini adalah tubuh utama tentang bagaimana untuk membuat unsur-unsur dalam Revit. Untuk contoh jika Anda ingin membuat kawat gigi atau kolom logika seluruh adalah satu-satunya hal yang berubah sama adalah perintah terakhir:
''draw columns
Dim myColumn As Autodesk.Revit.DB.FamilyInstance = Nothing
myColumn = myModel.Create.NewFamilyInstance(myColumnLine, column_sym, my_level, Autodesk.Revit.DB.Structure.StructuralType.Column)
Bagian dari tingkat sedikit rumit ketika membuat kolom. Ini mungkin akan menjadi subjek dalam tutorial berikut …
There are numerous ways to define the start and end point of an element and draw elements in Revit through VSTA macros. Hope this tutorial was informative…
Welcome to Revit Macros…
0 komentar:
Posting Komentar