About the Presenter
Download
Report
Transcript About the Presenter
Extensible Storage in the Autodesk Revit 2012 API
Jeremy Tammik
Principal Developer Consultant
© 2011 Autodesk
About the Presenter
Jeremy Tammik
Principal Developer Consultant
Developer Technical Services
EMEA, Autodesk SARL
Jeremy is a member of the AEC workgroup of the Autodesk Developer Network ADN team,
providing developer support, training, conference presentations, and blogging on the Revit API.
He joined Autodesk in 1988 as the technology evangelist responsible for European developer
support to lecture, consult, and support AutoCAD application developers in Europe, the U.S.,
Australia, and Africa. He was a co-founder of ADGE, the AutoCAD Developer Group Europe, and
a prolific author on AutoCAD application development. He left Autodesk in 1994 to work as an
HVAC application developer, and then rejoined the company in 2005.
Jeremy graduated in mathematics and physics in Germany, worked as a teacher and translator,
then as a C++ programmer on early GUI and multitasking projects. He is fluent in six European
languages, vegetarian, has four kids, plays the flute, likes reading, travelling, theatre
improvisation, yoga, carpentry, loves mountains, oceans, sports, dancing, and especially climbing.
Revit Extensible Storage
© 2011 Autodesk
2
Class Summary
Overview of the Revit API Extensible Storage functionality
Creating an extensible storage schema
Storing simple and complex data in a schema entity
Attaching a schema entity to a Revit database element
Listing and deleting schemata
Available sample applications
Prerequisites: we assume prior knowledge of
Basic .NET programming skills
Basic Revit API knowledge
Revit Extensible Storage
© 2011 Autodesk
3
Learning Objectives
At the end of this class, you will be able to:
Understand the underlying estorage concepts and real-world techniques
Programmatically create and populate a schema
Read, write, update and delete extensible storage data on elements
Handle versioning issues when upgrading and extending schemata
Extract and display estorage data and serialize and de-serialize
schemata to XML
Revit Extensible Storage
© 2011 Autodesk
4
Agenda
Introduction and basics
Examples
Create a schema
Store a simple data item
List all schemata
Store complex data
Delete estorage data
Store a file
Additional observations
Sample applications
Learning more
Revit Extensible Storage
© 2011 Autodesk
5
Introduction and Basics
© 2011 Autodesk
Autodesk Developer Network
Access to almost all Autodesk software and SDK’s
Members-only website with thousands of technical articles
Product direction through conferences
Unlimited technical support
API training classes
Includes early access to beta software
One to three free for professional members
Marketing benefits
Exposure on autodesk.com
Promotional opportunities
www.autodesk.com/joinadn
Revit Extensible Storage
© 2011 Autodesk
7
Acronyms
ADN
AEC
API
BIM
GUI
HVAC
MEP
RAC
RME
RST
SDK
UI
Autodesk Developer Network
Architecture, Engineering, Construction
Application Programming Interface
Building Information Model
Graphical User Interface
Heating, Ventilation, and Air Conditioning
Mechanical, Electrical, and Plumbing
Revit Architecture
Revit MEP
Revit Structure
Software Development Kit
User Interface
Revit Extensible Storage
© 2011 Autodesk
8
What is Extensible Storage?
Programmatically store arbitrary, auxiliary data in a Revit document
Simple data types such as integer, double, string, element id
Complex structures such as lists and dictionaries
Can replace the old technique using shared parameters
Read and write access can be restricted
Revit Extensible Storage
© 2011 Autodesk
9
Revit Storage Option Evolution
OLE Structured Storage used internally
Shared parameters
Estorage
Revit Extensible Storage
© 2011 Autodesk
10
Estorage
Easy to use
Class-like structure
Metadata enhanced
Read and write permissions integrated into Vendor and App ID
Natively supports element id, UV, and XYZ points and vectors
Store data on any element
Schema defines data structure through a list of fields
Entity hold actual data, attached to Revit element
Revit Extensible Storage
© 2011 Autodesk
11
Shared Parameters versus Estorage
Units
High-level objects
Track elements on deletion or work share remapping
Selectively hide or expose data
Revit Extensible Storage
© 2011 Autodesk
12
Estorage Basics
Autodesk.Revit.DB.ExtensibleStorage namespace classes
Schema
SchemaBuilder
Field
FieldBuilder
Entity
Revit Extensible Storage
© 2011 Autodesk
13
Data Types
bool, short, int, float, double
string
Guid
ElementId
Autodesk.Revit.DB.UV
Autodesk.Revit.DB.XYZ
Array – System.Collections.Generic.IList<T>)
Map – System.Collections.Generic.IDictionary<TKey, TValue>, no real-valued key
Autodesk.Revit.DB.ExtensibleStorage.Entity – a Schema instance or SubSchema
Revit Extensible Storage
© 2011 Autodesk
14
Schema Definition
Use three SchemaBuilder methods
AddSimpleField( string name, Type )
AddArrayField( string name, Type )
AddMapField( string name, Type keyType, Type valueType )
Each returns a FieldBuilder instance
FieldBuilder provides access to set further properties
Documentation
Units
Revit Extensible Storage
© 2011 Autodesk
15
Units
Floating-point fields require a unit type
float, double, XYZ, UV and containers of these values
length, temperature, etc.
Unit conversions are handled internally
Example:
Specify UT_Length in FieldBuilder.SetUnitType
Specify DUT_DECIMAL_FEET when calling Entity.Set and Entity.Get
Revit Extensible Storage
© 2011 Autodesk
16
Examples
Learning by doing
© 2011 Autodesk
Estorage of a Simple XYZ Point
Create data structure: Schema
Create data holder: Entity
Populate it with data
Attach it to a wall
Revit Extensible Storage
© 2011 Autodesk
18
Detailed Steps for Estorage of a Simple XYZ Point
Instantiate a new SchemaBuilder with the given schema GUID
Define the read and write access levels and the vendor id
Add a simple XYZ data field
Set its unit type and documentation string
Register the schema
Create an entity to hold an instance of the schema data
Access and populate the data field
Store the entity on the Revit element
Demo and examine the code
Command 1 StoreSimple
Revit Extensible Storage
© 2011 Autodesk
19
List Loaded Schemata
Static Schema class method ListSchemas
All schemata in memory are returned
May include schemata used in previous documents, now closed
No information on schema use in individual document
Revit Extensible Storage
© 2011 Autodesk
20
Determine Estorage Use in Document
Check whether any elements in the document actually use a schema
Iterate through all elements and check each individually
Does it contain a schema entity?
Demo and examine the code
Command 2 List
Revit Extensible Storage
© 2011 Autodesk
21
Estorage of Complex Data
Use SchemaBuilder AddArrayField and AddMapField methods
Use generic .NET collection classes
Array IList<T>
Map IDictionary<TKey, TValue>
Populate using concrete instance, e.g. List or Dictionary
Demo and examine the code
Command 3 StoreMap
Revit Extensible Storage
© 2011 Autodesk
22
Estorage Deletion
Individual entity: Element.DeleteEntity
Entire schema in all documents: Schema.EraseSchemaAndAllEntities
Arguments schema and overrideWriteAccessWithUserPermission
Demo and examine the code
Command 4 Delete
Revit Extensible Storage
© 2011 Autodesk
23
Storing a File on a Revit Element
Define a schema storing an array of bytes
fieldBuilder = schemaBuilder.AddArrayField(
"Data", typeof( byte ) );
Convert file data to a byte stream
byte[] data = File.ReadAllBytes( filename );
entity.Set<IList<byte>>( schema.GetField( "Data" ), data );
Demo and examine the code
Command 5 StoreFile
Revit Extensible Storage
© 2011 Autodesk
24
Restoring a File from a Revit Element
Read byte array from schema entity
Store byte stream into file
Entity ent = e.GetEntity( schema );
string filepath = Path.Combine(
ent.Get<string>( schema.GetField( "Folder" ) ),
ent.Get<string>( schema.GetField( "Filename" ) ) );
byte[] data = ent.Get<IList<byte>>( schema.GetField( "Data" ) ).ToArray<byte>();
File.WriteAllBytes( filepath, data );
Demo and examine the code
Command 6 RestoreFile
Revit Extensible Storage
© 2011 Autodesk
25
Additional Observations
© 2011 Autodesk
Additional Observations
Intended use
Handling large amounts of data
Self-documenting data
Object-oriented
Read/write permissions
Modification of estorage data on an element type
Handling of ElementId data
Retrieving elements with specific schema data
Checking for a valid schema entity on an element
One entity per element
Schemata remain in memory
Revit Extensible Storage
© 2011 Autodesk
27
Sample Applications
© 2011 Autodesk
FamilyStorage
Create estorage in a family document
Retrieve its data in a project containing a family instance
Two external commands AddDataToFamily and GetFamilyData
AddDataToFamily defines schema and adds an entity to the family
Family documentFamily = doc.OwnerFamily;
Entity newEntity = MakeEntity( new XYZ( 1, 2, 3 ) );
documentFamily.SetEntity( newEntity );
GetFamilyData retrieves the stored data from the family via the instance
Family family = familyInstance.Symbol.Family;
Entity entity = family.GetEntity( schema );
Demo and examine the code
Revit Extensible Storage
© 2011 Autodesk
29
UpgradeSchema
Automatically upgrade from schema v1 to v2 on document open
External command manually adds schema v1 data to all walls
External application subscribes to DocumentOpened with an event handler
Detect, read data and delete all schema v1 entities
Create and populate v2 entities for them instead
Demo and examine the code
Revit Extensible Storage
© 2011 Autodesk
30
Dynamic Section View
Revit SDK DynamicModelUpdate sample
Modify Revit model as a reaction to changes
Implement an updater, add a trigger, define scope and type
Scope defined by specific element ids or element filter
Type can be element addition, deletion, modification of geometry, parameters, property
Sample works in AssociativeSection.rvt
Maintains section view positioned to display a cut through a window and the
host wall
Window position stored in estorage schema with two XYZ fields for location
point and facing orientation
Revit Extensible Storage
© 2011 Autodesk
31
Schema Wrapper Tools
C# library included Revit ExtensibleStorageManager SDK sample
Defines wrappers for Schema, SchemaBuilder, Field, and FieldBuilder classes
Provides easy serialization of schema data to XML
Displays data of a schema entity
Revit Extensible Storage
© 2011 Autodesk
32
Extensible Storage Manager
Advanced Revit SDK sample
Uses SchemaWrapperTools library
Create complex schemas
Framework for saving and loading schemas to a file
Easy sharing and communicating of schemata
Revit Extensible Storage
© 2011 Autodesk
33
Summary and Further Reading
© 2011 Autodesk
Class Summary
Overview of the Revit API Extensible Storage functionality
Creating an extensible storage schema
Storing simple and complex data in a schema entity
Attaching a schema entity to a Revit database element
Listing and deleting schemata
Available sample applications
FamilyStorage
UpgradeSchema
Dynamic Section View
Schema Wrapper Tools
Extensible Storage Manager
Revit Extensible Storage
© 2011 Autodesk
35
Materials
Presentation
Handout document
CP6760-L_tammik_estorage.pptx
CP6760-L_tammik_estorage.pdf
Sample code
CP4451_tammik_estorage.zip
Estorage – C# sample code
EstorageVb – VB sample code
FamilyStorage
UpgradeSchema
Hands-on lab exercises
CP6760-L_tammik_estorage_lab.zip
Revit Extensible Storage
© 2011 Autodesk
36
Learning More
Revit Developer Center
Revit SDK, Samples, API Help File , Developer's Guide and Online Help
http://thebuildingcoder.typepad.com
ADN, The Autodesk Developer Network
http://www.autodesk.com/apitraining
The Building Coder, Jeremy Tammik's Revit API Blog
http://discussion.autodesk.com > Revit Architecture > Revit API
API Training Classes
http://www.adskconsulting.com/adn/cs/api_course_sched.php > Revit API
Discussion Group
http://www.autodesk.com/revitapi-wikihelp
DevTV Introduction to Revit Programming
Revit API Webcasts and Trainings
http://www.autodesk.com/developrevit
http://www.autodesk.com/joinadn
DevHelp Online for ADN members
http://adn.autodesk.com
Revit Extensible Storage
© 2011 Autodesk
37
Autodesk University Session Feedback
Your feedback is very important to Autodesk
Complete the session survey on your
mobile device, PC or at a survey station
Each session survey completed is entered
for a daily drawing for a free AU 2012 pass
You can help make AU 2012 better!
Complete the AU Conference Survey at a survey station and receive an AU 2011 T-Shirt
Revit Extensible Storage
© 2011 Autodesk
38
Autodesk, AutoCAD* [*if/when mentioned in the pertinent material, followed by an alphabetical list of all other trademarks mentioned in the material] 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. © 2011 Autodesk, Inc. All rights reserved.
© 2011 Autodesk