BIM Software Development Skill
Use this skill for software engineering tasks related to BIM, BIM data, BIM automation, BIM visualization, BIM analytics, and BIM integration with other technologies.
This skill is broader than interoperability. It supports complete BIM-related development, including extraction, transformation, validation, storage, visualization, automation, APIs, AI/ML preparation, XR interaction, digital twins, robotics, model checking, and facility management integration.
Priority language support
Give strongest priority to C# when the task involves:
- Revit API
- Revit add-ins
- Autodesk add-in development
- Unity
- XR or mixed reality applications
- BIM object selection in Unity
- runtime metadata binding
- .NET desktop tools
- C# BIM utilities
Also support:
- Python for IfcOpenShell, automation, validation, conversion, and data engineering
- TypeScript and JavaScript for web viewers, APIs, dashboards, and BIM data services
- SQL for BIM databases
- Cypher for graph databases
- C++ for geometry, plugins, native extensions, and performance-sensitive logic
- JSON, CSV, XML, IFC, IDS, BCF, glTF, OBJ, FBX, USD, and other BIM-related formats
Core mindset
Treat BIM as structured project data plus geometry, not only 3D objects.
For every BIM development task, consider:
- Source BIM environment
- Target software or platform
- Programming language
- Data format
- Geometry strategy
- Metadata strategy
- Identifier strategy
- Unit handling
- Coordinate system handling
- Object hierarchy
- Validation method
- Performance constraints
- Error handling
- Testing strategy
- Data loss and limitations
First response behavior
When the user asks for BIM software development help:
-
Identify the likely source:
- Revit
- IFC
- Archicad
- Tekla
- Rhino/Grasshopper
- Speckle
- CSV/JSON/SQL BIM data
- Unity BIM scene
- web BIM model
- unknown source
-
Identify the likely target:
- Revit add-in
- Unity/XR
- Unreal
- web viewer
- database
- graph database
- API service
- AI/ML pipeline
- robotics/SLAM
- digital twin
- facility management system
- model checking tool
- quantity takeoff tool
-
Choose the most appropriate programming stack:
- C# for Revit and Unity
- Python for IFC and automation
- TypeScript for web/API
- SQL/Cypher for storage and graph queries
- C++ only when native performance is required
-
If enough information exists, proceed with reasonable assumptions.
-
If one missing detail blocks implementation, ask only that question.
-
Prefer working architecture, code, validation, and tests over abstract explanation.
Non-negotiable BIM software rules
Preserve identifiers
Never design a BIM tool without defining the joining key between geometry, metadata, database records, and runtime objects.
Possible identifiers:
- IFC GlobalId
- Revit ElementId
- Revit UniqueId
- Archicad Element ID
- Speckle object ID
- custom persistent ID
- database primary key
- runtime object ID
When multiple identifiers exist, create a mapping table.
Preserve metadata
BIM elements must remain queryable after export, conversion, database storage, or runtime loading.
Preserve, when relevant:
- element class
- element name
- element type
- family/type information
- level/storey
- space/zone
- material
- property sets
- classifications
- quantities
- systems
- phase/status
- spatial location
- source file
- source identifier
Validate every transformation
Any BIM software pipeline should report:
- source element count
- exported geometry count
- exported metadata count
- matched object count
- missing IDs
- duplicate IDs
- geometry without metadata
- metadata without geometry
- skipped categories/classes
- unit conversion
- coordinate transformation
- hierarchy reconstruction status
- warnings
- errors
Handle units and coordinates
Always check:
- millimeters vs meters vs feet
- Revit internal feet
- IFC project units
- Unity meters
- local coordinates vs world coordinates
- project north vs true north
- georeferenced vs local models
- right-handed vs left-handed coordinates
- Unity Y-up convention
- GIS coordinate reference systems when relevant
Design for large BIM models
For Unity, XR, web, robotics, or digital twins, consider:
- LOD
- instancing
- batching
- mesh simplification
- property filtering
- lazy metadata loading
- spatial indexing
- database-backed metadata
- streaming
- caching
- compressed formats
- progressive loading
C# Revit API rules
When writing Revit API code:
- Use IExternalCommand for command examples unless another pattern is requested.
- Use IExternalApplication only when startup, ribbon, lifecycle, or application-level behavior is needed.
- Use transactions only when modifying the Revit document.
- Do not open unnecessary transactions for read-only extraction.
- Prefer FilteredElementCollector with category/class filters.
- Extract both ElementId and UniqueId.
- Extract IFC GUID only when it exists or can be retrieved reliably.
- Extract parameters safely with null checks.
- Handle StorageType correctly:
- String
- Integer
- Double
- ElementId
- Remember Revit internal units are usually feet.
- Convert units explicitly.
- Avoid assuming every element has geometry.
- Avoid assuming every element has a category.
- Avoid assuming every parameter exists.
- Log skipped elements.
- Keep add-in logic modular:
- command layer
- extraction layer
- mapping layer
- export layer
- validation layer
Preferred Revit C# modules:
- BimExternalCommand.cs
- RevitElementExtractor.cs
- RevitParameterReader.cs
- RevitGeometryExporter.cs
- BimMetadataExporter.cs
- BimMappingValidator.cs
- UnitConversionHelper.cs
- CsvWriterService.cs
- JsonExportService.cs
C# Unity BIM rules
When writing Unity BIM code:
- Use C# MonoBehaviour examples unless another architecture is requested.
- Do not store full metadata only in GameObject names.
- Use GameObject names only as lightweight IDs if unavoidable.
- Prefer a metadata component attached to BIM objects.
- Support lazy loading for large metadata.
- Support object selection and metadata display.
- Keep metadata binding separate from UI logic.
- Use dictionaries for ID-to-metadata lookup.
- Validate unbound geometry objects.
- Validate metadata rows that do not match objects.
- Handle duplicate object names or duplicate IDs.
- Avoid heavy parsing during every frame.
- Use caching.
- Consider Addressables, asset bundles, or streaming for large models.
Preferred Unity C# modules:
- BimMetadata.cs
- BimMetadataBinder.cs
- BimObjectSelector.cs
- BimPropertyPanel.cs
- CsvMetadataLoader.cs
- JsonMetadataLoader.cs
- BimHierarchyBuilder.cs
- BimValidationReporter.cs
- BimQueryService.cs
- BimRuntimeIndex.cs
Development output formats
For new BIM software features
Respond with:
- Recommended architecture
- Technology stack
- Data flow
- Identifier strategy
- File/module structure
- Implementation code
- Validation checks
- Test cases
- Known limitations
- Next improvement path
For C# Revit add-ins
Respond with:
- Add-in goal
- Revit API approach
- Required classes
- Data extraction strategy
- Identifier strategy
- Unit conversion strategy
- C# code
- Add-in manifest notes if needed
- Validation checks
- Testing inside Revit
For C# Unity BIM applications
Respond with:
- Unity scene architecture
- Data loading strategy
- Metadata binding strategy
- GameObject ID strategy
- C# scripts
- UI interaction logic
- Performance strategy
- Validation checks
- Testing method
For debugging
Respond with:
- Suspected failure layer
- Most likely cause
- Minimal fix
- Safer long-term fix
- Code patch
- Validation test
- Regression prevention
Failure layers:
- Revit extraction
- IFC extraction
- geometry export
- metadata export
- identifier mapping
- file parsing
- database schema
- API communication
- unit conversion
- coordinate transform
- runtime binding
- Unity object selection
- query logic
- visualization
- performance
For code review
Check:
- BIM identifier preservation
- metadata completeness
- unit handling
- coordinate handling
- null safety
- error handling
- performance risks
- hardcoded assumptions
- data loss
- test coverage
- extensibility
For AI/ML with BIM
Require:
- clear learning target
- data schema
- feature extraction method
- label source
- BIM provenance
- train/validation/test split
- leakage prevention
- evaluation metric
- integration back into BIM, XR, or digital twin
Do not recommend training directly on raw BIM files without a structured intermediate dataset.
For BIM-to-robotics
Separate:
- BIM semantic model
- robot perception model
- coordinate registration
- navigation/task planning
- sensor feedback
- BIM/digital twin update
Never assume BIM geometry is directly usable for robot navigation.
Additional references
Load these files when needed:
- references/bim-software-principles.md
- references/csharp-revit-api-guide.md
- references/csharp-unity-bim-guide.md
- references/data-and-identifier-strategy.md
- references/architecture-patterns.md
- references/language-specific-patterns.md
- references/validation-and-testing.md
- references/debugging-playbook.md
Use these templates when creating specifications:
- templates/feature-spec.md
- templates/revit-addin-spec.md
- templates/unity-bim-viewer-spec.md
- templates/bim-data-pipeline-spec.md
- templates/api-integration-spec.md
- templates/validation-report-template.md
Use snippets when writing code examples:
- snippets/csharp-revit-external-command.md
- snippets/csharp-revit-parameter-extraction.md
- snippets/csharp-unity-metadata-binder.md
- snippets/csharp-unity-object-selection.md
- snippets/python-ifcopenshell-extraction.md
- snippets/typescript-bim-api-service.md
- snippets/sql-bim-schema.md
Use this helper script when validating mapping CSV files:
- scripts/validate_bim_mapping.py
Now create the supporting files.