P - The Building Coder
Download
Report
Transcript P - The Building Coder
Opening the Lines of Communication Between
Revit® and Third-Party Applications
David Rushforth, PE, LEED AP BD+C
Senior Electrical Engineer, R.G. Vanderweil Engineers
[email protected]
Presentation Expectations
Have questions?
Please save them for after the presentation or send me an e-mail
Experience Level
Topics are advanced
Explanations are geared toward non-programmers
Database communication only
Goal
Revit API experience is (partially) assumed
Share “the power of the possible”
WARNING
The following content was prepared by an engineer, NOT a
programmer. The samples of code shown may contain disturbing
examples of poor programming practices and represent only one of
many ways to accomplish the desired objective.
About the Presenter
Electrical Engineer at R.G. Vanderweil Engineers
Native to Las Vegas
BS Electrical Engineering, BYU
MS Electrical Engineering, UNLV
Presentation Outline
Communication Overview
Lines of Communications
Text Based (Csv, Txt, XML, Ini, Dat)
Microsoft Access®
SQL
Microsoft Excel®
Autodesk AutoCAD®
Other Applications
Autodesk Revit®
Another Approach: Microsoft Access® As Hub
Ideas For Further Development
Communication Overview
Microsoft Access ®
SQL
Microsoft Excel ®
Text
Autodesk AutoCAD ®
SKM Power Tools
Autodesk Revit®
Lines of Communication: Text Based
Lines of Communication: Text Based
Write New File (Example formats: Csv, Txt, XML, Ini, Dat)
Dim writefilename As String
writefilename = "C:\[your path here]"
Dim fs As New FileStream(writefilename, FileMode.Create, FileAccess.Write)
Dim s As New StreamWriter(fs)
s.WriteLine("Stuff")
s.Close()
Read/Write/Edit existing File Data Code
Dim FilePath As String
FilePath = " C:\[your path here]"
Dim text As Array
Dim lines As New List(Of String)
text = System.IO.File.ReadAllLines(FilePath)
lines.AddRange(text)
Dim n As Integer
For n = 0 To lines.Count - 1
‘[read, store, insert, or make decisions based on lines(n) ]
Next n
Color Key
Variable declarations
Supporting code
Read
Write
Lines of Communication: Microsoft Access®
Lines of Communication: Microsoft Access®
Connect to database file for direct manipulation
Dim strAccessFile As String = "C:\Temp\MyDatabase.accdb"
Dim mAccessApplication As New Microsoft.Office.Interop.Access.Application
mAccessApplication.OpenCurrentDatabase(strAccessFile)
Dim myEmployeesRecords As dao.Recordset
Dim TableName As String = "Employees"
myEmployeesRecords = mAccessApplication.CurrentDb.OpenRecordset("SELECT * FROM " & TableName)
myEmployeesRecords.MoveFirst()
Dim readFirstName As String
readFirstName = myEmployeesRecords.Fields("FirstName").Value
myEmployeesRecords.Edit()
myEmployeesRecords.Fields("FirstName").Value = "David"
myEmployeesRecords.Fields("LastName").Value = "Rushforth"
myEmployeesRecords.Update()
mAccessApplication.Quit(Option:=Microsoft.Office.Interop.Access.AcQuitOption.acQuitSaveNone)
mAccessApplication = Nothing
For 64-bit compatibility
Copy dao360.dll to Revit “Program” folder
Color Key
Variable declarations
Supporting code
Read
Write
Lines of Communication: SQL
Lines of Communication: SQL
Connect to database file for direct manipulation
Dim StrConnectionString As String
StrConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Temp\TestDatabase.mdf;Integrated
Security=True;User Instance=True“
Dim mySqlConnection As New SqlConnection(StrConnectionString)
Dim mySqlCommand As New SqlCommand
mySqlConnection.Open()
mySqlCommand.Connection = mySqlConnection
Dim TableName As String = "Employees“
mySqlCommand.CommandText = "SELECT * FROM " & TableName
mySqlCommand.CommandText = "UPDATE " & TableName & " SET
FirstName='EditedFirstName',LastName='EditedLastName' WHERE (NameID= 1234)“
mySqlCommand.CommandText = "SELECT * FROM " & TableName & " WHERE (FirstName='FirstName1')“
mySqlCommand.ExecuteNonQuery() ‘RUN THIS AFTER EACH .CommandText
Dim mySqlDataReader As SqlDataReader
mySqlDataReader = mySqlCommand.ExecuteReader
While mySqlDataReader.Read() 'While Data is Present
MsgBox(mySqlDataReader("FirstName") & ", " & mySqlDataReader("LastName"))
End While
mySqlDataReader.Close()
mySqlConnection.Close()
Color Key
Variable declarations
Supporting code
Read
Write
Lines of Communication: Microsoft Excel®
Lines of Communication: Microsoft Excel®
Connect to Excel file for direct manipulation
Dim strXlsFile As String
strXlsFile = "C:\Temp\test.xls"
Dim mExcelApplication As New Microsoft.Office.Interop.Excel.Application
Dim mExcelWorkbook As Microsoft.Office.Interop.Excel.Workbook = mExcelApplication.Workbooks.Open(strXlsFile)
Dim mExcelWorksheet As Microsoft.Office.Interop.Excel.Worksheet = mExcelWorkbook.Worksheets(1)
Dim readValue As String
readValue = mExcelWorksheet.Range("A1").Value
mExcelWorksheet.Range("A2").Value = “New Value"
mExcelWorkbook.Windows(1).Visible = True
mExcelWorkbook.Save()
mExcelWorkbook = Nothing
mExcelApplication.Quit()
mExcelApplication = Nothing
Color Key
Variable declarations
Supporting code
Read
Write
Lines of Communication: Autodesk AutoCAD®
Lines of Communication: Autodesk AutoCAD®
DXF Files
Text based file format
Can be written or edited
Scripts
Auto-run script on open AutoCAD
cadpath = myApplicationFilePath & " /b " & ScriptName
Dim ACADProcessID As Integer
ACADProcessID = Shell(cadpath, vbMaximizedFocus)
LISP
Load a LISP routine during a script
s.WriteLine("(load ""MyLispFilename.lsp"")")
Lines of Communication: Other Applications
Lines of Communication: Other Applications
Identify ways of:
Getting Data Out
Reports (txt, xls)
Export options
Getting Data In
Import options
Proprietary extensions (e.g. .xyz) may be text based
Lines of Communication: Autodesk Revit®
RibbonCommands.dll
Ribbon.dll
Set References (RevitAPI.dll, etc.)
Create Ribbon Toolbar
Create Button1
-When pressed access class in
RibbonCommands.dll
Create Button2
-…
.addins or Revit.ini
Load dll on
startup
References (Revit API)
RevitAPI.dll, RevitAPIUI.dll
Set References (RevitAPI.dll, etc.)
Class PowerSuite
-Gather Param info
-Open Power Suite
-Transfer Info
Class SetPowerSuiteParams
-Set changed parameters
Class ParameterXfmr
-Sort Project Elements
-Sort Selected Elements
-Open form
Class …
AHK
Lines of Communication: Autodesk Revit®
Getting Data Out
Getting Data In
Read Parameters
Import from text
Connect to Database or Table
Excel to DXF
Link CAD drawings
Set Parameters
Load Families
Create objects
Automating the Interface
AutoHotkey (AHK) Scripts
Another Approach: Microsoft Access® As Hub
Work flow
Send data from Revit to Access® database
Access® stores and controls the flow of information between Revit and
third party applications
Benefits
Perform advanced lookups and calculations
Review and change design outside of Revit
Can send changes back to Revit
Same interface for Revit and Non-Revit projects
Integrated Program Example
Text
SKM Power Tools
Microsoft Excel ®
Autodesk Revit®
Autodesk AutoCAD ®
Microsoft Access®
Ideas For Further Development
Write custom reports from Revit
Write errors or standards deviations to journals
Export room dimensions
Automate print settings
Create sheets, objects, or families from stored data
Extract specific family types from project
Create a keynote database
Automate riser diagrams
Create room or space schedules with error reporting
THANK YOU!
If you liked it…
If this will help you in your work…
Fill out the online class survey.
Send me an email and let me know how it helped.
If you have questions…
Ask now or send me an e-mail later.
[email protected]
Autodesk [and other] are registered trademarks or trademarks of Autodesk, Inc., and/or its subsidiaries and/or affiliates in the USA and/or other countries. All other brand names, product names, or trademarks belong to
their respective holders. Autodesk reserves the right to alter product and services offerings, and specifications and pricing at any time without notice, and is not responsible for typographical or graphical errors that may
appear in this document. © 2010 Autodesk, Inc. All rights reserved.