Compare commits

...

3742 Commits

Author SHA1 Message Date
Dion Moult ed316ba691 Fix #1382. You can now search property values agnostic of pset names. Thanks stefkeB! 2021-06-06 20:55:25 +10:00
Dion Moult cfd5742b5b Fix unnecessary error message when getting psets. 2021-06-06 20:54:40 +10:00
Dion Moult feac601340 Fix #1513. Materials now are included when importing types from a project library. 2021-06-06 10:05:24 +10:00
Dion Moult a8dc734351 Fix bugs where adding types without a material was broken. See #1513. 2021-06-06 09:57:50 +10:00
Dion Moult e0cbbf2eb7 Minor fixes to slab/wall syncing and stability in changing thicknesses. 2021-06-05 19:48:04 +10:00
Dion Moult 082ee3c95d Fix #1511. Prevent double registration of listener callbacks, and simplify listeners. 2021-06-05 19:48:04 +10:00
Thomas Krijnen ece6e6c8ca #1480 continued 2021-06-05 09:49:19 +02:00
Dion Moult 5c1d26ac91 Dumb walls and slabs now are always exported as parametric solids instead of meshes. 2021-06-04 17:30:37 +10:00
Dion Moult 153b6ee24d Total float calculation now takes into account calendar 2021-06-04 17:22:35 +10:00
Dion Moult 8b3b1eeb8e Fix #1510. Whoops :) 2021-06-04 15:29:14 +10:00
Dion Moult 8e279ea862 Improved date calculations during import and editing ensure that start / finish dates are always on working days. 2021-06-04 15:21:48 +10:00
Dion Moult 6f8861c030 ES, EF, LS, LF calculations in work schedules now are calendar based. Thanks SigmaDimensions! 2021-06-04 15:20:38 +10:00
Dion Moult 2ac6fe9eef Rewrite schedule calculation to be much faster and scale up to huge schedules. 2021-06-03 13:40:18 +10:00
Dion Moult 8338cc72db New styles on sequencing gantt chart to show dependency arrows, critical path, task groups, and milestones 2021-06-02 17:31:55 +10:00
Dion Moult 67b636f5fb New API usecase to recalculate schedule times, including:
* Critical path
* Total float
* Early start
* Early finish
* Late start
* Late finish
2021-06-02 17:30:05 +10:00
Jesusbill 3a754c8ecc fix of the fix n add_pset 2021-06-01 16:33:47 +02:00
Dion Moult d64d7cf27a Dumb slabs now roundtrip the Blender solidify modifier 2021-05-31 17:43:42 +10:00
Dion Moult 6ff4c95ac7 Dumb slabs now auto update thickness based on layer thickness and type changes. 2021-05-31 15:27:22 +10:00
Dion Moult 0b6af5f848 Experimental usecase serialisation function, in preparation for client-server systems and version control. 2021-05-31 14:18:24 +10:00
Dion Moult 3ded4dff5f Parametric engine is now registered on load, so you don't need to manually activate it 2021-05-31 14:17:33 +10:00
Dion Moult 452631b997 Updating either a duration, start, or finish date for a task now auto-updates the other attribute 2021-05-31 12:42:02 +10:00
Dion Moult c041dd13ad Fix bug where users saw a scary error message when exporting with no IFC data 2021-05-31 09:19:04 +10:00
Jesusbill 994ccb94f4 fix bug in adding psets for materials 2021-05-30 13:32:59 +02:00
Dion Moult c7ba643ef7 Fix material unassignment greedy purging bug, and auto assign usages of typed layer / profile sets. 2021-05-30 21:03:50 +10:00
Dion Moult 0b6f3113a7 Changing types of a dumb wall now auto updates their wall thicknesses 2021-05-30 21:03:50 +10:00
s-leger 730efcae49 Bugfix Set changed size during iteration (#1506)
Fix for remove  RuntimeError: Set changed size during iteration
Add docstring
2021-05-29 22:03:00 +10:00
Dion Moult 62b297757e Dumb slabs now are marked as parametric and inherit thickness from the slab type 2021-05-29 14:59:02 +10:00
s-leger 0533a00631 Allow global listeners (#1500)
* Allow global listeners

Add "global" listeners when ifc_file is None, listeners are run whatever the file.
This way allow to register listeners before a file exists, and "global" listeners.

Add listener returns the ifc_key
Remove listeners allow optional filtering by usecase_path / ifc_key.usecase_path.

* Update __init__.py

Fix was only removing the first listener found.
2021-05-29 09:06:38 +10:00
Dion Moult 7fe2e93dea Fix #1491. Bug where drawings couldn't have a slash in their names. 2021-05-28 17:26:00 +10:00
Dion Moult acc9bd736f Fix #1048. Switching drawings now works when in local view. 2021-05-28 16:09:42 +10:00
Dion Moult 478612b6ae Fix #976. Bug where project data dir was not very customisable without running into issues. 2021-05-28 15:58:19 +10:00
Dion Moult a24d683613 Fix #1396. New walls are selected when created. 2021-05-28 14:50:36 +10:00
Dion Moult 0b5d7cdbf3 Fix #1455. Bump IfcOpenShell. 2021-05-28 14:36:48 +10:00
Dion Moult b8e20ec1a5 Reimplement raster underlays when generating drawings. See #1153. 2021-05-28 14:33:46 +10:00
Dion Moult 1cd243f13c Fix #1462. Standardise IfcOpenShell API to use Pythonic argument names. 2021-05-28 10:59:39 +10:00
s-leger 0a2adbb632 Implement remove pre / pos / all listeners (#1498)
Remove listeners, passing callback method.
Will not handle file pre_load cleanup / post_load setup here to prevent any blender's dependancy.
2021-05-28 10:07:56 +10:00
Dion Moult 8882c99455 Implement editing IFC header metadata. See #747. 2021-05-28 09:50:55 +10:00
Dion Moult 7890ded698 Fix #1429. MVDs now reflect the full DesignTransferView by default. 2021-05-28 09:49:57 +10:00
bosonprojets 7d2d9b2bcf purging of cost and task inverse relationships in ifcopenshell.api, and amendement to cost item values editing UX in BlenderBIM 2021-05-28 00:24:01 +01:00
s-leger 75ae501ff9 Evaluate coplanar vertex in faces (#1489)
The idea is to only triangulate non co-planar faces when required.

Timings for evaluation with matrix based algo.
IfcRoof/Roof found 3927 of 116178 polygons: 0.366638 sec
IfcWall/Wall.012 found 0 of 6 polygons: 0.000046 sec

So should be acceptable for common use cases
But with single precision in blender we may still be over occ precision with a 1e-6 epsilon.
2021-05-28 08:57:22 +10:00
luz paz 880fbe9533 Fix misc. source comment typos
Found via `codespell`
2021-05-27 09:40:06 +02:00
Dion Moult c2684f4fbf New split wall tool 2021-05-27 16:33:34 +10:00
Dion Moult afdc1e6679 New feature to export point lights (IfcLightSourcePositional) into IFC 2021-05-27 13:55:44 +10:00
Dion Moult 8935a17844 Really barebones UI to list space boundaries. 2021-05-27 13:54:18 +10:00
Dion Moult 93c59e81c6 Minor code review for BCF XML 3.0 implementation with TestPrab 2021-05-26 18:00:21 +10:00
Dion Moult d423274e62 New wall flip tool with hotkey. Wall aligner now allows flipped walls. 2021-05-26 17:20:34 +10:00
Dion Moult 7958dd837b New wall tool with hotkeys for rapid wall editing 2021-05-26 15:45:45 +10:00
Long e42a638220 implement DatePicker, visualisation time demo (#1488) 2021-05-26 14:59:20 +10:00
Dion Moult f5f314a58f Dumb walls now auto update thicknesses if the wall layer thickness changes 2021-05-26 11:36:06 +10:00
Dion Moult 96465bed8f Code review for BCFXML v3 Markup.xsd implementation with TestPrab 2021-05-25 18:44:11 +10:00
Prabhat Singh 41bdeea981 Added Script for V3 bcfxml (#1486)
* Added Module Loader

* Added Project and Version script for v3

* Cleaning the code

* optional fix

* Added markup.xsd in v3 bcfxml

* Completed Vision.xsd and Markup.xsd

Co-authored-by: Dion Moult <dion@thinkmoult.com>
2021-05-25 17:22:01 +10:00
Dion Moult 14e0910e59 Purge old dumb wall. Bye bye! 2021-05-25 13:39:55 +10:00
Dion Moult e0ba1c2183 Total layer set thickness is now calculated and shown in the UI 2021-05-25 13:25:05 +10:00
Dion Moult a13b71abf0 Layer set usages now inherit layer sets from the type. Walls now support material layer set usages. Also minor fixes, thanks s-leger! 2021-05-25 13:10:26 +10:00
Dion Moult 32fb359ee2 Copying objects in Blender now auto copy them in IFC too. See #1360. Thanks s-leger! 2021-05-25 11:07:56 +10:00
s-leger 61661fe6f3 implement missing create curve 2d method (#1484) 2021-05-24 23:14:26 +10:00
Dion Moult 92054b1999 Fix bug where objects created with the same name fail to sync geometry on export 2021-05-24 21:22:50 +10:00
Dion Moult 22d9bce591 Dumb walls now automatically generate wall axis upon update 2021-05-24 20:56:47 +10:00
Dion Moult bfe9213f67 Dumb walls now auto calculate length, width, height, and simple volume quantities when being updated 2021-05-24 19:28:47 +10:00
Dion Moult 1abf854f01 New formwork area calculation feature 2021-05-24 18:56:20 +10:00
Dion Moult 686b2a187d New wall align tool (align exterior, interior, or centerline) 2021-05-24 17:29:32 +10:00
Dion Moult 7c2764c98a General bugfix and stability improvements to WIP wall join tool 2021-05-24 17:03:55 +10:00
Dion Moult f73a3a8f79 Fix bug where you were unable to delete certain objects. See #1483. 2021-05-24 13:51:51 +10:00
s-leger b9723c08e4 Ensure polygons are always coplanar (#1482)
* Ensure polygons are always coplanar

fix #1481
May adopt a bmesh approach instead ?

* Ensure polygons are coplanar

The bmesh version is lot faster than modifier one
2021-05-24 08:19:39 +10:00
Thomas Krijnen 1e80e67df5 #1472 various considerations for handling of non-manifold elements with openings 2021-05-23 16:26:34 +02:00
Thomas Krijnen 3e8c10b775 first rough partial draft of alignment handling in python 2021-05-23 09:48:47 +02:00
Thomas Krijnen fd9f209a19 Additional validity check with log level debug 2021-05-23 09:36:31 +02:00
Dion Moult 6b72f7322b Creating walls from cursor now auto-align perpendicular to the wall the cursor is at 2021-05-23 11:48:20 +10:00
Dion Moult 9b0d9c1f91 Stroke-generated walls now auto-join likely butt joints and t-junctions 2021-05-23 11:09:56 +10:00
Dion Moult 26b699be7c You can now join walls in bulk 2021-05-23 10:56:34 +10:00
Dion Moult 294eba24c4 You can now unjoin walls 2021-05-23 09:32:39 +10:00
Dion Moult 09094c090c New sketch wall tool, and join wall tool (T-junction, butt joint, and mitre joints) 2021-05-22 15:39:28 +10:00
ahladik a0dad0802e Fix to IfcHierarchyHelper.cpp (#1476) 2021-05-21 13:26:40 +02:00
Dion Moult 97244d1919 Revisiting dumb walls - typed dumb walls now auto derive wall thickness from the type material 2021-05-20 12:53:40 +10:00
Dion Moult 1541cbbbb8 Fix bug where sometimes active object edits would not get synced correctly. 2021-05-19 21:05:03 +10:00
Dion Moult 82692bb88d Adding a new type instance (like furniture, walls) now snaps it to the bottom of the storey you're working on. Nice. 2021-05-19 17:59:13 +10:00
Dion Moult 77a97233c5 New authoring panel for adding instances and fix bug where new cube instances were missing a face 2021-05-19 16:24:34 +10:00
Dion Moult 4214a449a8 Only show search UI if an IFC model is loaded. 2021-05-19 14:46:02 +10:00
Dion Moult b650c045f5 Simple support for API listeners for parametric IFC authoring - editing any parameter can now trigger events from a "parametric engine" which synchronises other related geometry and attributes in the IFC dataset. Implement auto box generation as a first demo. 2021-05-19 14:45:47 +10:00
Prabhat Singh 851ab07192 Added Project and Version script for v3 bcfxml.py (#1473)
* Added Project and Version script for v3

* Removed Redundant part

* Optional Element Fixes
2021-05-19 08:40:28 +10:00
civilx64 20a36c39fc finish implementing clothoid transition 2021-05-18 15:46:55 +02:00
civilx64 38544e2ba9 develop calcs for biquadratic parabola and clothoid curves 2021-05-18 15:46:55 +02:00
civilx64 41a88bcd4d create implementation of IfcTransitionCurveSegment2D 2021-05-18 15:46:55 +02:00
Dion Moult 966850c54a Minor fix 2021-05-18 20:02:56 +10:00
Dion Moult 319fe13f9e Minor refactor 2021-05-18 17:48:44 +10:00
Dion Moult 0d5110b7af Fix bug where you were unable to remove a representation 2021-05-18 16:42:41 +10:00
Dion Moult de873461e1 Fix bug where IFC2X3 files did not correctly generate 2D representations 2021-05-18 16:41:55 +10:00
Dion Moult cbce3cbec0 Assigning a representation to a product type now syncs mapped representations of all of its typed products. 2021-05-18 16:41:30 +10:00
Dion Moult 0822d1d377 Fix crash when switching representations for a type products. 2021-05-18 16:29:19 +10:00
Dion Moult e6bf32b832 Fix potential instability when assigning types and synchronising Blender geometry 2021-05-18 14:36:12 +10:00
Dion Moult 30c31d694a Purge OCC dependency and old drawing system. See #1153. 2021-05-18 10:44:33 +10:00
s-leger 65c2f9a038 Add support for rel_void / rel_fill / rel_project relative placement when editing object placements(#1471)
* Add support for rel_void / rel_fill

* Fix relationships, and add support for projection elements

Co-authored-by: Dion Moult <dion@thinkmoult.com>
2021-05-18 09:46:15 +10:00
Dion Moult 2d42846fa3 Basic reimplementation of the 2D representation support without PythonOCC. See #1153. 2021-05-17 21:52:23 +10:00
Dion Moult d3bb895c9d No new functionality. Just throwing all drawing code in the drawing module. See #1153. 2021-05-17 15:15:25 +10:00
Dion Moult aeead1c011 Purge old swept solid system. No longer relevant in the land of native IFC. 2021-05-17 14:24:10 +10:00
Dion Moult ba742d5976 Fix #1465. Bump BCF to new namespace. 2021-05-17 14:02:29 +10:00
s-leger 27750e0caf fix is_native_swept_disk_solid logick (#1469)
* Update import_ifc.py

Ensure that at least a raw representation exists before checking for type.

* Update import_ifc.py
2021-05-17 10:02:41 +10:00
s-leger 5b02d3214d Unlink only from relevant collections (#1467)
Objects may be linked to non ifc related collections, so keep those links whatever.
2021-05-17 09:35:14 +10:00
Prabhat Singh 0f55a98b2f Added Module Loader (#1468) 2021-05-17 09:34:31 +10:00
Laurens Oostwegel 13209b6d03 Create mapping to IFC for all CityJSON object types & semantic surfaces 2021-05-16 18:55:00 +02:00
Laurens Oostwegel 411855495e support for CityJSON MultiSurface, CompositeSurface & interior faces for cityjson2ifc convert 2021-05-16 18:16:59 +02:00
Laurens Oostwegel 79ebbb82ef Minor fix in previous commit regarding writing of ifc file 2021-05-16 15:46:31 +02:00
LaurensJN 647a96a655 Update README.md of ifccityjson 2021-05-16 15:36:58 +02:00
Laurens Oostwegel 66d4665498 Instead of using a template ifc file, ifccityjson now uses ifcopenshell.api to create a new file for conversion 2021-05-16 15:32:35 +02:00
Dion Moult 537efdcb53 Continue refactor, and provide user options to regenerate vector base layer / annotation layer of drawings. See #1153. 2021-05-16 23:13:27 +10:00
Dion Moult f2352e9a17 Old annotation systems now creates IFC elements again. Also text and misc annotations now work again with new system. See #1153. 2021-05-16 18:26:48 +10:00
Dion Moult e0b3a87fdb You can now select all products that are part of a group 2021-05-16 11:24:51 +10:00
s-leger ff06f452d5 disable boolean for mesh evaluation (#1466)
Disabling boolean modifier on screen instead of remove / add is enough to get proper mesh representation.
2021-05-16 10:20:56 +10:00
Dion Moult 5aec0718f4 IFC drawings are now roundtrip and are imported as Blender camera objects. See #1153. 2021-05-15 18:05:15 +10:00
Dion Moult fdcafa98b3 Continued grid bugfixing, especially related to export-time syncing. 2021-05-15 12:06:58 +10:00
bosonprojets 1776b19c07 Further fix to task_time durations editing 2021-05-15 02:04:43 +00:00
bosonprojets e1d1dca518 Minor fix to editing task durations 2021-05-14 23:25:54 +00:00
bosonprojets e8ab4dcc14 Improved UX for editing task durations 2021-05-14 23:04:51 +00:00
Dion Moult 41443d1a64 Fix bunch of bugs related to grid name syncing, axis deleting, copy axes and grid deletion 2021-05-14 20:19:30 +10:00
Dion Moult 13c642c6ab A little progress on refactoring the old drawing module into an IfcConvert based system. See #1153. 2021-05-14 17:49:24 +10:00
bosonprojets c40f07f9b5 Minor fix for editing Work Schedule Attributes 2021-05-14 07:40:54 +00:00
Dion Moult ae7d123aa2 Qto module now has various qto methods you can do to bulk populate quantities 2021-05-14 15:13:40 +10:00
Dion Moult 7c6e7996ff Improve the costing UI to format numbers properly and not take up so much space for cost components 2021-05-14 15:13:40 +10:00
ahladik 6ec23faf26 A few fixes of types and a typo (#1464) 2021-05-13 21:11:19 +02:00
Thomas Krijnen 81ad689478 #841 missing return value 2021-05-13 10:09:09 +02:00
Dion Moult b3c918f15f Implement load management and assigning activities with named loads. Thanks Jesusbill! 2021-05-13 18:04:50 +10:00
Dion Moult de7ddd9b97 You can now filter products assigned to a cost item or schedule 2021-05-13 15:54:26 +10:00
Dion Moult 66862a6cba You can now copy cost values from one cost item to another 2021-05-13 15:11:45 +10:00
Dion Moult 4e014d1a10 New utility functions for copying and deep copying IFC elements 2021-05-13 15:11:18 +10:00
Dion Moult 3b33977acc Linked cost item products now auto update cost quantities upon assignment and unassignment, with user friendly quantity type selection dropdown 2021-05-13 14:25:05 +10:00
Dion Moult 5334d2b754 Refactor pset module to follow the same design patterns as other modules, in preparation for complex property / quantity handling in the future 2021-05-13 11:55:25 +10:00
Jesusbill 75ed4dcdd8 you can now edit a structural connection coordinate system 2021-05-12 17:43:07 +02:00
Prabhat Singh 0276c8271e Prabhat gsoc (#1463)
* Added Pipfile and Pipfile.lock in gitignore

* Added File Structure for v3

* Add files via upload
2021-05-12 22:22:12 +10:00
Dion Moult beb813cb21 Fix bug where related openings are not deleted when you delete a product 2021-05-12 22:20:58 +10:00
Dion Moult 35ceba2e88 Fix #1462. 2021-05-12 19:12:46 +10:00
Thomas Krijnen 64b8eee077 #1461 only check for numbers on basename 2021-05-12 11:04:28 +02:00
Thomas Krijnen 229ba95d4b #1442 no longer create compsolids in extrusions 2021-05-12 09:58:11 +02:00
Thomas Krijnen 3f9e5ca806 respect --orient-shells for tesselated items 2021-05-11 23:09:41 +02:00
Thomas Krijnen cf68cf6f5c new_helper 2021-05-11 22:35:46 +02:00
Thomas Krijnen 34386ea27c Hacky solution to disable schemas to speedup compilation 2021-05-11 22:29:16 +02:00
ahladik ce76d27acc Update Boost download address (#1458) 2021-05-11 14:49:18 +02:00
Dion Moult 353281fa4d Updating a task duration now auto calculates the scheduled finish times based on the working calendar 2021-05-11 11:35:47 +10:00
Thomas Krijnen dd6f593e26 V7_5_2.patch 2021-05-10 21:36:38 +02:00
Dion Moult a9228c0800 Support importing lag times from P6 XML 2021-05-10 21:15:23 +10:00
Thomas Krijnen 5e52abb3cf Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2021-05-10 11:47:25 +02:00
Thomas Krijnen 8384235e10 Tree API extensions in wrapper 2021-05-10 11:47:16 +02:00
Dion Moult d98ac8ce89 Implement inherited calendars in the sequencing task tree 2021-05-10 18:40:51 +10:00
Dion Moult 1b4b2a526d Derived durations now calculate working days based on the calendar 2021-05-10 18:34:25 +10:00
Dion Moult b1ed85adda Fix incorrect P6 duration import. Now things finally make sense. 2021-05-10 18:31:49 +10:00
Dion Moult 02bfbf0144 You can now show calendars in the work schedule task tree 2021-05-10 11:34:50 +10:00
Dion Moult 3224c4fc77 New IfcPatch recipe to convert units of an IFC file. See #1247. 2021-05-10 10:39:17 +10:00
Dion Moult 19e67613db New recipe to clean up IFCs that store quantities in properties. 2021-05-10 09:27:31 +10:00
Thomas Krijnen e98771ae09 win build: boost dl dir 2021-05-08 21:51:28 +02:00
Thomas Krijnen 58663769c9 Update boost dl location
https://www.boost.org/users/news/boost_has_moved_downloads_to_jfr.html
2021-05-08 14:15:43 +02:00
Thomas Krijnen 28081f7df8 Fixes for spatial tree on iterator and positive extend param 2021-05-08 13:04:22 +02:00
Dion Moult a80fbdbc1d Implement arithmetic formulas for cost value components 2021-05-08 12:18:27 +10:00
Dion Moult 46bc688f26 Fix bug where empty material slots caused errors 2021-05-08 08:57:33 +10:00
Dion Moult f9b79b4beb Implement add / remove load groups, and half implement structural activities. Thanks Jesusbill and ihabelaghoury 2021-05-07 18:41:03 +10:00
Dion Moult 15927dd501 Refactor cost operator to use helpers 2021-05-07 15:10:45 +10:00
Dion Moult 7919c193b8 Minor improvement to deep purging for removing work schedules 2021-05-07 11:16:05 +10:00
Dion Moult 6492b93c69 Minor fix 2021-05-07 10:58:12 +10:00
Dion Moult 992474fbf2 Minor structural code review 2021-05-06 18:24:13 +10:00
Dion Moult 8a3e023408 Fix unfinished time/date/duration handling in edit task time, work plan, work schedule, and finally refactor attribute i/o like I promised 2021-05-06 17:14:28 +10:00
Jesusbill a13b257452 add point orientation - wip 2021-05-06 08:43:12 +02:00
Jesusbill 3f9842e358 extend structural api data for loads 2021-05-06 08:32:49 +02:00
bosonprojets 764b880ea8 Fix MSProject relationship_id issue at import 2021-05-06 06:19:40 +00:00
bosonprojets a10f4c070a Fix MSProject calendar day mapping at import, and add relationship type display in blenderBIM 2021-05-06 06:08:21 +00:00
Dion Moult 114214e2a1 Implement natural sorting for task trees, and support nested tasks in MS Project XML imports 2021-05-06 14:23:20 +10:00
bosonprojets d19d4fca3e FEature to import Microsoft Project .xml Schedules and convert to IFC schema 2021-05-06 02:40:04 +00:00
Jesusbill a031bffe6c you can now add, edit and remove structural load cases 2021-05-05 14:22:18 +02:00
Dion Moult 6ff792d75c Whoops 2021-05-05 18:43:12 +10:00
Dion Moult 6b3393c003 You can now generate construction sequence animations to visualise within a date range 2021-05-05 18:36:28 +10:00
Dion Moult da5a2625a9 New feature to visualise construction progress at a particular date 2021-05-05 17:07:17 +10:00
Dion Moult a1eb2a1ec3 Fix identification sorting issue of construction sequencing task trees 2021-05-05 12:49:22 +10:00
Dion Moult 403412e088 Support importing activity and calendar assignments from P6 2021-05-05 12:48:48 +10:00
Dion Moult ee46e76340 Derive start and finish dates and elapsed durations where possible in the task tree 2021-05-05 11:59:33 +10:00
Dion Moult 925c40c6ba Fix duration type when importing durations from P6 2021-05-05 11:58:36 +10:00
Dion Moult dea844dcf6 Fix purging when removing tasks 2021-05-05 11:57:47 +10:00
Dion Moult 018d754b2e Fix P6 WBS identification import 2021-05-05 10:16:25 +10:00
Dion Moult a05d017341 Implement adding, editing, and removing time lags to sequence relationships 2021-05-04 20:56:19 +10:00
Dion Moult f63479c823 Code review and use isodate library to handle durations for robustly 2021-05-04 12:52:14 +10:00
bosonprojets 8a8bdeeaa3 Update to ifcopenshell.util.date for handling of IfcDuration with python and import of Planned Durations from P6 .xml exports in blenderBIM 2021-05-04 00:27:53 +00:00
bosonprojets 6b46ff71a6 Implement feature to select all products related to a task in blenderBIM, and the ifcopenshell.api 2021-05-02 01:44:56 +00:00
bosonprojets d73a5c46ea Add support for editing sequence relationship attributes in blenderBIM 2021-05-01 21:45:27 +00:00
ArturTomczak 037261afb9 IDS Add PredefinedType support (#1447)
* fixed typos

changed all 'applicabiliy' to 'applicability'

* added boolean restriction

* Add PredefinedType support

* replace f-string with %

* skip PredefinedType if not IFC4

* code formatting

* check PredefinedType if exists not based on schema

* narrow try-except

* remove debug data
2021-05-01 09:09:35 +02:00
Dion Moult be87b17909 Support importing P6 sequence types and new view sequences UI 2021-04-30 21:34:18 +10:00
Dion Moult 932a21309f Support assigning work calendars to tasks 2021-04-30 17:40:00 +10:00
Dion Moult 7a1b35f7e2 Support different versions of P6 XML imports 2021-04-30 15:57:42 +10:00
Dion Moult 79dcf809ed Implement support of importing calendars from P6 2021-04-30 14:53:40 +10:00
bosonprojets 2f53e43b90 Added Usecases to assign, edit and unassign Lag Times to the ifcopenshell.api 2021-04-30 02:21:54 +00:00
Dion Moult cdc9180111 Support root-level activities when importing from P6 XML 2021-04-30 12:04:15 +10:00
Thomas Krijnen a936a5317d #1445 comment 2021-04-29 16:29:31 +02:00
Thomas Krijnen f5e5ede0fa Revert "Fixes IfcUtil::valid_binary_string so it returns false for an empty string"
This reverts commit 2514e93a8d.
2021-04-29 16:28:16 +02:00
Rick Brice 2d1ddea3d0 Fixes conditional logic 2021-04-29 16:27:57 +02:00
Rick Brice df932b90d6 Adds parsing for Ifc4x3_rc2 schema 2021-04-29 16:27:57 +02:00
Rick Brice 2514e93a8d Fixes IfcUtil::valid_binary_string so it returns false for an empty string 2021-04-29 16:27:57 +02:00
Rick Brice 64e6561828 Initalizes list_ with null points 2021-04-29 16:27:57 +02:00
Thomas Krijnen 76685d236c SVG Fixes to text positioning 2021-04-29 16:16:41 +02:00
Dion Moult fd83564af0 Sorry forgot to commit 2021-04-29 19:37:59 +10:00
Dion Moult 37e3a65ffb Decouple pset APIs from blenderbim namespace 2021-04-29 19:35:21 +10:00
Dion Moult e5cf0cde2d Improve time and date support (don't cast to datetime) and support all recurrence types and time periods in work schedules 2021-04-29 17:52:45 +10:00
Thomas Krijnen 78e4478242 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2021-04-29 07:54:15 +02:00
Thomas Krijnen 3497022c78 SVG Also include annotations in non-floorplans 2021-04-29 07:53:05 +02:00
Dion Moult 810d36781c Add support for editing calendar work and exception times and recurring work times 2021-04-29 13:16:47 +10:00
bosonprojets f8eb1c178a Usecases to edit WorkCalendar Attributes in the ifcopenshell.api 2021-04-29 02:43:14 +00:00
Dion Moult b726ba7816 Simplify work calendar UI 2021-04-29 09:55:50 +10:00
bosonprojets 4ab23d231d Usecase to Unassign object aggregation in the ifcopenshell.api 2021-04-28 12:43:14 +00:00
Dion Moult 00694854af UI clean up for work plans and code review for assign schedules to plan 2021-04-28 17:59:57 +10:00
Dion Moult fa52ed6dbc Fix bug where you might have an activity that is not part of any WBS from P6 2021-04-28 16:54:54 +10:00
Dion Moult 319b59a266 Fix bug where sometimes migrating an IFC file schema version can explode in filesize 2021-04-28 16:53:38 +10:00
Dion Moult 357fcded71 Implement OAuth authorization in the bSDD library 2021-04-28 13:27:31 +10:00
bosonprojets c3cc5881df Aggregate WorkSchedules to WorkPlans 2021-04-28 02:17:08 +00:00
Dion Moult 56046dd6f9 Cost quantities that are counting that have controlled products now automatically count the number of products for convenience 2021-04-27 14:45:14 +10:00
Dion Moult 9164a7bcc3 Support importing predecessor and successor relationships from P6 2021-04-27 12:30:09 +10:00
Dion Moult e0a5c9c8f3 You can now assign derived quantities from products to cost items 2021-04-27 12:09:52 +10:00
Dion Moult 22e087c82a Fix #1443 bug where UI update of type name was not refreshed when you changed it 2021-04-26 19:46:27 +10:00
Dion Moult 57396e1bb9 Make cha-ching noise whenever you're checking out cost schedules 2021-04-26 18:46:35 +10:00
Dion Moult 389076bff4 Implement feature for manipulating cost values, with support for calculation of subtotals 2021-04-26 18:18:42 +10:00
Dion Moult bfcc067257 New feature to manipulate cost item quantities 2021-04-26 12:41:19 +10:00
Dion Moult f88ac5de62 Minor code review to assign / unassign resource products 2021-04-26 09:38:45 +10:00
bosonprojets cdd456bede Assign and Unassign resources to scene objects in BlenderBIM 2021-04-25 23:25:05 +00:00
bosonprojets 7041d17c16 Unassign Resources Usecase added to the ifcopenshel.api 2021-04-25 22:59:01 +00:00
Dion Moult de842f7aba Code review with myoualid for IFC resource module 2021-04-25 12:29:11 +10:00
bosonprojets 6107c39c1c Update to IfcResources panel and authoring subtypes of IfcConstructionResource with ifcopenshell.api 2021-04-24 23:34:38 +00:00
Thomas Krijnen 9584687fcf Ensure solid from tapered extrusions 2021-04-24 20:47:25 +02:00
Thomas Krijnen b231e9051b Update main.py 2021-04-24 15:23:36 +02:00
Thomas Krijnen 40f9875930 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2021-04-24 14:19:10 +02:00
Thomas Krijnen 328773550d SVG: Text annotations in elevations 2021-04-24 14:18:53 +02:00
Dion Moult 303544dc5c Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2021-04-24 20:32:10 +10:00
Dion Moult 1c66f986cc Implement basebones bSDD API client library. 2021-04-24 20:31:50 +10:00
Thomas Krijnen e801629f86 Add BRepExtrema_DistShapeShape option to tree with extend keyword 2021-04-24 11:06:13 +02:00
Thomas Krijnen 74bbd6d116 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2021-04-24 11:05:31 +02:00
Thomas Krijnen e06794ef3d #1153 SVG OBB check 2021-04-24 11:05:18 +02:00
bosonprojets cd7062c905 UX layout for IfcResources in blenderBIM 2021-04-24 05:59:17 +00:00
LaurensJN 42d476cbb0 Replace old naming of ifccityjson README.md 2021-04-23 17:12:29 +02:00
Laurens Oostwegel cd0d3908d3 Add ifccityjson to start with supporting conversions between IFC and CityJSON files 2021-04-23 17:05:59 +02:00
Thomas Krijnen cb70f97789 Update ids.py 2021-04-23 12:14:52 +02:00
Thomas Krijnen 572ed0db0f Update ids.py 2021-04-23 12:13:41 +02:00
Dion Moult 43d78af767 Fix crash when pressing undo after assigning an IFC class to an object. Baby steps to solving the "Undo Sync". 2021-04-23 17:44:50 +10:00
bosonprojets c7aa42bfd5 Feature to Add Crew Resources and SubContract Resources with the ifcopenshell.api and blenderB 2021-04-23 06:38:11 +00:00
Dion Moult 18d7193efc Fix bug where a new Blender file would remember old pset templates and libraries 2021-04-22 18:37:41 +10:00
Dion Moult 8da92557cc Fix bug where deletion syncing may fail on freshly created objects 2021-04-22 18:37:03 +10:00
Dion Moult 761b4c035f Optimisations for construction sequencing task trees where there are thousands of tasks 2021-04-22 18:34:45 +10:00
Dion Moult ee0f7f1677 You can now import an IFC work schedule from a P6 XML export 2021-04-22 15:44:58 +10:00
Dion Moult dca2e58586 Fix bug where you shouldn't be able to reassign classes of non-rooted elements 2021-04-22 14:00:18 +10:00
Dion Moult 3810255f04 Fix bug where syncing was not maintained across file saves and collection names were not synced 2021-04-22 13:56:01 +10:00
Dion Moult d3ca647cd5 Minor code review fix 2021-04-22 10:53:25 +10:00
bosonprojets 8b35a3aadd Assign control to cost items and UX Workschedules and Costchedules cleanup 2021-04-22 00:18:22 +00:00
Dion Moult 78314b1ec7 Forgot to commit append_asset usecase, also minor fixes 2021-04-21 20:49:58 +10:00
Dion Moult ef88b30639 Fix bug where import mesh cleaning would inadvertently mark meshes as edited 2021-04-21 20:40:45 +10:00
Dion Moult 5e815e7832 You can now append object types from an IFC project library to your active project 2021-04-21 16:45:11 +10:00
Dion Moult e7b153cbf6 You can now generate gantt charts from work schedules 2021-04-21 12:57:31 +10:00
Dion Moult 9b855bed2d Implement unassigning products to tasks 2021-04-21 11:53:33 +10:00
Dion Moult 3143f8c9a5 Code review for assign product with myoualid 2021-04-21 11:11:08 +10:00
Dion Moult 8dd781aea2 Fix bug where you couldn't assign objects to a fresh layer 2021-04-21 11:03:36 +10:00
bosonprojets 0506475f26 Feature to add building elements to construction scheduling tasks in blenderBIM and assign product to process with the ifcopenshell.api 2021-04-20 23:51:55 +00:00
Dion Moult ac092fb6f8 Minor fix - add dateutil as dependency 2021-04-21 09:14:57 +10:00
Dion Moult 9beddca2f7 You can now toggle showing time columns in work schedule, minor fixes and ui cleanup 2021-04-20 23:34:10 +10:00
Dion Moult 6d9770542f Fixes to editing task times 2021-04-20 17:11:06 +10:00
bosonprojets 544d6ee695 Add IfcTaskTime to IfckTask 2021-04-20 05:13:03 +00:00
Dion Moult b8963b3d6e You can now modify project context declarations for project libraries, denoting which assets are part of the library 2021-04-20 13:51:41 +10:00
Dion Moult f2bd46d699 Selecting an IFC file dialog now filters ifc files for convenience 2021-04-20 12:45:42 +10:00
Dion Moult 8ac8ad33b3 You can now load and browse a tree of project library types products 2021-04-20 12:45:20 +10:00
Dion Moult 44bbd17d97 Collection assignment is now synced on export, so you don't need to manually manage your tree 2021-04-19 16:08:57 +10:00
Dion Moult 8f0e67a35b You can now assign task successor and predecessors. Sweet. Thanks myoualid! 2021-04-19 13:09:00 +10:00
Dion Moult d2d4112724 Clean up UX to either edit a work schedule attributes or task tree but not both simultaneously 2021-04-19 11:42:39 +10:00
Dion Moult 209eea6a18 You can now edit tasks. Thanks myoualid! 2021-04-19 11:10:49 +10:00
Dion Moult 85426b3fef Minor tweak 2021-04-19 10:41:25 +10:00
Thomas Krijnen c602f0f233 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2021-04-18 15:06:34 +02:00
Thomas Krijnen bb6312e174 #1153 --svg-without-storeys and correct positioning and scale based on annotation block 2021-04-18 15:03:28 +02:00
Dion Moult d6d70af5a0 You can now copy classes in bulk. 2021-04-18 20:24:08 +10:00
Dion Moult 8187c75183 If you are already authoring a file, exporting now no longer prompts for a file location. 2021-04-18 20:17:54 +10:00
Rick Brice 01cfcebb09 Fixes problem with dereferencing the end iterator for empty std::string objects 2021-04-18 12:00:48 +02:00
Rick Brice 75040b6ffb Fixes initialization issues in IfcEntityInstanceData constructors
attributes_ was allocated as an array of Argument pointers but the pointers were uninitialized in the construction. Initialization was done in the HeaderEntity class constructor.

offset_in_file_ is uninitialized in one constructor
2021-04-18 12:00:48 +02:00
Dion Moult 6c8858e51d Fix bug where edit mode syncing didn't work if you edited many objects at once 2021-04-18 19:58:07 +10:00
Dion Moult 6bb63817af Fix #1435. Fix bug where box reps could be duplicated upon adding a new body, and ensure all styles are created prior to adding new body geometry. 2021-04-18 19:28:05 +10:00
Dion Moult 1e299a0ddd Make remove_deep_batched the default since I'm the only guy using it so far and I'm feeling lucky! Let's battle test it! 2021-04-18 19:02:39 +10:00
bosonprojets 3201c234fa Feature to create IfcTask trees for entities of IfcWorkSchedule 2021-04-18 00:49:43 +00:00
Dion Moult f5d27621e7 Fix #1436. Bug where saving is done twice in authoring mode. 2021-04-17 20:18:01 +10:00
Dion Moult 3e1eb9648f Fix showstopper bug with editing pset templates module 2021-04-17 17:59:12 +10:00
bosonprojets 5f9474acb7 Feature to add multiple summary cost items and remove cost items 2021-04-15 23:16:32 +00:00
Dion Moult f4e6e924b1 Spaces are now always imported, and consistent with the rest of the spatial tree. Yes, I don't know why I held off for so long. Deprecate "import spaces". Spaces are important. 2021-04-15 19:56:18 +10:00
Dion Moult bcfc97037c Spatial aggregations are auto assigned when you create them. Neat. 2021-04-15 19:33:01 +10:00
Dion Moult 65d0abd072 Material profile set usages are now supported. Hooray! Thanks Jesusbill! 2021-04-15 18:38:51 +10:00
Thomas Krijnen 776c68e2b0 --svg-write-poly 2021-04-15 10:36:37 +02:00
Dion Moult dab2d5ce04 You can now toggle expansion of the cost item tree 2021-04-15 11:14:03 +10:00
Dion Moult 29b33661d7 You can now assign summary tasks to a work schedule. Thanks myoualid! 2021-04-15 10:38:45 +10:00
Sigma Dimensions 5dec636584 New Feature to add Tasks and Task Relationships in the python ifcopenshell API (#1432) 2021-04-15 09:40:29 +10:00
Dion Moult d11b91f152 Fix bug where adding a new material didn't make it immediately available 2021-04-14 18:41:13 +10:00
Dion Moult b0fc98e384 Fix bug where Blender prop enums persisted when starting new files 2021-04-14 18:41:13 +10:00
Tigran Khachatryan 56f09d2541 Broken link fixes
Links to Open Cascade were broken
2021-04-13 16:57:15 +02:00
Tigran Khachatryan 4484b77232 broken link fix
OCCT download link has changed
2021-04-13 16:57:15 +02:00
Dion Moult f6c054066b You can now assign spatial containers in bulk 2021-04-13 20:09:01 +10:00
Dion Moult d5c70e51f2 You can now edit structural member axis orientations. Thanks Jesusbill! 2021-04-13 13:04:05 +10:00
Dion Moult cab9e4d892 You can now assign aggregates in bulk 2021-04-13 08:25:43 +10:00
Dion Moult 14cd8289ea You can now create IFC project libraries 2021-04-11 21:56:45 +10:00
Dion Moult 4202c08487 You can now select stuff like doors / windows instead of having to select the opening element itself when adding voids, with some assumptions. See #1426. 2021-04-11 21:15:39 +10:00
Julien Moutinho a70fb41652 blenderbim: fix reference before assignment in PieAddOpening (#1426)
Co-authored-by: Julien Moutinho <julm+blenderbim@sourcephile.fr>
2021-04-11 20:52:42 +10:00
Dion Moult df437fd3e3 You can now add cost items into a cost schedule, and as sub items to a parent cost item. Thanks myoualid and Jesusbill! 2021-04-10 20:40:35 +10:00
Dion Moult 3102dbcd44 Fix bug where you couldn't add a presentation layer 2021-04-10 20:01:37 +10:00
Dion Moult 9d838db096 You can now edit cost schedule attributes. Thanks Jesusbill and myoualid! 2021-04-10 18:10:33 +10:00
johltn 0c9d555693 Handle more restrictions, save validation results to JSON objects, modification to classification class, and partly handle material terms 2021-04-09 10:56:52 +02:00
johltn 4b637c7049 Typo fix 2021-04-09 10:56:52 +02:00
Dion Moult fd3a873bbd Fix bug where you couldn't do a partial import when whitelisting only spatial elements 2021-04-09 15:43:41 +10:00
Dion Moult 5cea988911 You can now assign parameterized profiles to material profiles. Thanks Jesusbill! 2021-04-08 21:03:37 +10:00
Dion Moult 70fcbfa990 Fix bug where extrusion direction was incorrectly detected for some automagic mesh to parametric solid conversions 2021-04-08 17:15:05 +10:00
Dion Moult c541aa78e5 Fix bug where syncing upon export was broken 2021-04-08 12:22:59 +10:00
Dion Moult b821e62391 You can now add/remove material profiles in a profile set. Thanks Jesusbill! 2021-04-08 08:57:45 +10:00
Dion Moult 41141b8fc9 Geolocation micromvd now supports checking true north 2021-04-07 16:08:02 +10:00
Dion Moult ae0789e4ec New assign / unassign declaration usecase, minor code & formatting cleanup 2021-04-07 13:15:16 +10:00
Sigma Dimensions 13d4a99358 Feature to manipulate Work Calendars (#1420) 2021-04-07 09:51:20 +10:00
Sigma Dimensions becb375ec2 Feature work schedule (#1419)
* ifcopenshell.api modules Persons and Organisations account for IFC4 SCHEMA CHANGE

* New Feature to manpiulate Work Plans
2021-04-07 09:31:16 +10:00
Sigma Dimensions a777a558bd Feature edit work plan (#1418)
* ifcopenshell.api modules Persons and Organisations account for IFC4 SCHEMA CHANGE

* New Feature to Edit Workplans
2021-04-07 09:04:57 +10:00
Bruno Postle de37aeb515 faces in DXF polyfacemesh objects can have three or four sides (#1414) 2021-04-07 08:28:11 +10:00
Sigma Dimensions 23be1a6939 ifcopenshell.api modules Persons and Organisations account for IFC4 SCHEMA CHANGE (#1417) 2021-04-07 08:28:02 +10:00
Dion Moult 8edced5a0c Fix bug where rotation check in geolocation micromvd broke in the last release 2021-04-07 08:03:01 +10:00
Dion Moult 21937e88e8 Hotfix 2021-04-05 21:20:05 +10:00
Thomas Krijnen f7da83737a SVG fix bug in point interpolation 2021-04-04 22:34:16 +02:00
Thomas Krijnen 27663d80ba SVG sample more points for space name position check 2021-04-04 21:15:13 +02:00
Thomas Krijnen 4ec5d4fc65 Don't fail on lack of IfcAnnotation 2021-04-04 21:06:38 +02:00
Dion Moult 2b34ca9eb7 Minor fix 2021-04-04 12:59:39 +10:00
Dion Moult 2bb9810072 Bump IfcOpenShell 2021-04-04 12:54:08 +10:00
Dion Moult c7e87324de Fix bug where Blender floats lost precision for geolocation. Everything is now a string. 2021-04-04 12:43:41 +10:00
Dion Moult ec62d8fbb9 Fix bug where assigning a spatial container didn't update the object placement tree 2021-04-04 09:02:14 +10:00
Dion Moult 7b5aae9487 Implement getting and setting true north rotation independent of grid north 2021-04-04 08:58:24 +10:00
Dion Moult 12c94fafab Minor code shuffling to reflect the fact that projected CRS has a higher priority than map conversion 2021-04-03 22:05:20 +11:00
Dion Moult 09be170820 Geolocation utilities now support converting either X axis or Y axis to an angle 2021-04-03 21:58:35 +11:00
Dion Moult 966af5a757 You can now add / remove cost schedules 2021-04-03 19:46:52 +11:00
Thomas Krijnen 89557460c8 SVG text annotation descriptions 2021-04-02 21:59:49 +02:00
Thomas Krijnen 2bad6b2722 yet another todo note 2021-04-02 21:25:01 +02:00
Thomas Krijnen e5cd30c6d0 SVG dimension text offset depending on scale 2021-04-02 21:21:27 +02:00
Thomas Krijnen 6f2da2896e try catch convert_placement() 2021-04-02 21:20:53 +02:00
Dion Moult 0387c778f4 Fix bug where you couldn't add type instances for IFC4 2021-04-01 15:03:42 +11:00
Dion Moult 76568ea67c Fix bug where express has a typo that broke the ability to add ifc transformers 2021-04-01 14:55:10 +11:00
Dion Moult 8e2a1a1649 A reference graph view context is now created automatically for convenience when you create an analytical model 2021-04-01 12:06:25 +11:00
Dion Moult cb5f57d68a Point connections are now treated as regular geometry, not an edge case (get it?). See #1409. Thanks @Jesusbill! 2021-04-01 11:58:46 +11:00
Dion Moult e7c6f28312 You can now add structural connections to members 2021-04-01 11:09:44 +11:00
Jesusbill 1820f72bc4 You can now remove structural connection conditions + minor mods 2021-03-31 18:58:02 +02:00
Dion Moult 1631dc39f5 You can now add and remove work plans with a new UI. Thanks @bosonprojets and @jesusbill! 2021-03-31 11:35:40 +11:00
Dion Moult d2f19e7c28 You can now edit structural boundary conditions on member connections 2021-03-30 12:00:25 +11:00
Jesusbill 736703336c work on structural connection conditions 2021-03-30 01:12:33 +02:00
Dion Moult 44df1f676d Finish decoupling ownership history code from Blender 2021-03-29 16:53:11 +11:00
Dion Moult f1ffb81c86 See #841. Minor optimisation and fixes. Thanks @ecke101 ! 2021-03-29 13:55:05 +11:00
Thomas Krijnen 08ec3fc73f SVG --space-name-transform 2021-03-28 22:16:58 +02:00
Thomas Krijnen f1d7cf1dfb SVG --storey-height-line-length 2021-03-28 21:38:29 +02:00
Thomas Krijnen 1ee488b148 Quick solution for inline dasharray 2021-03-28 16:55:52 +02:00
Thomas Krijnen ecb9827e7f Explicit cast 2021-03-28 13:04:16 +02:00
Thomas Krijnen 88f26eaead Work towards #1153 2021-03-28 12:48:20 +02:00
Dion Moult ce03742aab New ifcopenshell.api.run syntax, and rename create_product to create_entity. See #1399. 2021-03-27 22:53:13 +11:00
Thomas Krijnen 62540f0b00 #1404 2021-03-27 10:00:41 +01:00
Dion Moult 406b8b4540 IfcOpenShell API now uses kwargs to improve user syntax. See #1399. 2021-03-27 19:14:46 +11:00
Dion Moult ca24838a3f Don't load OCC upon startup, in preparation for deprecation when IfcConvert can handle #1153. See #1400 and #1358. 2021-03-27 18:38:20 +11:00
Thomas Krijnen ff7219b557 CMake < 3.7 compatibility
See https://github.com/glfw/glfw/issues/1584
2021-03-26 20:40:01 +01:00
Jesusbill 711acfe120 revert erroneous mod from bulk change 2021-03-26 17:51:35 +01:00
Dion Moult f1acda85c9 Call the daily builds "developer testing builds" to prevent misleading users 2021-03-26 20:52:32 +11:00
Dion Moult 228f62d218 Minor fix 2021-03-26 20:49:57 +11:00
Dion Moult 6186a88568 Rename misleading "ifcblenderexport" directory to "blenderbim" 2021-03-26 20:44:14 +11:00
Dion Moult 074a8c287f Support owner histories for a bunch more usecases. About half done. 2021-03-26 10:39:07 +11:00
Dion Moult d4736710a5 Thanks @ihabelaghoury! You can now select objects in the viewport by GlobalId from the IFC inspector 2021-03-25 20:29:37 +11:00
Dion Moult 0bc86631a5 Minor fixes after the refactor mess 2021-03-25 20:19:48 +11:00
Dion Moult 9751b6af05 Deletions are now synced on export, so you don't need to delete via the UI. 2021-03-25 16:48:58 +11:00
Dion Moult 6d641aaac1 Still cleaning up related to ownership histories. See #1399. 2021-03-25 16:32:43 +11:00
Dion Moult 489a248e9a Refactor ownership history system to be simpler and just a usecase. See #1399. 2021-03-25 11:42:12 +11:00
Jesusbill 9c00872a57 replace settings=None with {} 2021-03-25 00:54:42 +01:00
Dion Moult d77bc6bdaa First attempt at ripping out agnostic code into ifcopenshell.api namespace. See #1399. 2021-03-25 10:48:48 +11:00
Priit Laes 911d703f57 build: Use -Wno-deprecated-copy for GCC 9+
OpenCascade causes a lot of warnings due to -Wdeprecated-copy on GCC 9+.
These warnings are also emitted with clang, but only once per file.
2021-03-24 09:25:13 +01:00
Dion Moult 09bf5b85aa Refactor getting primitive data type into util 2021-03-24 16:09:29 +11:00
Dion Moult 41a694d0dc Fix bug where you couldn't set logical properties in psets. See #1086. 2021-03-24 14:57:52 +11:00
Jesusbill 6232ee36f9 add structural connection connected members - wip 2021-03-24 00:15:22 +01:00
Jesusbill 5b1cc2cab5 rename connection to boundary condition + minor edits 2021-03-24 00:10:07 +01:00
Thomas Krijnen f706adfb81 OCCT pre 7 compatibility 2021-03-23 13:27:31 +01:00
Thomas Krijnen b0358a5a7b Keep a set of visited edges in sort 2021-03-23 10:43:12 +01:00
Thomas Krijnen eb09cc8af8 Costrain number of edges in sorted_edges 2021-03-22 14:03:24 +01:00
Dion Moult 7c61c7d200 You can now import and export IFCCSV to the current file in memory without writing to disk 2021-03-22 16:19:29 +11:00
Dion Moult 92d28901ac Fix bug where IFCCSV delimiter was not able to be specified on read/write properly 2021-03-22 15:35:17 +11:00
Dion Moult 32769184b0 Attempt number 4 2021-03-21 20:13:27 +11:00
Dion Moult de7f1d9d46 Attempt number 3 2021-03-21 20:10:53 +11:00
Dion Moult cbd0c8a410 Attempt number 2 2021-03-21 20:07:40 +11:00
Dion Moult f4f40c4b16 Fix fatal bug with BIMTester where languages were not bundled in installation. 2021-03-21 20:04:24 +11:00
Dion Moult f9d70fd51d Whoops 2021-03-21 12:13:42 +11:00
Dion Moult bb43405299 Fix #1294 bug where BIMTester doesn't run if you have multiple drives on Windows. Thanks @rbertucat! 2021-03-21 12:07:27 +11:00
Priit Laes 00cb3cd0db travis: Bump to Ubuntu 20.04, Python3 and use apt addon as well 2021-03-20 10:58:47 +01:00
Priit Laes 823f988536 travis: Use system JSON package 2021-03-20 10:58:47 +01:00
Priit Laes d95977a784 travis: Simplify directory "shuffling" 2021-03-20 10:58:47 +01:00
Priit Laes 4f9991fb13 travis: Use make -j $(nproc) 2021-03-20 10:58:47 +01:00
Priit Laes d8b2cc77cc travis: Enable ccache 2021-03-20 10:58:47 +01:00
Priit Laes 077f9b701d ifcgeom: Remove unneeded cast causing warning by -Wignored-qualifiers 2021-03-20 10:56:57 +01:00
Priit Laes 36ade628cf Fix grammar 2021-03-20 10:56:57 +01:00
Priit Laes 0f59f3e35a ifcgeom: Remove unused variable 2021-03-20 10:56:57 +01:00
Priit Laes 31e7bad056 ifcgeom: Reorder the members in constructors to avoid side effects (Wreorder) 2021-03-20 10:56:57 +01:00
TestPrab eee693dfcb Added requirements file (#1397) 2021-03-20 20:31:36 +11:00
Dion Moult 4a8e03862b Improve usability that you can run a patch recipe without providing arguments. See #1393. 2021-03-20 20:04:10 +11:00
Dion Moult 04f7fc0bdb Minor fix 2021-03-20 20:02:53 +11:00
Dion Moult fbe9bb1ee2 Fix bcf bug for optional project.bcfp and optional project data 2021-03-20 17:56:43 +11:00
Jesusbill ca59b3220b small fix and mod in ifc2ca 2021-03-19 23:39:25 +01:00
Jesusbill 39c8c8db37 small fix and mods 2021-03-19 23:38:28 +01:00
Dion Moult f49de02ab7 Minor purge 2021-03-19 11:04:27 +11:00
Dion Moult 8b0a7821b1 You can now view / add / edit / remove structural boundary conditions 2021-03-19 10:55:52 +11:00
Dion Moult 0f365cadbd Experimental code for (currently slow) native faceted brep handling. See #841. 2021-03-18 19:02:54 +11:00
Dion Moult 0bc76b1af7 Reimplement lost feature from refactor - native handling of swept disks (mostly rebar) in Blender during import 2021-03-17 12:39:35 +11:00
Cyril Waechter efce28c053 Fix: get_applicable return empty generator (#1390)
`PsetQto.get_applicable` was returning an empty generator when called
multiple times. Combination on lru_cache and generator seems to lead to
this unwanted behavior.
It now returns a list to keep gains of lru_cache performance.
2021-03-17 09:23:06 +11:00
Dion Moult 071505038d Fix #1388. Extract elements IfcPatch recipe now retains aggregation relationships. 2021-03-16 21:48:17 +11:00
Dion Moult 98938acb26 Fix bug where nested aggregates were not nested in the Blender scene during import 2021-03-16 20:48:12 +11:00
Jesusbill 4817360ecd place structural elements in dedicated collections 2021-03-16 01:05:25 +01:00
Dion Moult b8e3fbba8c You can now import structural point connections. 2021-03-15 21:02:25 +11:00
Dion Moult 49ea774851 Export auto syncs edited meshes if authoring mode enabled. See #1360. 2021-03-15 20:32:47 +11:00
Dion Moult f4f2a3d24e Object placements are now updated on export in case you forgot to sync them in authoring mode. See #1360. 2021-03-15 18:58:32 +11:00
Dion Moult a25ca91ba6 Fix fundamental coordinate placement resolution utility bug. See #688. 2021-03-15 18:58:32 +11:00
Jesusbill fded9b3523 avoid warning for structural analysis entities
regarding spatial hierarchy
2021-03-15 01:41:29 +01:00
Jesusbill 9257f275af Import structural curve connections + small fixes 2021-03-15 01:39:35 +01:00
Priit Laes 40039e65df Ivccsv fixes (#1385)
* ifccsv: Fix reference to invalid variable

* ifccsv: Remove unused import
2021-03-15 08:20:51 +11:00
Priit Laes dbce9ec049 actions: ci: Skip installing recommended packages
Not much, but still small improvement:
6 upgraded, 138 newly installed, 0 to remove and 43 not upgraded.
6 upgraded, 135 newly installed, 0 to remove and 43 not upgraded.
2021-03-14 16:42:09 +01:00
Priit Laes b9c5c28c54 actions: ci: Use single apt install call
Reduces time for this step ~10%
2021-03-14 16:42:09 +01:00
Priit Laes 184a189f2a actions: ci: Enable ccache
Reduces build time with full cache from 20 to ~3 minutes.
2021-03-14 16:42:09 +01:00
Thomas Krijnen 37f549927d Update ci.yml 2021-03-14 12:29:05 +01:00
Thomas Krijnen a5fe3e77e7 Update ci.yml 2021-03-14 11:59:36 +01:00
Dion Moult 708da97bbd New IFC authoring mode - when enabled, exporting the IFC auto saves the Blender file too. See #1360. 2021-03-14 20:38:25 +11:00
Thomas Krijnen f80792091f #1290 Consider dimensionality in geometricset processing 2021-03-14 10:22:43 +01:00
Dion Moult a1e34b0acb Fix bug on Windows where sometimes, the body representation wouldn't be loaded by default. See #1290. 2021-03-14 19:34:18 +11:00
Thomas Krijnen e618232e70 clone --recursive in build-all.py 2021-03-14 09:32:38 +01:00
Dion Moult 922fc2beda Build fix 2021-03-14 18:04:57 +11:00
Dion Moult 4564ee3476 Fix bug where you couldn't add layers to a fresh project 2021-03-14 10:27:12 +11:00
Priit Laes 510dca1aca build: actions: Don't hardcode parallel builds to 10 in release workflow
And convert from deprecated `backtick` syntax to POSIX-compatible $(...)
2021-03-13 15:00:46 +01:00
Dion Moult 5604db8072 The IFC Debug inspector now also shows inverse references, great for debugging IFC2X3 or style relationships 2021-03-13 22:21:44 +11:00
Thomas Krijnen 5961253c29 #1376 remove_deep_batched() 2021-03-13 12:16:40 +01:00
Thomas Krijnen 624e296d24 #1368 fix layerset folding: check length thichkness ratio 2021-03-13 10:05:33 +01:00
Dion Moult 6ad605fbeb Minor fix 2021-03-13 10:11:17 +11:00
Dion Moult 797a5ec1a0 You can now delete objects in bulk 2021-03-13 09:58:22 +11:00
Dion Moult d56869d341 Create build on every commit to see what happens 2021-03-12 10:15:01 +11:00
Dion Moult 405e8bc5aa You can now automagically create arbitrary polygonal profiles with voids from meshes 2021-03-11 21:57:47 +11:00
Dion Moult b607242339 You can now add/edit/remove/assign/unassign structural analysis models 2021-03-11 10:46:55 +11:00
Dion Moult f57aa77ac2 You can now import structural curve members (again) 2021-03-10 21:18:55 +11:00
Dion Moult 01cc1887e0 Readd support for creating structural curves representations (vertex still WIP) 2021-03-10 21:10:00 +11:00
Dion Moult 003441a451 Add support for nano and micro meter units 2021-03-10 20:59:18 +11:00
Dion Moult 4b64f09aaa Fix #1370. Bug where loading pset templates makes it unable to install on Windows. 2021-03-10 20:28:08 +11:00
Dion Moult 4afcca8550 Adding drawings now creates groups and psets. Also very basic operator added to call IfcConvert from UI. See #1153. 2021-03-10 17:48:06 +11:00
Dion Moult 1a7ea1ea05 Provide upgrade / uninstall instructions to prevent users hitting that remove error message 2021-03-10 17:48:06 +11:00
Thomas Krijnen 5616a6ede5 SVG Ugh, fix transform syntax 2021-03-09 20:40:18 +01:00
Thomas Krijnen 28fa774a9a SVG --draw-storey-heights=left option 2021-03-09 16:11:42 +01:00
Thomas Krijnen 52d4fa4781 #1363 todo note 2021-03-09 09:57:18 +01:00
Thomas Krijnen 9258dc3104 IFC2X3 IfcAsymmetricIShapeProfileDef fillet radii 2021-03-09 09:55:40 +01:00
Thomas Krijnen 469fb9c204 SVG small fix 2021-03-09 09:52:47 +01:00
ahladik f7175a67c8 Shorten Boost pathnames and fix IfcParse::IfcSIPrefixToValue() (#1364) 2021-03-09 09:11:06 +01:00
Dion Moult ebfaeafeee You can now bulk assign / unassign construction types 2021-03-09 14:25:04 +11:00
Dion Moult 1f68c3f612 Fix bug where you could not assign a related window or door type. 2021-03-09 12:51:18 +11:00
Dion Moult aceb2140ad Fix #1361. You can now unlink objects and styles of elements that you've lost the IFC of to recover them. 2021-03-09 12:50:50 +11:00
Dion Moult 310d13ac75 Unbreak macos builds 2021-03-09 08:36:15 +11:00
Krande bc2ac6b31a Automated Blenderbim releases using github actions ci (#1354)
* Initial commit for suggested blenderbim github actions setup

* Changed the github repo address from fork to main repo for clarity

* Include python version info to appear on asset name. Consider using additional matrix loop on python versions 37 and 39. Currently hardcoded py37 for testing

* Cleanup of "python_fcl" files in dist/working before compiling BIMTester

* Loop over python 3.7 and 3.9 for all platforms and build 6 releases

* Set the correct repository name in the trigger. Also make the trigger only run when "[release]" is added in the commit message.
2021-03-09 08:11:47 +11:00
Thomas Krijnen 059c405652 Github actions nproc 2021-03-08 15:20:59 +01:00
Priit Laes 28d168b96c build: cmake: Improve OCC_LIBRARY_DIR detection 2021-03-08 14:53:07 +01:00
Priit Laes e4640df6f0 build: cmake: Rework OpenCascade header directory lookup 2021-03-08 14:53:07 +01:00
Thomas Krijnen 5c3642e1d1 Use BUILD_PACKAGE option 2021-03-08 14:52:57 +01:00
Thomas Krijnen 615f567ebf username 2021-03-08 14:52:57 +01:00
Thomas Krijnen a56ca661e8 BUILD_PACKAGE option 2021-03-08 14:52:57 +01:00
Thomas Krijnen 8ee9835e27 Change repo name 2021-03-08 14:52:57 +01:00
Christophe Prud'homme b26147c1c7 Release V 0.6.0 alpha 3 2021-03-08 14:52:57 +01:00
Christophe Prud'homme c3847ff38a add runtime depends 2021-03-08 14:52:57 +01:00
Christophe Prud'homme 8299505672 Release V 0.6.0 alpha.2 2021-03-08 14:52:57 +01:00
Christophe Prud'homme 0db743d3f7 Release V0.6.0 alpha 2
install in standard python dir
bump up version
2021-03-08 14:52:57 +01:00
Christophe Prud'homme e7558d0008 Release v0.6.0 alpha.1
add EXTRA_VERSION to set prerelease (to be set to null string for final release)

add release workflow
2021-03-08 14:52:57 +01:00
Christophe Prud'homme c9f40126c3 fix python package dir
@aothms the selection of the directory needs to fixed but the current choice is reasonnable
2021-03-08 14:52:57 +01:00
Christophe Prud'homme b0554e71d5 use GNUInstallDirs to define properly the installation directories
fix typo in name LIBARY -> LIBRARY
2021-03-08 14:52:57 +01:00
Christophe Prud'homme 1bed25408f up ci 2021-03-08 14:52:57 +01:00
Christophe Prud'homme 603a034ac6 use host ubuntu 20.04 2021-03-08 14:52:57 +01:00
Christophe Prud'homme 6f802ed770 prepare for docker image of ifcopenshell 2021-03-08 14:52:57 +01:00
Christophe Prud'homme c1b9062fa4 add package using cpack and install properly 2021-03-08 14:52:57 +01:00
Christophe Prud'homme e4f591babf add gh action 2021-03-08 14:52:57 +01:00
Thomas Krijnen e9c84d1c11 SVG Rotate dimension text 2021-03-08 14:19:07 +01:00
Dion Moult e62b7e94a4 Fix #1339. You can now search case insensitively for pset, prop and attribute names 2021-03-08 16:42:47 +11:00
Dion Moult e89d540236 Fix bug where assigning a new constituent or profile was borked. Also you can now reorder material lists and constituent set items. 2021-03-08 16:19:26 +11:00
Dion Moult fa23f64e9f Fix #1344. You can now reorder items in a material layer set 2021-03-08 14:20:43 +11:00
Dion Moult cfaa90b1fb Fix bug where material / style UI was showing without a loaded IFC 2021-03-08 12:11:29 +11:00
Dion Moult dc909f1fc6 Add support for adding material layer set usages to elements 2021-03-08 08:41:06 +11:00
Thomas Krijnen 30fc2ad580 SVG: Fix storey elevations 2021-03-07 12:07:40 +01:00
Thomas Krijnen c542fb2480 explicit cast 2021-03-07 10:22:22 +01:00
Dion Moult 25717d002f Fix bug where nested aggregates failed to import 2021-03-07 14:16:08 +11:00
Dion Moult 0181bd7e56 Add support for square and cubic decimetre units 2021-03-07 10:51:30 +11:00
Dion Moult 71c6bba36d Third time lucky. 2021-03-06 14:42:30 +11:00
Dion Moult eb539666d9 Second time lucky. 2021-03-06 14:02:22 +11:00
Dion Moult e43eec6203 Add support for Python 3.9 2021-03-06 09:36:42 +11:00
Thomas Krijnen 4ca64ac42e SVG: preliminary --draw-storey-heights 2021-03-05 21:50:32 +01:00
Priit Laes f51e0db7fe build: Check for libxml2
Fixes issue #1298

Signed-off-by: Priit Laes <plaes@plaes.org>
2021-03-05 21:36:18 +01:00
Thomas Krijnen b1e8e0a968 Update vs-cfg.cmd 2021-03-05 20:58:34 +01:00
Dion Moult be66a98cfa Implement support for showing IfcMaterialLayerSetUsage material types 2021-03-05 18:27:19 +11:00
Dion Moult 76487ea3bf Deprecate the "allow non-element aggregates" workaround for prostructures as the new aggregate system should make it obsolete. 2021-03-05 16:42:39 +11:00
Dion Moult 13fe011c75 Fix bug where sometimes cartesian point offsets wouldn't get detected correctly for poorly geolocated files 2021-03-05 16:38:51 +11:00
Dion Moult 266a341c6b You can now assign/unassign products to groups. Part of #1153 roadmap. 2021-03-05 15:37:40 +11:00
Dion Moult a5bcbe046f You can now view, add, edit, and remove IFC groups. Useful, but also needed for #1153. 2021-03-05 14:06:51 +11:00
Dion Moult ab057e3eff Fix bug where you couldn't do import profiling on Windows. Thanks erab! 2021-03-05 10:02:29 +11:00
Thomas Krijnen 6aa0651190 #1153 support IfcAnnotation with Box as drawing view 2021-03-04 14:39:32 +01:00
Thomas Krijnen 0f296c486f todo note 2021-03-04 14:38:36 +01:00
Dion Moult 29f64f7c11 Drawing cameras now save IfcBlock representations in IFC. See #1153. 2021-03-04 22:04:40 +11:00
Dion Moult d2d4a1b976 Bundle IfcConvert with the BlenderBIM Add-on. See #1153. 2021-03-04 20:54:31 +11:00
Dion Moult 249ff95920 Minor fix 2021-03-04 17:26:39 +11:00
Dion Moult 4c8d12d978 Fix bug where you could add psets of the same name multiple times 2021-03-04 17:02:05 +11:00
Dion Moult 04d02feb86 Null automatically toggles when you set a property in a pset now 2021-03-04 14:58:26 +11:00
Dion Moult e6700ea29b Fix bug where existing blender offsets weren't used when importing two offset models consecutively 2021-03-04 11:58:07 +11:00
Dion Moult 9c7c3d7078 Users can now toggle hiding of null / empty properties in case they are powerusers 2021-03-03 21:50:13 +11:00
Dion Moult 0d3175c6ef Improve pset UI to show if no properties are set 2021-03-03 21:42:00 +11:00
Dion Moult 04abadac22 You can now reassign classes in bulk 2021-03-03 21:16:51 +11:00
Jesusbill 0b39226869 update readme and changelog 2021-03-01 23:39:13 +01:00
Jesusbill 9e31991e75 add "bonded" case for mesh and run 2021-03-01 23:22:55 +01:00
QwiglyDee b40bd681b1 fixed disappearing extrusion gizmo 2021-03-01 23:46:52 +07:00
QwiglyDee 63384a730b WIP gizmo for parametreic extrusion, see #1324 2021-03-01 18:42:28 +07:00
Dion Moult b9f81b8014 Minor packaging fix 2021-03-01 10:57:48 +11:00
Dion Moult c34f357301 Minor fix 2021-03-01 10:52:21 +11:00
Dion Moult beb58b89fe Basic module for integration with Augin. Nice. 2021-03-01 10:52:09 +11:00
Thomas Krijnen 97df037c93 Reformat ids.py 2021-02-28 09:34:35 +01:00
Thomas Krijnen a7d8bffca5 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2021-02-28 09:31:38 +01:00
Thomas Krijnen b5f58dc113 #1349 result formatting 2021-02-28 09:31:21 +01:00
Dion Moult 4e889b75d7 BIMTester can now accept both IDS .xml as well as Gherkin .feature files and generate HTML reports 2021-02-28 14:35:21 +11:00
Dion Moult 36cfb0d3f5 Meshes can now be automagically converted into circular and arbitrary profile extrusions (swept solids) 2021-02-28 12:04:30 +11:00
Dion Moult 5921bcb63d You can now automagically convert meshes into rectangular solid extrusions 2021-02-27 21:15:18 +11:00
Thomas Krijnen 23ad1a8005 Preliminary bSI IDS implementation 2021-02-27 11:04:45 +01:00
Thomas Krijnen f257aef8f4 #1348 special case profiledefwithvoids, needs more work 2021-02-27 10:58:22 +01:00
Thomas Krijnen 3eacd809b0 validate() docstring 2021-02-24 14:06:48 +01:00
Dion Moult e1b90ed3b2 Rebuild pset template UI to be less confusing and match the UX paradigm of other modules 2021-02-24 21:07:27 +11:00
Dion Moult 28c2d7248e Fix bug in where IfcCountMeasure and similar properties were not editable 2021-02-24 16:21:27 +11:00
Dion Moult 3bee746f49 Optimise aggregate creation on large file imports 2021-02-24 13:49:06 +11:00
Dion Moult eeb27bb1c7 Fix regression in last release where the file was loaded twice during import, which led to increased import times 2021-02-24 12:51:50 +11:00
Dion Moult d50c89abee Fix #1337. Changing the name of a Blender object now also auto changes its IFC name. 2021-02-23 21:15:27 +11:00
Dion Moult 15cf3f5afd Fix bug where undo operations may invalidate an ID map and break everything 2021-02-23 20:01:00 +11:00
Dion Moult 1e22dbca1e Meshes are auto updated in the IFC as well when edit mode is toggled now. 2021-02-23 19:19:06 +11:00
Dion Moult 28fbf0ea99 Minor fix 2021-02-23 18:55:42 +11:00
Dion Moult d874a0089d Add documentation for ifcpatch. 2021-02-22 22:04:23 +11:00
Dion Moult 441d842f67 You can now easily get and set the cursor location for local<->global coordinate conversions 2021-02-22 18:27:57 +11:00
Dion Moult 667ac307c3 Fix bug where cursor was not placed in the correct unit after a global->local coordinate conversion 2021-02-22 18:16:09 +11:00
Dion Moult c81031819c Fix bug where blender offsets were not considered in local<->global coordinate conversion 2021-02-22 18:15:22 +11:00
Dion Moult 7cbb87284c Fix bug where selecting high polygon meshes for debugging fails 2021-02-22 16:52:10 +11:00
RobinVanTol d0a9edd186 Update occ_utils.py 2021-02-21 16:04:42 +01:00
Dion Moult 425379aaad Bump IfcOpenShell build 2021-02-21 22:11:05 +11:00
Dion Moult 25d86a50c5 Minor fix for previous commit 2021-02-21 11:55:04 +11:00
Dion Moult 0286cd370d Improve UI to change spatial container to prevent accidentally selecting incorrect objects 2021-02-21 11:24:27 +11:00
Dion Moult 0178804feb Fix bug where removing mapped representations leaving you with nothing was a poor user experience 2021-02-20 18:03:03 +11:00
Dion Moult 1892e9cc86 Fix bug where copying a class did not enforce mapped representations 2021-02-20 17:23:58 +11:00
Dion Moult 1b46f5c83a Fix bug where you couldn't edit the geometry of a grid axis 2021-02-20 17:13:36 +11:00
Dion Moult 3a0edab8c1 Blender now helps prevent saving Blender without having an exported IFC. See #1323. 2021-02-20 15:15:44 +11:00
Dion Moult 7032ee9f11 STEP IDs are now shown for non-rooted elements, like grid axes. 2021-02-20 13:53:11 +11:00
Dion Moult fd19b2d730 Fix #1312. Allow null ownership histories in IFC4. 2021-02-20 10:26:58 +11:00
Dion Moult a65b9f2ba7 You can now add type instances, and mapped representations are enforced. 2021-02-20 10:11:27 +11:00
Dion Moult 2db4a6f89f Fix bug where you couldn't copy classes without representations. 2021-02-20 09:21:18 +11:00
Thomas Krijnen 517b819504 .bat script typo 2021-02-19 10:43:47 +01:00
Dion Moult a0f79cc0db Fix #1318 - unable to install add-on due to clash with Blender-OSM. 2021-02-18 17:45:06 +11:00
Thomas Krijnen 67666ed70e Attempt at https://github.com/IfcOpenShell/IfcOpenBot/issues/1 2021-02-17 16:06:50 +01:00
Dion Moult 6bcfa5946f New basic UI to view tasks in an IFC file 2021-02-17 22:54:11 +11:00
Dion Moult 52691b7ee5 You can now edit parameters of parametric profile definitions in geometry. 2021-02-17 22:03:41 +11:00
Dion Moult 780ea707b0 Highly experimental script to convert from IFC task trees into a Gantt chart JSON for jsgantt-improved 2021-02-17 21:17:02 +11:00
Dion Moult 7e7cfbdd5f Highly experimental script to convert from P6 XML into an IFC task tree. 2021-02-17 21:16:21 +11:00
Dion Moult ab102176cc IfcOpenShell date util now supports converting to IFC2X3 date entities 2021-02-17 21:12:04 +11:00
Thomas Krijnen d7f289bc8a Update stylesheet 2021-02-16 20:23:36 +01:00
Thomas Krijnen 95a34cb8d0 Update stylesheet 2021-02-16 12:13:59 +01:00
Dion Moult 8369818b88 Fix bug where geolocation was lost if you tried to edit an absolutely positioned file 2021-02-16 20:27:37 +11:00
Dion Moult 5251bdabc6 Fix bug #1315 - regression in the absolute coordinate offset feature where I forgot to convert non-meter units. 2021-02-16 18:50:04 +11:00
Dion Moult 83c33dd5b0 Fix bug where only a light removal occured when removing elements. Now, a full geometry purge is done as well. 2021-02-16 11:12:42 +11:00
Thomas Krijnen bfc695c756 #1311 better error handling during parse for schema and header 2021-02-15 11:11:14 +01:00
Thomas Krijnen 459faec01a #1311 normalize schema name case 2021-02-14 17:39:15 +01:00
Thomas Krijnen 4fb65199b8 Validate: better handling of boxed enum 2021-02-14 17:32:08 +01:00
Thomas Krijnen 08576e28d6 fixed boxed enum validation 2021-02-14 17:23:16 +01:00
Thomas Krijnen b3f581d78d Handle boxed enum creation in Python 2021-02-14 17:22:15 +01:00
Thomas Krijnen 89d6b3d21a Fixes for RC2 changes re IfcPoint and IfcSegment 2021-02-14 17:21:58 +01:00
Thomas Krijnen d2bf2cf46e Pick RC2 definitions where required 2021-02-14 17:21:34 +01:00
Thomas Krijnen 43b2982dbb fix char encoding issue in source 2021-02-14 17:20:55 +01:00
Thomas Krijnen e750a134d0 Add generated rc2 schemas 2021-02-14 17:20:34 +01:00
Thomas Krijnen 6bbbc528fe prep for 4x3_rc2 2021-02-14 12:43:27 +01:00
Thomas Krijnen 7f4a436708 regen schema 2021-02-14 12:43:09 +01:00
Thomas Krijnen e6592ca706 conversion rules for first citizin enum types #1276 2021-02-14 12:19:06 +01:00
Thomas Krijnen cc2138463e Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2021-02-14 09:49:03 +01:00
Thomas Krijnen 6de3e55d19 make wrapper import in schema_class optional 2021-02-14 09:43:10 +01:00
Dion Moult 595131e6e8 Fix #1313. Fix bug where you couldn't import two different IFC files in succession in the same Blender file. 2021-02-14 17:27:10 +11:00
Dion Moult 6966da3bdf Switching construction type now has an option to map representations 2021-02-14 16:50:27 +11:00
Thomas Krijnen 4e897a0c21 surface style ids on serialization 2021-02-13 16:03:57 +01:00
Long 73a9015801 ifcpatch make.py (#1319) 2021-02-13 20:23:59 +11:00
Dion Moult 1b2bebecb0 You can now assign types with a smart type filter, without needing to first import types into Blender 2021-02-13 18:29:52 +11:00
Dion Moult e4dee2258d Fix #1300. New IfcOpenShell.util.type module for checking applicable type classes. 2021-02-13 18:27:02 +11:00
Long 7de3eec1b1 make ifcpatch callable from command line (#1317) 2021-02-13 10:06:15 +11:00
rbertucat 20fe48bd6a BuildingSmart IFCRail changes to BIMTester (#1309)
* Add a way to validate the IFC file in BIMTester

* Fix an issue in Report where only the first error was shown

* Fix the usage of Schema in BIMTester

* Add Aggreation steps to BIMTester
2021-02-12 09:34:10 +11:00
Thomas Krijnen 1d6b2dcb37 SVG: IfcAnnotation objectype handling 2021-02-09 14:04:01 +01:00
Thomas Krijnen 45f3e677df Also process wires as part of geometric sets 2021-02-09 14:03:35 +01:00
Jesse Vander Does 65160f9bb4 Removed new line 2021-02-09 13:43:29 +01:00
Jesse Vander Does 333ba08841 Added '--no-wire-intersection-tolerance' option 2021-02-09 13:43:29 +01:00
Jesse Vander Does 2cb3b0817f Updated description 2021-02-09 13:43:29 +01:00
Jesse Vander Does 4ea95960a2 Added '--strict-tolerance' option 2021-02-09 13:43:29 +01:00
Jesse Vander Does 10f4bca5d2 Moved no wire flag inside of wire_intersections method 2021-02-09 13:43:29 +01:00
Jesse Vander Does d4a01618cd Fixed white space 2021-02-09 13:43:29 +01:00
Jesse Vander Does c9c6529978 Added '--no-wire-intersection-check' 2021-02-09 13:43:29 +01:00
Jesse Vander Does 2829a0764b Remove wire intersection check to preserve faces 2021-02-09 13:43:29 +01:00
Dion Moult 76d61cb4d4 Minor fix - map representation now only does that, and nothing more 2021-02-07 22:15:21 +11:00
Dion Moult e9d2a39166 Only IFC files are now shown in the export file dialog for a less confusing user experience 2021-02-07 20:00:26 +11:00
Dion Moult d08f4171e3 Type representations are now always imported (better for authoring), and also import super fast compared to before (before, enabling types being imported would significantly slow down import times) 2021-02-07 19:57:32 +11:00
Dion Moult 23483eafb3 Fix bug where removing a mapped representation did not properly considered all mapped usages 2021-02-07 19:13:36 +11:00
Dion Moult 686ba2536b Fix bug where you could create mapped representations without having a type product 2021-02-07 19:08:34 +11:00
Dion Moult 7d5ac99f34 Fix bug where representations wouldn't be purged correctly if they were part of a layer with many items 2021-02-07 19:05:56 +11:00
Dion Moult 9b8d224aca Minor fix 2021-02-07 13:27:23 +11:00
Dion Moult 8939d93333 Fix bug where product and type representations wouldn't be linked in Blender when importing 2021-02-07 12:53:41 +11:00
Dion Moult 04aad216ba Type representation maps are now shown in the IFC Representations UI panel 2021-02-07 11:44:14 +11:00
aothms 27eb9d340a sphinx theme 2021-02-06 15:24:17 +00:00
aothms fbb53f93d8 Merge branch 'v0.6.0' of https://github.com/IfcOpenshell/IfcOpenShell into v0.6.0 2021-02-06 15:11:00 +00:00
aothms af6aed80da Documentation changes 2021-02-06 15:10:41 +00:00
Dion Moult 92ba412c95 Fix bug where add grids didn't work. See #1284. 2021-02-06 15:24:53 +11:00
Dion Moult 110c382973 Fix ability to create grids which was totally broken 2021-02-06 15:14:38 +11:00
Dion Moult 977df60f05 Fix #1283 - dumb objects now have an assigned class 2021-02-06 08:01:29 +11:00
Thomas Krijnen 539d77b5ad #1247 Boost_NO_BOOST_CMAKE=On 2021-02-05 17:04:37 +01:00
aothms ea34c3de85 Changes to docs 2021-02-05 12:01:57 +00:00
Thomas Krijnen 9374594920 Merge pull request #1297 from IfcOpenShell/docs
Documentation generation by @johltn
2021-02-05 11:57:14 +01:00
Thomas Krijnen 6aeddcabc0 Delete file 2021-02-05 11:54:03 +01:00
Thomas Krijnen 2703dce209 Small changes 2021-02-05 11:52:05 +01:00
Thomas Krijnen dc529d4146 Merge branch 'v0.6.0' into ifcopenshell_documentation 2021-02-05 11:47:35 +01:00
Thomas Krijnen 8648b16e00 Small changes to script 2021-02-05 11:41:44 +01:00
Thomas Krijnen c0a62e8593 more cleanup 2021-02-05 11:39:35 +01:00
Thomas Krijnen ef5d672d4d Also add prefix install path with _ 2021-02-05 11:24:50 +01:00
Long 01b1f4642f fix ifcpatch recipe import path (#1296) 2021-02-05 18:19:10 +11:00
Dion Moult e92a84f917 Bump IfcOpenShell to address bug #1293 and bug #1281. 2021-02-05 10:08:20 +11:00
Dion Moult 04a2949d75 Fix import bug where loading existing elements wouldn't work. 2021-02-05 08:54:46 +11:00
Dion Moult 031a0cec59 Minor fix 2021-02-05 08:30:54 +11:00
Dion Moult 5f8e77c292 New create shape debugging tool to help determine broken or crashing elements 2021-02-04 22:25:43 +11:00
Dion Moult 384d007770 Validating IFCs UI now moved over into debug panel 2021-02-04 21:59:08 +11:00
Dion Moult e14a3a99c0 Fix bug where spatial objects with representations didn't import correctly. 2021-02-04 14:50:46 +11:00
Dion Moult 96260cdb39 Minor fix 2021-02-04 12:35:34 +11:00
Dion Moult d7f526eafd Minor fix 2021-02-04 11:56:56 +11:00
Dion Moult 55b081edf7 Implement BIMTester web app mockup 2021-02-04 11:54:42 +11:00
Thomas Krijnen ffb8c016b6 #1287 Don't wel accross different rep items 2021-02-03 14:51:02 +01:00
Dion Moult 11697fbd47 You can now specify a set of custom step definitions to BIMTester. 2021-02-03 21:58:49 +11:00
Dion Moult 4b9520a1bb Fix #1289. Users can now reassign the IFC file location if it moves. 2021-02-03 19:15:25 +11:00
Dion Moult 9717d6b1eb Fix #1288 - error when importing consecutive files. 2021-02-03 17:30:19 +11:00
Dion Moult 2f2b4e7dc2 Fix bug where switching representations would not work or create duplicate meshes. 2021-02-03 16:41:41 +11:00
Dion Moult f6c2a18e63 Now, users don't need to consider include curves and 2D annotations will always be imported. See #1142. 2021-02-03 16:22:23 +11:00
Dion Moult 08d959f66d Fix #1282. Bug where unable to install add-on in older Blender versions. 2021-02-03 14:45:52 +11:00
Dion Moult aa41f698c1 Fix #1287. Back to IfcOpenShell for booleans. Optional conversion to Blender if the user decides to do so. 2021-02-03 13:49:36 +11:00
Dion Moult c6a7dfdadb There is now an ID and GUID map to Blender objects for easy access especially for devs 2021-02-03 13:47:09 +11:00
ahladik adf5af947b Some more fixes to the Windows build procedure (#1285) 2021-02-02 12:00:55 +01:00
Thomas Krijnen 55b63410bd #747 Apply typemaps and checks to spf header 2021-02-02 11:49:42 +01:00
Dion Moult 012a2cca0f Fix bug where BIMTester audit classes dropdown wouldn't show. 2021-02-02 20:46:17 +11:00
Dion Moult 5a722a792a You can now load the active IFC file into a BIMTester audit. Rapid auditing go go go! 2021-02-02 20:45:56 +11:00
Dion Moult c3f7410f76 Fix #1266. Standardise BIMTester quotes, always translate, and refactor. 2021-02-02 16:51:12 +11:00
Dion Moult 7c1a23e5e3 BIMTester custom schema is now specified as an argument, not as a test requirement, which is where it belongs. 2021-02-02 16:11:38 +11:00
Dion Moult ac95fb1aa2 BIMTester now operates on single feature files, which heavily improves usability 2021-02-02 12:34:14 +11:00
Dion Moult 1f4df32d04 Fix bunch of error messages (commonly seen in IFCCSV) when you try to get a property value which is None 2021-02-01 10:18:10 +11:00
Dion Moult b09d030e12 Owner histories now updated when assigning aggregates. 2021-01-31 11:10:14 +11:00
Dion Moult ed9557539d Remove cache dir 2021-01-31 11:10:14 +11:00
Thomas Krijnen 500467b3a8 Fix json logger on validator for arg formatting 2021-01-30 21:58:27 +01:00
Thomas Krijnen 1cee5c3108 SVG Exclude IfcGrid from HLR 2021-01-30 16:15:54 +01:00
Thomas Krijnen 5e84d8da83 SVG Move section/elevation to origin to workaround PolyHLR bug 2021-01-30 16:15:26 +01:00
Thomas Krijnen 1317263536 SVG: Explicitly cast object type 2021-01-29 15:57:57 +01:00
Thomas Krijnen f4ef17eea6 Also exclude spaces from HLR 2021-01-29 15:57:34 +01:00
Thomas Krijnen 5db0f78646 Add result_type typedef 2021-01-29 13:49:45 +01:00
Thomas Krijnen b185f56dcc SVG Dimension ObjectType and Boolean sub for slanted slabs 2021-01-29 13:03:44 +01:00
Dion Moult b8ab478416 Editing attributes now stores a modified owner history 2021-01-29 21:19:20 +11:00
Dion Moult 97d34a7061 WIP unbreak drawing generation and support box context generation. See #1222. 2021-01-29 17:44:52 +11:00
Dion Moult 3e6a737cdb Implement assigning annotation representation. See #1222. 2021-01-29 15:16:29 +11:00
Dion Moult 4c87ea321d Improve UX of assigning classes to multiple objects. See #1222. 2021-01-29 15:16:29 +11:00
Dion Moult 91c6fb402d Sync blender and IFC names. See #1222. 2021-01-29 15:16:29 +11:00
Thomas Krijnen 47d4ea00ca Include outline in HLR render 2021-01-28 16:32:16 +01:00
Dion Moult f55438e871 You can now add 2D representations. Also, we now support exporting "wireframe" or 2D meshes into IFC2X3 which we didn't before. See #1222. 2021-01-28 17:27:23 +11:00
Thomas Krijnen b1232ecb02 Option to use projection logic on floor plans 2021-01-27 22:34:19 +01:00
Dion Moult a37e124d8f You can now duplicate or linked duplicate objects in IFC. Neat. See #1222. 2021-01-27 19:00:35 +11:00
Dion Moult c472dc2f1b You can now unlink blender objects to IFC ones. See #1222. 2021-01-27 15:41:24 +11:00
Dion Moult c0ed4074d8 You can now assign reps to type products. See #1222. 2021-01-27 15:28:29 +11:00
Dion Moult c94cac29a5 Add ability to map representations. See #1222. 2021-01-27 15:02:34 +11:00
Dion Moult f90c56013e Editing placements and meshes now can happen in bulk. See #1222. 2021-01-27 15:02:07 +11:00
Dion Moult 572efd7ea6 Minor fixes for loading schema data. See #1222. 2021-01-27 09:14:47 +11:00
Dion Moult b71febab0d Clear IfcStore when you load a new file. See #1222. 2021-01-26 21:28:54 +11:00
Dion Moult bbde897113 Fix importing of grids and non contextual geometry. See #1222. 2021-01-26 21:13:33 +11:00
Dion Moult 4527d3a96e Only allow material assignment if we have available materials to assign. See #1222. 2021-01-26 20:01:16 +11:00
Dion Moult 447a7a0eb2 Minor fix. See #1222. 2021-01-26 19:50:50 +11:00
Dion Moult 92cb138ca8 WIP improved UI ordering, and print export time in console for convenience. See #1222. 2021-01-26 16:07:35 +11:00
Dion Moult fa7353c923 WIP owner model now records ADDED state for creating products. New feature. See #1222. 2021-01-26 13:56:38 +11:00
Dion Moult 1023c8bc1c WIP fix BIMTester packaging. See #1222. 2021-01-26 12:54:27 +11:00
Dion Moult 276dc0d894 WIP implement add/remove material. See #1222. 2021-01-26 11:45:58 +11:00
Dion Moult 8618befa0f WIP refactor clash and smart clash. See #1222. 2021-01-26 09:51:33 +11:00
Dion Moult 20ab036016 WIP implement presentation layers. Nicer UI. See #1222. 2021-01-25 18:10:18 +11:00
Long 911ff4484f Improve snapshot filename checking in bcf (#1274) 2021-01-25 14:59:16 +11:00
Dion Moult b4ecdfba69 WIP refactor model module with new pie menu for convenience. See #1222. 2021-01-25 14:58:12 +11:00
Dion Moult f9521eca54 WIP Refactor patch module. See #1222. 2021-01-24 19:57:22 +11:00
Dion Moult af3ed303d8 WIP port pset template module. It probably needs rewriting, but at least no regressions. See #1222. 2021-01-24 19:17:33 +11:00
Dion Moult 9d893d2c5a WIP merge MVDs into geometry workarounds UI. Cleaner, more usable import / export UI. Remove obsoleted MVD options. See #1222. 2021-01-24 14:33:56 +11:00
Dion Moult 900aa20e10 New "remove deep" function in the element util module. See #1228. 2021-01-24 14:32:04 +11:00
Dion Moult b68f490dbc WIP port covetool. See #1222. 2021-01-24 08:19:26 +11:00
Dion Moult 65f381a377 WIP minor tweaks to port IfcSverchok. See #1222. 2021-01-23 18:42:11 +11:00
Dion Moult 8b7d96893f WIP purge old export IFC. No going back! See #1222. 2021-01-23 18:29:59 +11:00
Dion Moult aa3a855b4c Refactor qto utils and migrate to bmesh volume calculation. See #1222. 2021-01-23 18:01:29 +11:00
Dion Moult f19b962ab1 WIP More import function purging - remove groups. Openings always imported. See #1222. 2021-01-23 16:40:27 +11:00
Dion Moult 9b6366ddac WIP port constraints module. See #1222. 2021-01-23 16:32:52 +11:00
Dion Moult d0b2bf85cc WIP port search module with new features! See #1222.
* New IFC class search
 * Slicker UI
 * Colour by class and reset colours now available in search panel
2021-01-23 14:17:50 +11:00
Dion Moult 86e3d1e548 WIP refactor root module properties. See #1222. 2021-01-23 12:54:27 +11:00
Dion Moult d1e2ac4c5a WIP port BCF to new refactored approach. See #1222. 2021-01-23 12:20:06 +11:00
Dion Moult 8c36217e26 Line ending git fix? 2021-01-23 12:02:41 +11:00
Dion Moult b7f574fa30 WIP implement document assign/unassign. See #1222. 2021-01-23 12:02:27 +11:00
Thomas Krijnen 395d63279f Log messages 2021-01-22 22:01:08 +01:00
root 55d24ba1ee No boost cmake flag 2021-01-22 20:47:05 +01:00
Thomas Krijnen 923771f448 #1269 implement SurfaceCurveSweptAreaSolid with non-planar ref 2021-01-22 16:32:51 +01:00
Dion Moult 2f2611e0cb WIP implement most of the document module apart from object references. See #1222. 2021-01-22 21:04:30 +11:00
ahladik 94737da1f5 Workaround for Visual C++ / OCCT conflict with x86 release
Workaround for Visual C++ hanging when compiling 32-bit release OCCT up to version 7.4.0.
See https://tracker.dev.opencascade.org/view.php?id=31628
2021-01-22 10:56:50 +01:00
ahladik 6a6025302e Update vs-cfg.cmd
Prefixed the build folders with a '_' to better distinguish them from source.
Removed a superfluous 'pause' command.
2021-01-22 10:56:50 +01:00
ahladik b92fac5c5e Update vs-cfg.cmd 2021-01-22 10:56:50 +01:00
ahladik 824f09a1e7 More changes to Visual Studio build process
Prevented incorrect linking to default libraries in Boost
Boost version updated to 1.74
2021-01-22 10:56:50 +01:00
ahladik 6a8d8139ed More changes to Windows build scripts
Limited compatibility to Visual Studio 2013 or newer
Fixed the missing 'd' suffix linking ....\opencollada\xmld.lib
Fixed failure when calling the scripts without specifying a generator
2021-01-22 10:56:50 +01:00
ahladik 36f51e19b5 Changes to the build scripts to support Visual Studio 2019
Changes to the build scripts to support Visual Studio 2019, to optionally use a toolset different from the default and to build correctly when more than a single Visual Studio version is installed.
2021-01-22 10:56:50 +01:00
Dion Moult 3bbdc3f277 WIP fix IFC2X3 errors in classification refactor 2021-01-22 16:55:38 +11:00
Dion Moult c67a99fb5d New IfcOpenShell date utility module, because we shouldn't need to think too hard about dates 2021-01-22 16:21:17 +11:00
Dion Moult 7522f8fb7a WIP fix issues in IFCCSV refactor. See #1222. 2021-01-22 16:15:39 +11:00
Dion Moult 84959d1cf8 You can now export container data from IFCCSV 2021-01-22 15:52:48 +11:00
Dion Moult 404a6c244c WIP deprecate merging/import aggregates setting as they are much more usable now. See #1222. 2021-01-22 10:20:38 +11:00
Dion Moult 83c22ebce3 Merge branch 'iospectar-feature/extract-openings' into v0.6.0 2021-01-22 08:27:02 +11:00
Dion Moult 28717beff8 Merge branch 'feature/extract-openings' of https://github.com/iospectar/IfcOpenShell into iospectar-feature/extract-openings
# Conflicts:
#	src/ifcpatch/recipes/ExtractElements.py
2021-01-22 08:26:18 +11:00
Bernd Hahnebach 02fa8c8413 [read carefully before decide merge] !!! normalize line endings of src files (#1268)
* all source: prepare to normalize line ending

* all src: normalize line endings
2021-01-22 08:22:34 +11:00
Manuel 3202174903 Attempt for compatibility with PythonOCC 7.4.1
Used import statement from occ_utils.py 
added an If-Statement to the GetObject()-call.

Calling SetSelectionPriority directly on ais, as proposed by aothms (https://github.com/IfcOpenShell/IfcOpenShell/issues/1098) did not work.
Could load some ifc-models but needs further testing.
2021-01-21 13:34:33 +01:00
Thomas Krijnen 37fe54d247 erase enitty mapping upon deletion 2021-01-21 13:24:18 +01:00
Dion Moult 73439e2114 WIP port classification module with new features. See #1222.
* Adaptive UI based on IFC version
 * You can now load new classification libraries on the fly
 * You can mix classification libraries with project references
2021-01-21 21:58:27 +11:00
Dion Moult 460cb85e4b Minor fixes. 2021-01-21 21:55:08 +11:00
Dion Moult b938e4b3c3 Add new get volume by material script 2021-01-21 10:54:48 +11:00
ihabelaghoury 37f35a7b2e Small Refactor to Bimtester + Diff Module (#1271)
* Refactoring of BIMTester Module

* Modification to Bimtester refactor + Diff refactor

Co-authored-by: Ihab El Aghoury <ihab_elaghoury@yahoo.ca>
Co-authored-by: Dion Moult <dion@thinkmoult.com>
2021-01-21 08:56:00 +11:00
Jesse Vander Does dc41ad5ab1 Adding openings from extracted elements 2021-01-20 09:51:46 -06:00
Dion Moult 8411333f66 WIP implement project UI to show basic project metadata. See #1222. 2021-01-20 16:53:34 +11:00
Dion Moult 95ce82a79e WIP implement deep removal of geometry. See #1222. See #1228. 2021-01-20 16:03:35 +11:00
Dion Moult 1d8a568a0b WIP finish refactoring owner module props. See #1222. 2021-01-20 10:44:43 +11:00
Dion Moult 70a45be904 WIP purge old aggregate system. See #1222. 2021-01-20 10:17:31 +11:00
Dion Moult e3444c60af WIP implement blender offsets for non-geolocated files. Also deprecate a whole bunch of geolocation vendor workarounds into a standard feature. See #1222. 2021-01-20 10:13:07 +11:00
Dion Moult 4cea2b7044 WIP code cleanup and deprecate legacy product import. Finally! See #1222. 2021-01-20 10:11:32 +11:00
Dion Moult 1142c5285c Geolocation util can now apply georeferencing to matrices 2021-01-20 10:07:48 +11:00
Dion Moult ea524767a0 WIP implement georeference module for correctly geolocated files. See #1222. 2021-01-19 11:18:26 +11:00
Bernd Hahnebach 45bba127ff bimtester: steps, remove comment 2021-01-17 22:40:11 +01:00
Bernd Hahnebach b9ba138d8d bimtester: normalize line endings 2021-01-17 22:30:04 +01:00
Bernd Hahnebach 2ea04f97f9 bimtester: add git attributes to be able to normalize line endings 2021-01-17 22:30:04 +01:00
Bernd Hahnebach d15c5c7e21 bimtester: recreate translation pot file and update lang po files 2021-01-17 22:30:04 +01:00
Bernd Hahnebach 9574b7e08f bimtester: start italian and dutch translation 2021-01-17 22:30:04 +01:00
Bernd Hahnebach 19ba6f86d7 bimtester: example feature files, add lang short cut to file name 2021-01-17 22:30:04 +01:00
Bernd Hahnebach c5c5bbd290 bimtester: example feature files, formating 2021-01-17 22:30:04 +01:00
Bernd Hahnebach bc9f7d214d bimtester: rename project of example ifcs 2021-01-17 22:30:04 +01:00
Dion Moult ee0b9004e3 WIP reimplement material psets with new features. See #1222.
* Data type sensitive UI
 * New standardised UI
 * Accomodate custom pset templates for materials
 * Explicitly disable IFC2X3 material psets which are horrible and I don't want to support it
2021-01-17 21:54:37 +11:00
Dion Moult 3fe5c88910 WIP implement material attributes panel. See #1222. 2021-01-17 21:07:01 +11:00
Dion Moult 25fb9be82e WIP port object material assignment with 3 new features. See message. See #1222.
* Full support for editing IfcMaterialList added
 * The reusability of material set relationships are now roundtripped
 * UI is sensitive to IFC schema version and adapts intelligently
2021-01-17 12:46:47 +11:00
Dion Moult fa4ba58cac Minor fix 2021-01-17 12:46:47 +11:00
Thomas Krijnen 5a11ac0545 Remove debugging statement 2021-01-16 15:12:19 +01:00
johltn 894bae66fd Clean branch 2021-01-16 14:52:07 +01:00
johltn ccb538c756 Clean branch 2021-01-16 14:50:09 +01:00
johltn c87baa1a50 Clean branch 2021-01-16 14:46:24 +01:00
johltn 30fa59960d Clean branch 2021-01-16 14:42:34 +01:00
johltn bdd86366bf Clean branch 2021-01-16 14:40:39 +01:00
johltn 142a38d402 Clean branch 2021-01-16 13:12:10 +01:00
johltn 257f4b2bf0 Clean branch 2021-01-16 13:03:28 +01:00
johltn 4e8a827822 Clean branch 2021-01-16 12:55:24 +01:00
Cyril Waechter b10ba45194 Allow to install ifcpatch separately (#1263)
Will allow to provide ifcpatch as a standard python package for
various usages (eg. standalone, blenderbim addon, FreeCAD)
* Copy folder instead of files [using svn](https://stackoverflow.com/a/18194523/4098083)
* Fetch recipes from ifcpatch module path
2021-01-16 10:42:45 +11:00
Bernd Hahnebach a04ce8a24d bimtester: steps, translate some project attribute tests 2021-01-15 21:03:45 +01:00
Bernd Hahnebach 1d0b13960f bimtester: steps, translate some attributes 2021-01-15 21:03:45 +01:00
Bernd Hahnebach 418574fe40 bimtester: steps, translate ifcdata provide ifc file by argument 2021-01-15 21:03:45 +01:00
Bernd Hahnebach 2e07fd1cde bimtester: steps, improve ifcdata schema test 2021-01-15 21:03:45 +01:00
Bernd Hahnebach 0123e2a69f Merge pull request #1262 from berndhahnebach/btprdev
bimtester
2021-01-15 10:59:45 +01:00
Bernd Hahnebach 843917a431 bimtester: run, merge run and run wich copy in temp 2021-01-15 10:58:14 +01:00
Bernd Hahnebach 2fce21fd88 bimtester: run, merge getting the behave arguments 2021-01-15 10:58:08 +01:00
Bernd Hahnebach c9e85c5d34 bimtester: run, merge run behave commands 2021-01-15 10:58:03 +01:00
Bernd Hahnebach 521a5a5981 bimtester: parse behave args to the gui too and other small gui
improvements
2021-01-15 10:57:55 +01:00
Bernd Hahnebach c6347e30be bimtester: rename project in example 1 2021-01-15 10:57:51 +01:00
Bernd Hahnebach 21d4203688 bimtester: parse ifcfile by behave user args 2021-01-15 10:57:47 +01:00
Bernd Hahnebach aefd4e3387 bimtester: run, move comments and add prints 2021-01-15 10:57:44 +01:00
Bernd Hahnebach 3df2c89b0a bimtester: report generator, add another parameter report file 2021-01-15 10:57:40 +01:00
Bernd Hahnebach ebd53250e7 bimtester: report, simplify generation code 2021-01-15 10:57:36 +01:00
johltn 6444376ecd Script to generate docs outside CMake 2021-01-15 07:30:09 +01:00
ihabelaghoury f5796eaed3 Refactoring of BIMTester Module (#1259)
Co-authored-by: Ihab El Aghoury <ihab_elaghoury@yahoo.ca>
2021-01-14 20:43:39 +11:00
Dion Moult a4b2285e8a Minor fix 2021-01-14 08:02:00 +11:00
ihabelaghoury 713e70ff63 Total refactoring for CSV into a blenderBim module + use of IfcStore (#1254)
* Add new feature to Load from IFCStore in Cobie

* Initial refactor for CSV to become a CSV Module

* Update __init__.py

* Address Dion's review

Co-authored-by: Ihab El Aghoury <ihab_elaghoury@yahoo.ca>
Co-authored-by: Dion Moult <dion@thinkmoult.com>
2021-01-14 07:53:48 +11:00
Thomas Krijnen 540f793940 Workaround: IfcLine as segment with IfcVector magnitude length in composite curve 2021-01-13 15:46:00 +01:00
Dion Moult 071c84ddf8 WIP implement qtos. See #1222. 2021-01-13 21:26:10 +11:00
Bernd Hahnebach f2b645b73f bimtester: get back dummy feautre file, deleted in 91773e8fc6 2021-01-13 08:38:51 +01:00
Bernd Hahnebach 7554714fff bimtester: sort command line args by abc 2021-01-13 08:29:33 +01:00
Bernd Hahnebach 2d04d988e7 bimtester: improve gui 2021-01-13 08:29:33 +01:00
Bernd Hahnebach 91773e8fc6 bimtester: improve and fix copy in temp and run 2021-01-13 08:29:33 +01:00
Bernd Hahnebach 6ee3c8fd98 bimtester: start script, improve arguments 2021-01-13 08:29:33 +01:00
Bernd Hahnebach a54b84b4c3 bimtester: run, better variable name 2021-01-13 08:29:33 +01:00
Bernd Hahnebach addf28c1e2 bimtester: run, improve method run copy in temp 2021-01-13 08:29:33 +01:00
Bernd Hahnebach aa82cb15d2 bimtester: run, rename method run copy in temp 2021-01-13 08:29:33 +01:00
Bernd Hahnebach 2e3c5c42bf bimtester: fix import 2021-01-13 08:29:33 +01:00
QwiglyDee a1be2ef868 #1234 section view decorations 2021-01-13 06:27:05 +07:00
Thomas Krijnen ab8aa95479 #1224 update inverse cache upon deletion 2021-01-12 21:49:17 +01:00
Dion Moult b78e710479 WIP implement add / remove fills. See #1222. 2021-01-12 16:39:01 +11:00
Dion Moult 9400eab0ff WIP implement void module with add / remove openings. See #1222. 2021-01-12 15:14:14 +11:00
QwiglyDee 1836136049 adding section annotations 2021-01-12 09:33:46 +07:00
QwiglyDee d1a2a12e94 close #1232 elevating grid in section views 2021-01-12 09:33:46 +07:00
QwiglyDee 6502b2c18d little drawing helper 2021-01-12 09:33:46 +07:00
ihabelaghoury 1779fe88ef Add new feature to Load from IFCStore in Cobie (#1253)
Co-authored-by: Ihab El Aghoury <ihab_elaghoury@yahoo.ca>
2021-01-12 11:26:59 +11:00
ihabelaghoury 497f793a6b Cobie Module Refactoring (#1252)
* Create Mylog.txt

* Remove Cobie references from ui and operator

* Update __init__.py

* Extra Updates

* Update operator.py

* Update ui.py

Co-authored-by: Ihab El Aghoury <ihab_elaghoury@yahoo.ca>
2021-01-12 10:02:37 +11:00
Bernd Hahnebach a85d7c66a5 bimtester: add simple example and translated feature files 2021-01-11 06:58:39 +01:00
Thomas Krijnen e1b68dafa4 #841 cpp implementation of get_info() 2021-01-10 12:36:47 +01:00
johltn df2f4b69e3 40 min waiting time 2021-01-10 09:02:27 +01:00
johltn e76d401d15 Use 4 threads 2021-01-09 19:05:32 +01:00
Thomas Krijnen 3182c75f14 Some changes after #1155 2021-01-09 15:08:30 +01:00
admin 68767c3656 #1097
fix:IFC file conversion obj file, some cases will be rotated 90 °
2021-01-09 14:51:01 +01:00
Thomas Krijnen 6976144d80 Fix syntax for py27 2021-01-09 14:25:26 +01:00
Thomas Krijnen 2a54fee41a Fix ifcopenshell.create_entity() by including schema 2021-01-09 11:59:34 +01:00
Thomas Krijnen 3d0c9378c1 Quickfix #1246 2021-01-09 11:49:30 +01:00
Dion Moult 8ef752f173 WIP port owner history setting to partial editing. See #1222. 2021-01-09 12:00:22 +11:00
Dion Moult 06e1ee7825 WIP implement organisation editing. Also new features see commit message. See #1222.
* Organisations are now imported.
 * Organisation identification attribute support is now added, which I missed before
2021-01-09 11:42:21 +11:00
Dion Moult 84de1f1b09 WIP port address and role editing to owner module. See #1222. 2021-01-08 20:53:51 +11:00
Bernd Hahnebach 2e85a80fc8 bimtester: geometric step translation improvement 2021-01-08 08:41:41 +01:00
Bernd Hahnebach 8eab1ec4a5 bimtester: code formating 2021-01-08 08:26:28 +01:00
Bernd Hahnebach 7871dea3ca bimtester: very small code improvements in reports 2021-01-08 08:26:28 +01:00
Bernd Hahnebach bf41ee013c bimtester: improve step translation 2021-01-08 08:26:28 +01:00
Bernd Hahnebach ef3f9489ea bimtester: improve some step method names 2021-01-08 08:26:28 +01:00
Dion Moult be2ea335f5 WIP partial port of IfcPerson to partial editing. New feature too! See message. See #1222.
* Previously, IfcPerson was not imported. Now it is! Funky.
2021-01-08 16:27:19 +11:00
Dion Moult 53de93e582 WIP move the IFC Debug code into its own module. See #1222. 2021-01-08 13:49:31 +11:00
Dion Moult 0dcdfcf46c WIP implement local placement tree. See #1222. 2021-01-08 13:29:59 +11:00
Dion Moult 2d061f63fb WIP port add aggregate and remove container. See #1222. 2021-01-08 11:41:54 +11:00
Dion Moult afbdedaee8 WIP minor fixes to aggregate and spatial collection handling. See #1222. 2021-01-07 21:02:46 +11:00
Dion Moult 30d9ad1fbc Fix #1194. Aggregates no longer use collection instances. 2021-01-07 20:21:41 +11:00
Dion Moult d673e845f6 WIP psets now use partial editing with new features! See full message. See #1222.
* Psets are now sensitive to data type
 * Psets now support null vs empty
 * Psets now respect shared STEP IDs
2021-01-07 19:09:55 +11:00
Dion Moult fcc2b9ee13 WIP migrate types to partial editing. See #1222. 2021-01-07 10:47:50 +11:00
Dion Moult 02ac150a51 WIP Implement style edit/add. See #1222. 2021-01-06 17:57:24 +11:00
Dion Moult d206dff9c0 WIP class dropdowns are now schema version specific and generated. See #1222. 2021-01-06 15:19:55 +11:00
Dion Moult cac635107e WIP spatial operator now updates the blender collection structure. See #1222. 2021-01-06 11:06:59 +11:00
Dion Moult 8eb9973045 WIP refactor mesh UI into geometry module and minor fixes. See #1222. 2021-01-06 10:28:22 +11:00
Dion Moult c4aecd6e61 Minor fix for #1235. 2021-01-06 08:45:34 +11:00
QwiglyDee cef3b9537a toggle decorations onload
fix #1237
2021-01-06 04:01:03 +07:00
QwiglyDee 02b01b2a44 refectored decorations.
fixed #1241 somehow
2021-01-06 03:52:40 +07:00
QwiglyDee db5418cbfe fixed #1233 grid cropping 2021-01-06 02:32:55 +07:00
Bernd Hahnebach 44d3ddbb7c bimtester: add log file and zoom smart view for failed elements tests 2021-01-05 18:06:09 +01:00
Bernd Hahnebach b2e5c904c3 bimtester: copy all files of source code features path to tmp run 2021-01-05 18:06:09 +01:00
QwiglyDee 19d07892f4 fix #1240 undoing add_grid 2021-01-05 21:33:38 +07:00
Dion Moult 113efa1206 WIP you can now start a fresh project with partial editing support. See #1222. 2021-01-05 21:15:52 +11:00
Dion Moult f76d792a25 WIP port unit assignment to partial editing. See #1222. 2021-01-05 21:13:44 +11:00
Dion Moult d74b344a95 WIP create aggregation module to manipulate aggregations. See #1222. 2021-01-05 16:29:14 +11:00
Dion Moult 30b3090386 WIP migrate attribute management to partial editing with 4 new features! See #1222.
New features include:

 - New clarity between null and empty string attributes
 - Attribute editing now shows appropriate UI widgets depending on data type
 - Attribute editing for enumerations now show a dropdown
 - Attribute editing is now schema sensitive
2021-01-05 13:16:31 +11:00
Dion Moult d4a219e54f WIP assigning a class also assigns the spatial container if possible. See #1222. 2021-01-04 16:23:36 +11:00
Dion Moult 23a66b3a72 WIP allow partial editing of spatial container. See #1222. 2021-01-04 15:57:25 +11:00
Dion Moult d9dbda6b5a Minor fix 2021-01-04 15:57:25 +11:00
QwiglyDee cbcd04c81d drawing grid clipping 2021-01-04 11:31:30 +07:00
Dion Moult 1fe2bd8332 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2021-01-04 13:07:36 +11:00
Dion Moult 6387c03dbc WIP port reassign and unassign class to partial editing. See #1222. 2021-01-04 13:07:29 +11:00
Cyril Waechter 516869ba5d Use lru_cache for pset module (#1229)
New features
===========
* `get_by_name` : get pset template by name
* `is_templated` : allow to check if a pset template correspond to given name

Enhancement
============
* Use of lru_cache simplify code and enhance performance largely
(10+ times more requests in 4 less time)
kudo to aothms for the idea. See https://github.com/IfcOpenShell/IfcOpenShell/pull/1221#issuecomment-752902996.
* Take advantages of new caching system and new features in blenderbim
2021-01-04 12:13:04 +11:00
Dion Moult 0c0ffce908 WIP assigning a class now ported over to partial editing and creates an IFC element. See #1222. 2021-01-04 11:08:15 +11:00
johltn f120f0c77c Added travis_wait to CMake command 2021-01-03 14:42:49 +01:00
johltn 3961ecd322 Added travis_wait to CMake command 2021-01-03 14:01:26 +01:00
johltn 23c0e279be Added travis_wait to CMake command 2021-01-03 13:56:48 +01:00
johltn 6e4bb95e82 Update 2021-01-03 13:10:57 +01:00
Dion Moult af5350bb9f WIP refactor representation editing into geometry module. See #1222. Some new functionality as a result:
- Representations can now be added to any context, even invalid ones, non-subcontext, or missing target views
 - Switching representations now change all linked data objects
2021-01-03 19:45:40 +11:00
Dion Moult c5ec54ca7f WIP refactor context UI into its own module. Remove dependency to Blender properties. See #1222. 2021-01-03 12:08:00 +11:00
johltn efea9d429e Verbose 2021-01-02 15:48:34 +01:00
Thomas Krijnen b91dfb401d Rewrite svg array_to_string() 2021-01-02 13:08:01 +01:00
Thomas Krijnen 979f37d7c6 --svg-poly option and correct HLR view direction 2021-01-02 12:34:10 +01:00
Dion Moult 23abc604f9 WIP implement partial editing for adding / removing subcontexts. See #1222. 2021-01-02 20:28:52 +11:00
Dion Moult a997b2f999 WIP you can now partially edit the object placement of an object. See #1222. 2021-01-02 19:33:32 +11:00
Dion Moult 0ecf66f7fa New IfcOpenShell placement utility module 2021-01-02 19:32:27 +11:00
Dion Moult 2c6686846a WIP allow partial mesh geometry editing to preserve style assignments. See #1222. 2021-01-02 17:45:36 +11:00
Dion Moult 008014a89b WIP refactor ability to partially write a new shape representation. See #1222. 2021-01-02 15:39:24 +11:00
Dion Moult b016d39eca WIP refactoring representations to be incrementally edited. See #1222.
# Conflicts:
#	src/ifcblenderexport/blenderbim/bim/operator.py
2021-01-01 12:15:18 +11:00
QwiglyDee c773b5741b decorations anti-aliasing 2020-12-31 19:56:55 +07:00
Cyril Waechter 9060b6ee40 Rework python pset module (#1221)
New features
============
* Handle all syntax for ApplicableEntity as defined in IFC documentation. (drawback it increase request time by ~2/3)
* Allow to get applicable psets directly from template definition without caching.
This allow more general purpose usages. (drawback it increase request time by ~2.4)

To notice / discuss
===================
* `ifcwrap/CmakeLists` was installing only `.py` and `.bnf` files from `ifcopenshell-python`.
Why ? It now copy all files. Is it an issue ?
* property template file is now stored in ifcopenshell python module to allow usage
from every softwares. It was before only available for blenderbim addon.
* psets and qtos are now optionnally cached at object instead of module level.
This allow to work with multiple schema in the same python interpreter.
(eg. might help conversion between schemas)
* in blenderbim addon psetqto are now stored in `schema.psetqto`.
2020-12-31 21:39:33 +11:00
Thomas Krijnen c3d4ce8f51 Store drawing location in SVG 2020-12-31 11:31:05 +01:00
Thomas Krijnen a5adb01dff IfcConvert --svg-xmlns option 2020-12-30 14:44:43 +01:00
Thomas Krijnen de5ce28a78 --auto-section and --auto-elevation flags 2020-12-30 14:25:08 +01:00
Dion Moult 9def261316 Importing now stores a link to the original IFC representation contexts and subcontext IDs 2020-12-30 21:09:19 +11:00
Dion Moult c844076efb New experimental option to export file from memory in preparation for incremental editing 2020-12-30 13:50:10 +11:00
Dion Moult ee222628f3 Add Vim swp files to gitignore 2020-12-30 12:20:02 +11:00
Dion Moult cd6c258687 IFC Clash in the BlenderBIM Add-on now generates snapshots of clashes in BCF 2020-12-30 12:18:41 +11:00
QwiglyDee 0799a78e9a aligned grid labels horizontally 2020-12-30 02:44:46 +07:00
QwiglyDee a073015a9a Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-12-30 01:07:13 +07:00
QwiglyDee 01d59a1bc2 decoration code cleanedup/refactored 2020-12-30 01:05:48 +07:00
QwiglyDee 453dbd65ac grid decorations. 2020-12-29 21:43:35 +07:00
aothms 7ae685dbff Nix build: py39, boost1.71, no py34 on macos, boost url, no dae validator build 2020-12-29 07:59:52 -05:00
QwiglyDee 0d457ba0ce breakline decoration.
close #1214
2020-12-29 19:10:29 +07:00
Dion Moult ef8b3d60b7 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-12-29 22:49:28 +11:00
Dion Moult c502d39aaf Add support for BCFXML export of IFC Clash results 2020-12-29 22:49:22 +11:00
QwiglyDee 397a09846e Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-12-29 18:18:45 +07:00
Dion Moult ceb7b0e13f Refactor BCF features into its own module 2020-12-29 14:15:15 +11:00
Dion Moult f49174cab4 Refactor main init to call module inits instead 2020-12-29 13:49:53 +11:00
Dion Moult 17e805e144 Minor fix - see #1062 2020-12-29 10:03:57 +11:00
Long 5c92bd7348 implement Open Drawing Camera button (#1220) 2020-12-29 10:00:49 +11:00
QwiglyDee 7c45181a6e fixed decoration of broken geom again 2020-12-29 02:15:28 +07:00
QwiglyDee 82468370a7 fixed Level decoration color
close #1213
2020-12-29 02:09:48 +07:00
QwiglyDee 7f49ebea55 fixed addin grid
close #1217, close #1215
2020-12-29 02:04:08 +07:00
Dion Moult c0381588f3 Implement add BCF related topic 2020-12-28 20:13:41 +11:00
Dion Moult 37e56c4011 Implement remove BCF related topic 2020-12-28 19:56:57 +11:00
Dion Moult ea83238e7a Implement support for adding BCF document references 2020-12-28 19:46:47 +11:00
Dion Moult fa6df3fa30 Implement support for deleting document references 2020-12-28 18:44:33 +11:00
johltn 424069893e Include ifcparse 2020-12-28 06:38:06 +01:00
johltn abb34d33e4 Update 2020-12-28 06:07:00 +01:00
Dion Moult 36a0119f40 Implement add BIM Snippet 2020-12-28 16:04:09 +11:00
Dion Moult 9fc5d97488 Merge pull request #1219 from htlcnn/v0.6.0
ifccsv delimiter
2020-12-28 15:03:55 +11:00
htlcnn f277733ff5 ifccsv delimiter 2020-12-28 10:18:55 +07:00
Dion Moult 510d756cc4 Implement delete BCF topic BIM snippet 2020-12-28 13:14:33 +11:00
Dion Moult bca9c82c3d Implement ability to edit labels 2020-12-28 12:50:22 +11:00
Dion Moult 3deba2e71e Implement support for adding BCF labels to topics 2020-12-28 12:46:52 +11:00
Dion Moult d5566785be Implement BCF delete label 2020-12-28 11:40:40 +11:00
Dion Moult 6cfa9f6e9b Implement ability to edit individual BCF reference links 2020-12-28 11:20:44 +11:00
Dion Moult 6a00f2f0d2 Implement adding BCF reference links 2020-12-27 17:07:02 +11:00
Dion Moult b9583c562d Implement support for deleting reference links 2020-12-27 16:53:40 +11:00
Dion Moult e51b7d3c85 Implement ability to add BCF header file 2020-12-27 16:20:35 +11:00
Maxim Vasilyev 5234c8086f fixed typo 2020-12-27 00:21:59 +07:00
QwiglyDee 7e306251c1 Misc annotation and decoration.
close #1209
2020-12-26 23:41:10 +07:00
QwiglyDee 8d05ceaea9 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-12-26 23:26:00 +07:00
QwiglyDee abaae7f06d copying grid.
close #1210
2020-12-26 23:25:39 +07:00
QwiglyDee 3c2c591d6d breakline annotation
close #1208
2020-12-26 22:01:14 +07:00
Thomas Krijnen 315b32dd38 Nix build: assert cmake in path 2020-12-26 13:49:57 +01:00
Dion Moult 6699f2dccf Merge pull request #1212 from htlcnn/v0.6.0
fix IfcGetAttribute malfunction #1089
2020-12-26 15:13:09 +11:00
htlcnn f235f5765b fix IfcGetAttribute malfunction 2020-12-26 11:08:07 +07:00
aothms 877bf3207a Nix build: no longer build cmake, some fixes for 32bit crosscompiling 2020-12-24 20:46:42 +00:00
QwiglyDee 119a729319 fix #1165 imperial formatting 2020-12-24 21:55:27 +07:00
QwiglyDee 1b9b005820 decorations colour.
close #1197
2020-12-24 21:04:44 +07:00
QwiglyDee 1bea18d3cf fixed #1206, #1207 decorating incomplete and zero segments 2020-12-24 19:50:36 +07:00
Bernd Hahnebach 1b6857b8ba bimtester: also use gettext for html report translation 2020-12-23 11:41:35 +01:00
Bernd Hahnebach 666641bb18 bimtester: reports, code formating 2020-12-23 11:41:35 +01:00
Dion Moult 67f7e68fa7 Implement support for deleting BCF header files 2020-12-23 16:22:29 +11:00
Dion Moult 7b2fa3e877 Add support for adding BCF viewpoints 2020-12-23 15:53:38 +11:00
Dion Moult 4d2be3e3c5 Since current implementations will allow BCF FoV outside the 45-60 range, let's allow it 2020-12-23 15:53:18 +11:00
Dion Moult 5a1f2ec4fe Implement support for editing BCF comments 2020-12-23 13:58:28 +11:00
Bernd Hahnebach b22055a588 bimtester: once again move report data into resources dir 2020-12-22 20:37:41 +01:00
Bernd Hahnebach 27051cce8a bimtester: move report data into new directory 2020-12-22 20:29:56 +01:00
Bernd Hahnebach 4df8418e72 bimtester: steps, add more attributes tests 2020-12-22 20:14:05 +01:00
QwiglyDee 6dfeaf5509 bpy-based formatting units for decoration
close #1164
2020-12-22 22:46:49 +07:00
QwiglyDee 30f8350156 decorators for Levels 2020-12-22 22:28:55 +07:00
QwiglyDee 7a7caffaae fix #1198 stair decorator arrow shape 2020-12-22 19:35:29 +07:00
QwiglyDee a5530acfd7 fixed Hidden decotator in edit mode 2020-12-22 19:27:44 +07:00
QwiglyDee 8baf9b056d decorators cleanup 2020-12-22 18:47:50 +07:00
Dion Moult 6f84bc6ce5 Implement BCF add comment 2020-12-22 18:41:51 +11:00
Dion Moult 6a5d255c2f Implement delete BCF comment 2020-12-22 18:23:43 +11:00
Dion Moult ee42703f9f Implement delete BCF viewpoint 2020-12-22 16:22:29 +11:00
Bernd Hahnebach 2226d5a565 bimtester: steps, remove a newline added by accident 2020-12-21 17:14:12 +01:00
Bernd Hahnebach 7d138b8f72 bimtester: steps, add missing import 2020-12-21 17:09:46 +01:00
Bernd Hahnebach edd6e74813 bimtester: steps, add element class attributes test 2020-12-21 17:05:08 +01:00
Bernd Hahnebach 2a6efaaaa4 bimtester: step, prepare attributes eleclasses for translation 2020-12-21 17:05:08 +01:00
Bernd Hahnebach dafdd06b2e bimtester: steps, split steps testmodule 2020-12-21 16:37:13 +01:00
Bernd Hahnebach 1a48472b19 bimtester: steps, sort them according expression matcher 2020-12-21 16:08:21 +01:00
Bernd Hahnebach 8e78ed332f bimtester: steps, move project test into project test module 2020-12-21 16:08:21 +01:00
Bernd Hahnebach de5dc40e63 bimtester: steps, add new test module for spatial structure 2020-12-21 16:08:21 +01:00
Bernd Hahnebach 60dd74c64d bimtester: steps, better name for element class guid tests 2020-12-21 16:08:21 +01:00
QwiglyDee ff0a7891be decorators code cleanup 2020-12-21 20:22:23 +07:00
QwiglyDee a14c0f70a6 decorator for hidden close #1178 2020-12-21 20:22:23 +07:00
QwiglyDee babbd51e70 decorations for Dim, Eq, Leader, Stair
close #1177, #1176, #1158, #1150
2020-12-21 20:22:23 +07:00
QwiglyDee ec02c8600b refactored shaders 2020-12-21 20:22:23 +07:00
QwiglyDee 0c06639635 decorator classes for Dim/Eq/Leader/Stair/Hidden 2020-12-21 20:22:23 +07:00
QwiglyDee 97913e8592 fixed #1157 again with proper perspective correction 2020-12-21 20:22:23 +07:00
Bernd Hahnebach 26d537cb4f gitignore: add gettext binary translation files, used in bimtester 2020-12-21 12:16:55 +01:00
Bernd Hahnebach 3b856f446e bimtester: remove binary mo files from repository 2020-12-21 12:16:55 +01:00
Bernd Hahnebach b8fe04b7a9 bimtester: fix error in step code 2020-12-21 11:28:51 +01:00
Bernd Hahnebach 81326ba48f bimtester: improve and translate geometric representation class type test 2020-12-21 11:24:42 +01:00
Bernd Hahnebach 21a7599d45 bimtester: small code improvements 2020-12-21 11:24:42 +01:00
Bernd Hahnebach 1074c2431c bimtester: add dummy feature file to be able to run a command to get all implemented steps 2020-12-21 11:24:42 +01:00
johltn b77aa11776 Update 2020-12-21 10:15:39 +01:00
johltn b6cf97a291 Change RST file title 2020-12-21 09:32:52 +01:00
Dion Moult eb0f2de197 New snap spaces together utility for cleaning up spaces for energy modeling 2020-12-21 18:26:39 +11:00
Dion Moult 1a48343bcb Optimise import and editing for files with lots of aggregations 2020-12-21 10:44:14 +11:00
Dion Moult b0bd027f84 Optimise import to only consider surface styles 2020-12-21 10:43:21 +11:00
Thomas Krijnen 8bf530d0d7 Missing file that accompanies 9bcd932bed 2020-12-20 21:53:51 +01:00
Thomas Krijnen a3bc159359 #1173 mutex in get_default_style() 2020-12-20 14:38:54 +01:00
Thomas Krijnen 7d756138f2 Add generator expresss_parser.py 2020-12-20 11:10:21 +01:00
Dion Moult c16b63e5ae New import code profiler in the IFC debug panel 2020-12-20 13:48:37 +11:00
Dion Moult 3eee5aba78 Optimise presentation layer assignment which was ridiculously slow and badly implemented 2020-12-20 11:03:19 +11:00
Dion Moult 05d835410d Reimplement basic BCF metadata editing and further improve BCF UI 2020-12-19 21:48:23 +11:00
Dion Moult 03d8537a2d Revert borked submodules. See #1186. 2020-12-19 14:29:43 +11:00
Dion Moult 509ee78b67 Merge pull request #1184 from IFCRail/v0.6.0-ifcrail-mod
Set of improvements for BIMTester
2020-12-19 14:24:52 +11:00
Roch Bertucat 8cc546a9a2 Add path option for providing a schema in a step 2020-12-18 17:14:55 +01:00
Roch Bertucat 0ab82295f9 Fix a small issue in report path 2020-12-18 16:51:01 +01:00
Roch Bertucat 0f66f88420 Revert template change 2020-12-18 16:25:00 +01:00
Roch Bertucat 5572faf8b4 Fix an issue with localedir 2020-12-18 16:12:11 +01:00
Roch Bertucat 322860cc51 Merge remote-tracking branch 'origin/v0.6.0-ifcrail-contrib' into
v0.6.0-ifcrail-mod

Conflicts:
	src/ifcbimtester/bimtester/features/steps/ifcdata.py
	src/ifcbimtester/bimtester/features/template.html
	src/ifcbimtester/bimtester/reports.py
	src/ifcbimtester/bimtester/run.py
2020-12-18 15:44:46 +01:00
rbertucat 1bff04d2c0 Merge pull request #3 from IfcOpenShell/v0.6.0
Merge changes from main repo
2020-12-18 12:54:34 +01:00
Dion Moult de4f18e2af New UI to show BCF comments in the BCF panel as a subpanel 2020-12-18 22:14:31 +11:00
Roch Bertucat 03dd4c39b7 Add skipped step to the HTML template 2020-12-18 11:24:33 +01:00
Roch Bertucat fc7d05c691 Improve referencing files using the path if available 2020-12-18 11:24:01 +01:00
Roch Bertucat 854a0fe863 Add a way to specify a path to the arguments 2020-12-18 11:22:51 +01:00
Roch Bertucat 9ffc2874da Add a way to stop if fail step and improve report accordingly 2020-12-18 11:22:14 +01:00
Roch Bertucat e01b677845 Add build/dist folders to gitignore 2020-12-18 11:20:42 +01:00
Bernd Hahnebach 85a78a6e48 bimtester: se gettext for message translation 2020-12-18 17:25:05 +11:00
Bernd Hahnebach 3ae20637d7 bimtester: code formating 2020-12-18 17:25:05 +11:00
Dion Moult 7dd40149aa Migrate from bcfplugin to new bcf library in the BlenderBIM Add-on 2020-12-18 16:28:17 +11:00
Dion Moult d08da0a61d Document basic usage of bcf library 2020-12-17 22:47:15 +11:00
Dion Moult 1b09bb37e8 The BCF-XML library can now handle most data writing functions 2020-12-16 23:47:50 +11:00
Bernd Hahnebach 90f225e93b bimtester: improve submodule handling for step translation 2020-12-16 23:10:40 +11:00
QwiglyDee f00040c7d9 decorators for equal dimentions #1158 2020-12-16 17:29:15 +07:00
QwiglyDee b8286e8fb5 arrow size fix #1157 2020-12-16 17:06:36 +07:00
QwiglyDee dbafcc2fa1 fixed #1159 zero projection 2020-12-16 16:54:49 +07:00
Håkon Åmdal a869e88de0 fix: use correct initializer function when compiling with USE_MMAP 2020-12-15 13:25:48 +01:00
Dion Moult 5ad6abea1a Add simple BCF library to supersede bcfplugin, with bcfxml read capability 2020-12-15 14:49:29 +11:00
Bernd Hahnebach d00da09cdc start translation into German and French with one step as well as the report 2020-12-15 10:09:46 +11:00
Dion Moult 17a8b33387 You can new create new BCF projects from scratch 2020-12-14 13:51:01 +11:00
Dion Moult 4f2bf3a36f You can now add new BCF topics to a BCF project 2020-12-14 13:29:52 +11:00
Carlos Dias e208dd0381 Update selector.py
Changes fix problem with boolean values
2020-12-14 12:59:20 +11:00
Dion Moult a62a32d414 Support for setting the BCF author. You can also now edit basic BCF topic metadata. 2020-12-13 21:56:04 +11:00
Dion Moult 6a06c292a1 Fix #1148. Fix crash when creating drawings on Windows with Blender >= 2.91 2020-12-13 16:54:11 +11:00
Dion Moult 9dcf44fbea You can now view and edit the BCF project name 2020-12-13 16:35:51 +11:00
Dion Moult e39a997f5f Bump to latest bcfplugin, new operator to save BCF projects 2020-12-13 13:45:21 +11:00
Vincent Cadoret f3269b732f More sensible names for the Smart Clash Groups 2020-12-12 13:04:28 +11:00
Vincent Cadoret 14c726008d Split out clashes that were not grouped so they so up individually. 2020-12-12 13:04:28 +11:00
rbertucat c0b4115202 Merge pull request #1 from engisis-com/v0.6.0
Apply changes done under Engisis to the IFCRail fork
2020-12-11 15:48:56 +01:00
Dion Moult d5e6721ac4 Minor fix to support multiple dimension objects for decorations. See #1150. 2020-12-11 11:13:48 +11:00
QwiglyDee 48de2f77ab fix arrows heads 2020-12-11 10:11:47 +11:00
QwiglyDee f37283f61c drawing arrows 2020-12-11 10:11:47 +11:00
QwiglyDee cc5f34a705 text drawing 2020-12-11 10:11:47 +11:00
QwiglyDee 33bf7054bf ui and decorator handler 2020-12-11 10:11:47 +11:00
Thomas Krijnen 14193fb486 #1126 more elaborate polygonal curve segment check 2020-12-10 10:48:14 +01:00
Roch Bertucat 34174dd3f3 Add a set of steps to test aggregations in IFC files 2020-12-10 10:42:49 +01:00
Roch Bertucat 479b937f81 Add a way to load a custom IFC Schema and add util methods 2020-12-10 10:37:17 +01:00
Roch Bertucat cada9c9e3b Specify encoding for HTML report for special characters 2020-12-10 10:35:47 +01:00
Roch Bertucat 860d795ba1 Add a way to generate a report after the tests in the same command 2020-12-10 10:35:13 +01:00
Dion Moult 2ac0b75dbc New Link IFC operator to easily append IFCs from another Blend file into a master file 2020-12-10 13:52:29 +11:00
Dion Moult fb7998980d Fix bug where aggregates were accidentally hidden when generating drawings 2020-12-10 13:51:51 +11:00
Dion Moult b9af4906aa Fix bug where selecting the IFC file for drawing generation didn't work 2020-12-10 13:51:27 +11:00
Dion Moult ce6350a52f New clean wireframes operator to easily apply edge split modifier to nicer drawings 2020-12-10 13:50:43 +11:00
Dion Moult b65c1e94ad Purge old experimental painter algorithm code for vector background elements
In preparation to migrate this to C++
2020-12-09 10:38:13 +11:00
Dion Moult 0387783e9d Minor fix 2020-12-07 17:28:16 +11:00
Dion Moult b72b2aa7d7 Package new BIMTester for the BlenderBIM Add-on 2020-12-07 16:42:01 +11:00
Dion Moult c1bbb1e721 You can now bake parametric geometry to meshes 2020-12-07 15:33:51 +11:00
Dion Moult 0d28e741fc Fix bug where spatial elements didn't get styles exported correctly 2020-12-06 19:10:03 +11:00
Dion Moult 0d03b4e008 Allow graceful migration of IFC entities when exporting so the user doesn't need to fix every invalid schema attribute themselves3RlG$Bayj3kPlwh4EEvXJP 2020-12-06 11:38:02 +11:00
fbpyr 981f0c23c7 apply matrix to object in BlenderClasher
Since scale is not supported in fcl upstream as found in https://github.com/IfcOpenShell/IfcOpenShell/issues/1129
2020-12-04 19:05:53 +11:00
Dion Moult 884e8a5663 Fix #1071. New IFC file version 2X3<->4 upgrader and downgrader IfcPatch recipe 2020-12-04 11:52:18 +11:00
Dion Moult 06685f9768 Fix example script for printing out properties. See #1145. 2020-12-04 10:59:59 +11:00
Dion Moult 9a20de914b Add new workaround for the DESITE BIM application 2020-12-04 09:23:44 +11:00
Bernd Hahnebach 26f6e875ed bimtester: add more ifc file tests 2020-12-04 09:20:41 +11:00
Bernd Hahnebach cda131d6c1 bimtester: move ifc steps in separte module 2020-12-04 09:20:41 +11:00
Dion Moult e1fa6fb306 You can now apply drawing styles to elements with material set usages 2020-12-03 22:17:46 +11:00
Dion Moult 679c2bef02 Fix bug where aggregates cause drawing generation to fail 2020-12-03 21:52:17 +11:00
Dion Moult 8bb157ce0a Auto-add the currently loaded IFC when creating a drawing for the first time 2020-12-03 21:51:14 +11:00
Dion Moult bdaf8cd0f3 Fix import bug where duplicate material names with accents cause import to fail 2020-12-03 21:44:20 +11:00
Dion Moult 4e62c276ee Fix #1111 - issue where sometimes class and product dropdown gets out of sync. Also new utility function to query is_a() in the schema. 2020-12-02 09:51:00 +11:00
Dion Moult c70b41f21a Fix #1112. You can now tag material attributes. 2020-12-02 09:03:18 +11:00
Dion Moult aaf9b10a9e Fix #1128 with improved IFCCSV description 2020-12-02 08:50:15 +11:00
Thomas Krijnen 9281c8fbce #1126 Update serialization for trimmed curve 2020-12-01 14:03:07 +01:00
Dion Moult 5f76062575 Fix issue where invalidly declared representation contexts can confuse drawing creation 2020-12-01 22:26:02 +11:00
Dion Moult efd2663f15 Support layer set material names classes in drawings 2020-12-01 22:25:30 +11:00
Dion Moult 823b10e323 Dumb grids are auto placed in an IfcSite if it can be detected for convenience 2020-12-01 21:37:47 +11:00
Dion Moult 431de8d5a1 Package ExtractElements IfcPatch recipe with the BlenderBIM Add-on 2020-12-01 21:29:09 +11:00
Dion Moult dce730d9c2 Ship optimise IfcPatch recipe with BlenderBIM 2020-12-01 21:24:30 +11:00
Vincent Cadoret 50d7efa99b move import statements to make dependencies optional
so regular clashing doesn't break if the dependencies are not present.
2020-12-01 14:06:57 +11:00
Vincent Cadoret 957c719224 Skip clash_set if it has 0 clashes 2020-12-01 14:06:57 +11:00
Vincent Cadoret b407b815e2 Allow selection of max grouping distance in UI 2020-12-01 14:06:57 +11:00
Vincent Cadoret ac12a6785c Added a button to Load the smart clash groups for the active clash set 2020-12-01 14:06:57 +11:00
Vincent Cadoret 8aae7c95e6 Rename IsolateSmartGroup operator to SelectSmartGroup 2020-12-01 14:06:57 +11:00
Vincent Cadoret bbde4e7522 Added a ui to select input and output files to clash smart grouper. 2020-12-01 14:06:57 +11:00
Vincent Cadoret 803a4b6c12 cleanup unnecessary imports and prints 2020-12-01 14:06:57 +11:00
Vincent Cadoret 5a06bd5a57 Minimum viable protoype for Smart Clash Grouping completed 2020-12-01 14:06:57 +11:00
Vincent Cadoret 51dca4329c Add a more useful error message when no clashes are loaded for the given clashset 2020-12-01 14:06:57 +11:00
Vincent Cadoret 1921b4cecf Added clash manager basic interface to load smart grouped clashes 2020-12-01 14:06:57 +11:00
Dion Moult f7e05e011a Merge branch 'fix-roundtrip' into v0.6.0 2020-12-01 10:47:49 +11:00
Dion Moult 2596f90015 Fix #952. Implement roundtripping of all representation contexts. 2020-12-01 10:46:28 +11:00
Bernd Hahnebach 24c542e33a bimtester: small code improvements in gui 2020-11-30 17:54:10 +11:00
Dion Moult 7b7f756506 Add support of exporting material sets for construction types 2020-11-30 11:28:32 +11:00
Dion Moult 9ca124bf2f New UI to show inherited materials from related types 2020-11-30 11:27:51 +11:00
Dion Moult c9666015bb Fix error when creating a drawing of a file with material set usages 2020-11-30 09:51:42 +11:00
Thomas Krijnen 8815b74ff8 thanks @tpaviot 2020-11-29 16:16:11 +01:00
Dion Moult 98f45817a6 Improved UI for psets and qtos with collapsible panels and improved readibility 2020-11-29 23:24:56 +11:00
Dion Moult e3f61510ad The object psets panel now show inherited psets too 2020-11-29 22:26:51 +11:00
Bernd Hahnebach 864dcffef8 bimtester: startscript, add argument to start gui with some start directories 2020-11-28 08:27:24 +11:00
Bernd Hahnebach fae899823b bimtester: rename startscript, if startscript and package have the same name it is difficault to import the startscrip as the package has priority 2020-11-28 08:27:24 +11:00
Bernd Hahnebach 26d35a7644 bimtester: improve the signatures of the methods to run behave in temporary directory 2020-11-28 08:27:24 +11:00
Dion Moult 4a5fe83dab Fix minor regression where the section cutting plane doesn't work if you haven't selected an object 2020-11-27 22:07:32 +11:00
Dion Moult 78666caa47 Minor improvement to roundtripping. Combined with 2.91 booleans, this rocks. 2020-11-27 22:02:12 +11:00
Dion Moult 3ad2d0eaac Fix import bug where some IfcOpeningElements aren't put in the openings collection properly 2020-11-27 22:01:43 +11:00
Dion Moult 7ad35249b8 IfcOpeningElements now show up as wireframe for convenience by default 2020-11-27 22:01:15 +11:00
Dion Moult 259d467164 Add experimental support for non-IFC Blender clashing. See #1129. 2020-11-27 18:18:23 +11:00
Dion Moult cfa97be080 Be less accommodating to invalid Revit grids. See #1133. 2020-11-27 12:14:08 +11:00
Dion Moult fddea742b8 Support invalid IfcGrid elements coming from Revit. See #1133. 2020-11-27 09:31:00 +11:00
Bernd Hahnebach 6ebb69f62e bimtester: steps, improve imports 2020-11-27 09:07:01 +11:00
Dion Moult b0097d35b4 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-11-26 21:31:52 +11:00
Dion Moult 15ea15d9ab Roundtripping geometry now works for one to many styled item relationships 2020-11-26 21:31:42 +11:00
Bernd Hahnebach b88eb37bdf bimtester: improve imports in steps 2020-11-26 19:00:57 +11:00
Bernd Hahnebach 5ce334019c bimtester: merge guibimtester into bimtester module 2020-11-26 19:00:57 +11:00
Bernd Hahnebach 15199152ac bimtester: code formating and comments 2020-11-26 19:00:57 +11:00
Dion Moult e346d5e3c6 Support invalid empty IFC properties coming from ArchiCAD. See #1131. 2020-11-26 12:48:03 +11:00
Dion Moult 957cc02157 Support exporting downgraded material definitions to IFC2X3 from IFC4 2020-11-26 09:53:05 +11:00
Bernd Hahnebach 32f99428c3 bimtester: move code into a package directory 2020-11-26 08:30:03 +11:00
Thomas Krijnen acb518613b #1118 check parallel and shape type 2020-11-25 11:02:57 +01:00
Dion Moult 25a26db360 Exporting classifications to IFC2X3 (including downgrading) is now supported 2020-11-25 20:35:11 +11:00
Dion Moult 5cbc924c85 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-11-25 20:17:47 +11:00
Dion Moult 4bff3dc3dd Roundtripping native geometry now works across different IFC schema versions 2020-11-25 20:17:30 +11:00
Bernd Hahnebach a5b00f1ac9 bimtester: pass the ifc base file name to behave 2020-11-25 19:29:47 +11:00
Bernd Hahnebach a9a8213731 bimtester: comments and code formating 2020-11-25 19:29:47 +11:00
Dion Moult 33b2661464 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-11-25 13:15:20 +11:00
Dion Moult 3085c88647 New experimental IfcOpenShell IFC2X3<->IFC4 version migration utility 2020-11-25 13:13:46 +11:00
Bernd Hahnebach 7ec91728be bimtester: remove the just added licence headers to avoid any confusion 2020-11-25 08:56:03 +11:00
Thomas Krijnen b1c4481795 Option to disable boolean results (sets result to first operand) 2020-11-24 16:58:05 +01:00
Bernd Hahnebach dd4902be18 bimtester: fix licence header 2020-11-24 18:04:34 +11:00
Dion Moult c057cb9aab Recreating round-tripped representations now preserves surface styles 2020-11-24 12:09:49 +11:00
Dion Moult e2543954c0 Native geometry round-tripping now works with decoupled surface styles 2020-11-24 10:18:16 +11:00
Bernd Hahnebach 7ba812c6c9 bimtester: some restructure work 2020-11-24 08:21:19 +11:00
Thomas Krijnen b15acfed42 Update IfcGeomShapes.cpp 2020-11-23 11:21:14 +01:00
Thomas Krijnen 648c976dd4 Remove debugging code #1121 2020-11-23 11:20:55 +01:00
Dion Moult dd0a3ad7b8 Minor fix. Forgot to commit when I cleaned up the simpler copy attributes operator. 2020-11-23 16:01:21 +11:00
Dion Moult b37ddb766f Native representation roundtripping now supports layer assignments and will "fix" representations to use subcontexts properly. See #952. 2020-11-23 16:00:45 +11:00
Dion Moult 7cc832ea15 Fix warnings in new simplified copy attribute to selection operator 2020-11-22 09:29:33 +11:00
johanrd fc5fcef079 Fix for #1119 (regression from 0984751) 2020-11-21 10:53:00 +01:00
Dion Moult 280466df53 Fix bug where a material wouldn't get assigned for multiple mapped representations 2020-11-20 23:31:52 +11:00
Dion Moult 2bd44e2fe8 Add support for importing IfcMaterial description and category attributes 2020-11-20 23:31:29 +11:00
Dion Moult 9a87f3673a Vendor workaround "treat styled item as material" deprecated, as new material & style system supports styles much better 2020-11-20 20:30:30 +11:00
Dion Moult 5af85ee7a3 Add support for IFC2X3 material data imports 2020-11-20 19:49:50 +11:00
Dion Moult e150e5f6c3 Fix default layer category to none, not load bearing, in case we import IFC2X3 where this is blank 2020-11-20 19:49:04 +11:00
Dion Moult 44dc5a92b7 Fix bug where no colour is set if only a styled item has a style but a material has no representation 2020-11-19 22:38:23 +11:00
Laurens Oostwegel 1f938c7f1a Deleted IfcWall duplicate in defaut styles 2020-11-19 20:35:56 +11:00
Dion Moult 225f8c788b Bump IFCJSON dep 2020-11-15 22:15:53 +11:00
Dion Moult 17d069e9b5 Bump IfcOpenShell & minor fix 2020-11-15 21:08:25 +11:00
Dion Moult 21b9557b97 Minor fix 2020-11-15 20:26:22 +11:00
Dion Moult 76b29cb174 Presentation layers are now assigned to meshes, and implement representation assignment. See #1109. 2020-11-15 17:00:50 +11:00
Dion Moult 1c24a59075 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-11-14 22:18:14 +11:00
Dion Moult 9080744669 Minor fixes to new presentation layer features by Krande 2020-11-14 22:17:56 +11:00
Thomas Krijnen 47cd183e61 submodule 2020-11-14 11:04:12 +01:00
Dion Moult 9dcb2f9094 Merge branch 'Krande-presentationlayer' into v0.6.0 2020-11-14 19:55:09 +11:00
Dion Moult 2e762854fa Merge branch 'presentationlayer' of https://github.com/Krande/IfcOpenShell into Krande-presentationlayer 2020-11-14 19:54:51 +11:00
Dion Moult 819b62a747 Fix bug where a styled item could be incorrectly assigned if an element has more than one representation context 2020-11-14 14:33:58 +11:00
Dion Moult 599089ad67 Now materials that aren't also used as a styled item can be exported 2020-11-14 13:36:49 +11:00
Dion Moult ddfe0e0c98 IFCCSV will now skip GUIDS that it cannot find 2020-11-14 10:11:36 +11:00
Dion Moult 27a8e7c89a IFCCSV now continues to edit other attributes even if it cannot change a class 2020-11-14 10:07:08 +11:00
Kristoffer b9e34a107b Prepare for pull request 2020-11-13 14:45:08 +01:00
Dion Moult df3bb0428c Fix #1103 bug where importing multiple grids with the same name fails 2020-11-13 22:01:49 +11:00
htlcnn 728b60e8c3 remove unused imports 2020-11-13 20:13:07 +11:00
Dion Moult 808ef1a19e New UI to manage material psets instead of needing to use CSVs 2020-11-11 23:02:07 +11:00
Dion Moult d6397baa59 Blender materials now map 1:1 to IfcMaterial and can store attributes 2020-11-11 22:13:50 +11:00
htlcnn ecdc05d265 remove unused IfcElementType dropdown items 2020-11-11 11:35:14 +11:00
Bernd Hahnebach 7bb5860200 bimtester: fix in report creation on empty steps 2020-11-11 11:34:55 +11:00
Dion Moult b3d180a288 Add workaround to guess geolocation data from Revit 2020-11-10 22:43:05 +11:00
Dion Moult a9ae92883d Add support for importing material data for type elements with no representation geometry 2020-11-10 18:02:43 +11:00
Dion Moult 1866b7852a Provide support of upgrading a deprecated material list as a constituent set during import 2020-11-10 17:50:04 +11:00
krande aca90b38c8 further experimentation. Still not able to hide\unhide 2020-11-09 18:08:03 +01:00
Kristoffer 2eae3a70d9 Added support for importing Presentation Layers from Ifc 2020-11-09 16:44:56 +01:00
Kristoffer 26510de9e0 Cleaned up formatting to align with master v0.6 branch 2020-11-09 13:40:14 +01:00
Kristoffer 2a585c98d8 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into presentationlayer 2020-11-09 13:35:15 +01:00
Kristoffer 9f86396edf Finished with creating, exporting Presentation Layer. Will start work on importing Presentation layer 2020-11-09 13:34:55 +01:00
Dion Moult 3477d3f1a2 Implement import support for material profile sets 2020-11-09 21:03:21 +11:00
htlcnn caa1677181 rearrange logic 2020-11-09 20:41:11 +11:00
htlcnn 84509b7cc2 add IfcClass selector for Ifc By Type node 2020-11-09 20:41:11 +11:00
Luis C. Pérez Tato 09847513ab Fixes #1038 2020-11-09 09:19:46 +01:00
Dion Moult 40e30eaa36 Support exporting more metadata labels like names and descriptions for profile sets 2020-11-09 19:15:23 +11:00
Dion Moult 527e6b0ca7 Minor fix 2020-11-09 15:26:16 +11:00
Dion Moult 8bdd24ba16 Add support for importing all attributes of material layers and consitutents 2020-11-09 15:01:39 +11:00
Dion Moult 4a6c980779 You can now rewind a breadcrumb trail when inspecting IFCs and show attribute lists 2020-11-09 11:45:53 +11:00
johltn 47af56cfa0 Fix typo 2020-11-08 18:13:13 +01:00
johltn e186bc8e15 Update 2020-11-08 18:08:16 +01:00
tpaviot ba094f2967 [clang-warning-fix] Removed unused format_edge and format_pnt functions from IfcGeomFunctions.cpp 2020-11-08 15:52:54 +01:00
tpaviot 8c507ea007 [g++-warning-fix] Fix wrong initialization order in SvgSerializer.h 2020-11-08 15:52:54 +01:00
tpaviot 640dc7cf5a [g++-warning-fix] Fix ambiguous parenthesis in SvgSerializer.cpp 2020-11-08 15:52:54 +01:00
tpaviot 28d9bccb6e [g++-warning-fix] Fix sign comparison in IfcGeomServer.cpp 2020-11-08 15:52:54 +01:00
tpaviot 1aa3e70d89 [g++-warning-fix] Removed unused function 2020-11-08 15:52:54 +01:00
tpaviot e4662cf209 [g++-warning-fix] Fix wrong enum compare 2020-11-08 15:52:54 +01:00
tpaviot f17702c66a [g++-warning-fix] Fix sign comparison, unused function, unused variables in IfcGeomShapes.cpp 2020-11-08 15:52:54 +01:00
tpaviot b8e0c21dcc [g++-warning-fix] Fixed comparison between signed and unsigned integer expressions 2020-11-08 15:52:54 +01:00
tpaviot 4ea56ba987 [g++-warning-fix] Fixed initialization reorder 2020-11-08 15:52:54 +01:00
tpaviot e793683668 [g++-warning-fix] Removed unused variable 2020-11-08 15:52:54 +01:00
johltn 9645b9f189 Update 2020-11-08 14:37:04 +01:00
johltn a0d2bc25b1 Update 2020-11-08 14:02:50 +01:00
Kristoffer a1cbf9a055 minor improvements in ui,export and operator 2020-11-08 13:52:20 +01:00
johltn 34e5cd9d16 Update 2020-11-08 13:37:01 +01:00
Dion Moult b37ea77934 Implement IFC element inspector interface, useful for training and teaching OpenBIM 2020-11-08 21:52:34 +11:00
johltn 7827b15479 Update 2020-11-08 11:32:09 +01:00
johltn f8e57b04b0 Update 2020-11-08 11:30:40 +01:00
Kristoffer 6423d13054 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into presentationlayer 2020-11-08 11:25:04 +01:00
johltn 3ca2a8be39 Update 2020-11-08 10:42:17 +01:00
johltn 388ac5740d Update 2020-11-08 10:30:23 +01:00
johltn 7825adf8e0 Update Travis 2020-11-07 20:55:54 +01:00
johltn 1eaa2ca8b4 Update Doxyfile 2020-11-07 19:30:51 +01:00
johltn e366c15dde Update conf.py 2020-11-07 19:12:33 +01:00
johltn 63f0c87920 Try to fix index.rst and also incude python docs 2020-11-07 18:55:39 +01:00
johltn 247a285b68 Test customized Doxyfile 2020-11-07 18:41:15 +01:00
johltn ad9382de08 Create nojekyll file to handle underscore 2020-11-07 07:55:33 +01:00
Bernd Hahnebach 05c952073b bimtester: some small improvements 2020-11-07 10:24:08 +11:00
Kristoffer 9a385c2118 minor improvements 2020-11-06 16:53:42 +01:00
Kristoffer 5928ddba40 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into presentationlayer 2020-11-06 12:24:06 +01:00
Dion Moult 19b867dae8 Full support added for exporting material layer and constituent set attributes 2020-11-06 21:57:34 +11:00
Dion Moult adf9ac52b2 Revert "add flake8 to travis-ci"
This reverts commit 990e6ee24e.
2020-11-06 20:53:02 +11:00
htlcnn 7c63370548 update travis-ci badge 2020-11-06 14:17:29 +11:00
htlcnn b8c3da4951 fix EnumProperty items 2020-11-06 13:52:22 +11:00
htlcnn 322f3773e4 Ifc By Type dropdown 2020-11-06 08:18:15 +11:00
htlcnn 990e6ee24e add flake8 to travis-ci 2020-11-06 08:18:15 +11:00
ofskrand 87e25cc597 Attempt to simplifying assigned items pointer. Stuck on read only 2020-11-05 16:32:49 +01:00
ofskrand 5009371e0f Ran into error when attempting to append EnumProperty. How is that done? 2020-11-05 13:54:20 +01:00
Thomas Krijnen f5c57d2a1c #1078 check optional opening attributes 2020-11-05 13:37:21 +01:00
Dion Moult ba09e08da5 Create new UI to manage material constituents 2020-11-05 22:41:43 +11:00
Dion Moult 4b2c129a4e Add IFC export to Navisworks workaround to enforce triangulation 2020-11-05 22:01:53 +11:00
Dion Moult 2fb67b09cd New category for IFC export workarounds for RIB iTWO costing program 2020-11-05 21:47:53 +11:00
Dion Moult 50b8718e3a Fix bug where setting north angle from a geolocated IFC was wrong 2020-11-05 21:37:26 +11:00
johltn e306da65c9 Update Travis file 2020-11-05 11:16:54 +01:00
johltn e57ffa9447 Change username 2020-11-05 09:04:01 +01:00
johltn 35a668f3a8 Add sudo to mv command 2020-11-05 08:38:17 +01:00
Dion Moult 6ecf7a80f5 You can now convert from global to local coordinates 2020-11-05 18:17:45 +11:00
johltn 4fe44d0f47 Fix directory path 2020-11-05 08:07:14 +01:00
ofskrand 227ec74a51 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into presentationlayer 2020-11-05 08:00:24 +01:00
ofskrand 9560211307 debugging collection property 2020-11-05 07:57:24 +01:00
johltn 617cad0b1a Check current dir 2020-11-05 07:44:34 +01:00
Dion Moult 30afd6c95b New fancy UI for material layer set management 2020-11-04 21:28:47 +11:00
Cyril Waechter 04943b216b Add pyproject.toml
Following #1057. For this project black should apply a line lenghth of 120.
This is automatically set up with pyproject.toml
2020-11-04 18:54:58 +11:00
ofskrand aed4706e4c updated ui with Presentation Layer 2020-11-04 08:52:20 +01:00
ofskrand eeef2cfb3f Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into presentationlayer 2020-11-04 07:57:40 +01:00
Dion Moult 3240ec63b7 New recipe to extract out elements into its own IFC 2020-11-04 16:47:49 +11:00
Kristoffer ae25d97307 minor change [skip ci] 2020-11-03 15:55:08 +01:00
Dion Moult b07d999bce Fix #946. More intuitive UI for reassigning IFC class of the active object. 2020-11-03 22:59:35 +11:00
Dion Moult ad1cc7f0b9 Fix #1011. Add example tooltips of add-on preferences external commands. 2020-11-03 21:14:39 +11:00
Dion Moult 81cba70f33 You can now add / remove qtos in bulk. See #1060. 2020-11-03 21:04:50 +11:00
Dion Moult 8b0f0fe60f You can now add / remove psets in bulk. See #1060. 2020-11-03 20:59:48 +11:00
htlcnn cde2d55694 add .git-blame-ignore-revs 2020-11-03 17:15:05 +11:00
Dion Moult 67baad5182 Fix #971. New utility function to query which psets/qtos apply to a class. 2020-11-03 09:53:03 +11:00
Kristoffer d9ecd20414 testing with layers [skip ci] 2020-11-02 15:14:33 +01:00
johltn 0def2a9b13 See if output exists 2020-11-02 13:14:46 +01:00
johltn a75ced62ce Try first commit 2020-11-02 12:43:17 +01:00
Dion Moult 96b8bc638b Add support for deleting attributes in bulk. See #1060. 2020-11-02 22:12:31 +11:00
Dion Moult ba8689468e You can now add attributes in bulk by selecting multiple before adding. See #1060. 2020-11-02 22:05:47 +11:00
Kristoffer 2b1a7eec47 Merge remote-tracking branch 'origin/presentationlayer' into presentationlayer
# Conflicts:
#	src/ifcblenderexport/blenderbim/bim/prop.py
#	src/ifcblenderexport/blenderbim/libs/site/packages/.gitignore
2020-11-02 07:15:05 +01:00
Kristoffer 35bcaa804b testing with layers [skip ci] 2020-11-02 07:13:51 +01:00
Dion Moult 8660d22476 Minor fix. 2020-11-02 11:26:31 +11:00
Dion Moult 3bc4e756cb Add support for case insensitive file units on import 2020-11-02 10:20:44 +11:00
htlcnn 163075a821 black ifcblenderexport 2020-11-02 08:28:02 +11:00
htlcnn 286c77e3b0 black ifcopenshell-python 2020-11-02 08:28:02 +11:00
krande 19c8d13e86 Started on PresentationLayer support. Made necessary change to props set_unit enumerate list of tuples to adhere to actual IFC naming. 2020-11-01 15:59:43 +01:00
htlcnn 2c9d6a47f4 black ifcsverchok 2020-11-01 23:50:02 +11:00
htlcnn 4a6ec11f6f black ifccsv, ifcdiff 2020-11-01 23:50:02 +11:00
htlcnn d169a964dd black ifccobie 2020-11-01 23:50:02 +11:00
htlcnn 892be5444c black ifcclash 2020-11-01 23:50:02 +11:00
htlcnn d6881e833d black ifc2ca 2020-11-01 23:50:02 +11:00
htlcnn c14f5eeca0 black ifcbimtester 2020-11-01 23:50:02 +11:00
johltn c263012287 Modify conf 2020-11-01 12:13:54 +01:00
johltn 5aae70875d Change doxygen output directory abd try to commit generated docs 2020-11-01 12:03:49 +01:00
johltn 0fb6d5a903 Re Comment python doc generation in CMake 2020-11-01 11:09:00 +01:00
Dion Moult 1a570aea83 Fix #1063. Log error if you try to export an abstract IFC class. 2020-11-01 19:00:45 +11:00
johltn 2669819292 Install sphinx after exhale 2020-11-01 08:39:10 +01:00
johltn a9c986020b Try other version of sphinx 2020-11-01 08:28:07 +01:00
johltn 9d6468bbf6 Install sphinx with apt-get 2020-11-01 08:12:01 +01:00
Ryan Schultz 5c89a386ca added drop down menus for area_unit and volume_unit 2020-11-01 15:29:42 +11:00
johltn 348c58a387 Uncomment test section 2020-10-31 20:43:18 +01:00
johltn cb0a5c90e3 Test sphinx directly from Travis 2020-10-31 20:02:04 +01:00
johltn 6267187950 New test 2020-10-31 19:44:09 +01:00
johltn 3575aff235 Comment test section 2020-10-31 19:15:24 +01:00
johltn 54d5d4cc63 Try pip install for sphinx 2020-10-31 16:35:35 +01:00
johltn f2bdcda369 Try without python docs generation 2020-10-31 15:31:23 +01:00
johltn 4020e9a1ce Update conf.py 2020-10-31 15:20:35 +01:00
johltn 1d51d6cac0 Update conf.py 2020-10-31 15:03:30 +01:00
Dion Moult 9447e87ebd Add support for rounding metric and imperial units in drawings 2020-10-31 21:46:09 +11:00
johltn d1f8832af6 Cleaner RST file 2020-10-31 11:21:30 +01:00
Thomas Krijnen b08346cc64 #1054 initialize memory in case of too few attribute values 2020-10-30 09:59:01 +01:00
Dion Moult 3fdcf3c7b7 Add support for multiple dimension objects per view 2020-10-30 10:58:02 +11:00
Dion Moult 84c0ad9ded Auto fix incorrect file format settings when creating drawings 2020-10-30 09:17:57 +11:00
Dion Moult 0061d9d1a9 Fix bug where Views wasn't allowed to be in the IfcProject 2020-10-30 09:11:43 +11:00
johltn 6e589527db Update CMakeLists.txt 2020-10-29 20:55:42 +01:00
johltn cac5203523 Find Sphinx module 2020-10-29 20:43:24 +01:00
johltn dafa6a546c Install doxygen and sphinx 2020-10-29 20:22:34 +01:00
Dion Moult e08260d6a2 Whoops. See #1056. 2020-10-29 20:49:49 +11:00
johltn e42f96faa7 Test modif on Travis file 2020-10-29 07:21:52 +01:00
Dion Moult 23abd3def4 Fix #1056. Fix error in case you switch drawing styles and the style it used to have was deleted. 2020-10-29 16:27:48 +11:00
htlcnn 5e844682ea unformat log messages 2020-10-29 09:15:07 +11:00
johltn b2e7809ee5 Test Travis 2020-10-28 11:44:38 +01:00
johltn fb75906fab Test Travis 2020-10-28 11:26:02 +01:00
johltn 0a6d5a733a Submodule 2020-10-28 11:07:19 +01:00
Dion Moult f15d62c35e Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-10-28 20:20:52 +11:00
Dion Moult 970f735b76 Fix bug where non uniform translations of spatial elements are exported wrongly. See #1052. 2020-10-28 20:20:25 +11:00
Thomas Krijnen aa49db07d3 Validate entity is_abstract in ifcopenshell.geom.validate 2020-10-27 11:41:39 +01:00
Dion Moult 6fd5f8d8c7 Support import of IFC2X3 document information / reference date times and formats 2020-10-27 11:08:22 +11:00
Thomas Krijnen e70241fc53 #1047 add swig array wrapper 2020-10-26 14:10:13 +01:00
Dion Moult e68f25bcfb ResetAbsoluteCoordinates recipe now attempts to avoid changing object placement coordinates, instead focusing on geometry coordinates.
This prevents a double up when combining with the OffsetObjectPlacement recipe when doing tricky patching.
2020-10-26 14:59:18 +11:00
Dion Moult 3bd58b7738 You can now specify user coordinates to ResetAbsoluteCoordinates recipe 2020-10-26 14:58:23 +11:00
Dion Moult 76af85264f Fix bug where attributes wouldn't import for some IFC classes 2020-10-26 14:25:39 +11:00
Dion Moult 473d97649c Implement workaround when importing ProStructures files that aggregate elements of different types together 2020-10-26 14:06:06 +11:00
Dion Moult e1c1cf6c9b Implement model offset workaround for Bentley ProStructures. See #1047.
In an ideal world, projects are geolocated properly in IFC. If not, they tend to store it in the spatial structure placement which is then inherited (e.g. Revit) or in the geometry coords themselves (e.g. 12D). In the case of Bentley ProStructures, it seemas s though large coords can be found in both object placements and geometry coords and who knows where else. In this scenario, a model offset is a clean solution rather than patching. However, it will lead to mesh inaccuracies in Blender due to the mixing of large numbers in both object locations and geometry coordinates.

Also model offsetting is useful to have available in general.
2020-10-26 13:36:18 +11:00
johltn 2243e0ab14 Set BUILD_DOCUMENTATION to OFF by default and ignore ifcopenshell python documentation generation 2020-10-25 12:52:48 +01:00
Johan Luttun a25c6245bf Update conf.py 2020-10-25 12:28:51 +01:00
Johan Luttun 0b6d55a8a3 Delete make.bat 2020-10-25 12:20:48 +01:00
Johan Luttun 9eaeea5462 Delete Makefile 2020-10-25 12:20:38 +01:00
Johan Luttun 483fb34e3a Delete Doxyfile.in 2020-10-25 12:20:26 +01:00
Johan Luttun 001fbeb525 Delete Doxyfile.out 2020-10-25 12:20:16 +01:00
Johan Luttun 8fd685b4dc Delete Doxyfile 2020-10-25 12:20:03 +01:00
johltn 1f76f73aa6 Upload files to generate documentation 2020-10-25 12:17:21 +01:00
Thomas Krijnen ef0f00792a #1034 Compound fallback for boolean union 2020-10-25 11:57:59 +01:00
johltn 5ed0b4d972 Added test submodule 2020-10-25 10:45:43 +01:00
johltn f3282003f4 Modify gitignore 2020-10-25 10:44:57 +01:00
johltn b534dc2199 Add Optimise recipe to ifcpatch 2020-10-25 18:22:33 +11:00
Dion Moult 5df723b9db Package IFCSverchok 2020-10-25 18:17:10 +11:00
Dion Moult b5d43b1d58 Fix #1036. Fix export issue where units aren't set explicitly, or set to adaptive. 2020-10-25 13:12:14 +11:00
Dion Moult 4ebed8d029 Fix export of classifications if they are only applied to a type or spatial element, not a regular element. See #1031. 2020-10-25 12:48:35 +11:00
johltn 25a5b435a6 Automatic documentation generation 2020-10-24 14:48:03 +02:00
Dion Moult 8872a13fd8 Classification trees are now stored in the blend instead of an external file for portability. See #1036. 2020-10-24 21:35:01 +11:00
Dion Moult ee6e96c226 Auto add owner history on IFC2X3 so the user doesn't need to do that manually 2020-10-24 18:20:42 +11:00
Dion Moult 4013a7e8b7 IFC Clash now uses iterator filters for faster clashing when using filters 2020-10-22 13:01:04 +11:00
Dion Moult 1a09658ec9 Fix IfcClash bug where spatial elements wouldn't get affected by user filters 2020-10-21 23:14:42 +11:00
Dion Moult 982166ac62 Increase maximum contacts threshold default so that it works out of the box for larger projects 2020-10-21 23:14:09 +11:00
Dion Moult 44d6060924 IFC clash now optimistically skips clashes that are likely to be merely coincident, thus resulting in less false positives 2020-10-21 23:13:43 +11:00
Jesusbill 95d6685597 add curve connections 2020-10-14 11:13:23 +02:00
Thomas Krijnen a625a8aea3 Update img urls 2020-10-13 17:13:50 +02:00
Thomas Krijnen 7131c62600 Add docs/geom/settings 2020-10-13 17:12:24 +02:00
Dion Moult 88e20582dd New node to get IFC attribute 2020-10-13 20:30:00 +11:00
Dion Moult 56209fa0ec New IFC get property node 2020-10-13 20:25:35 +11:00
Dion Moult d7e2f29eae New node to read IFC entities 2020-10-13 20:13:59 +11:00
Dion Moult 2ead44e1c5 New node to generate IFC guid 2020-10-13 19:40:42 +11:00
Thomas Krijnen fd18916b20 Add express.bnf to install 2020-10-11 14:23:54 +02:00
Thomas Krijnen d7f246c86d #1020 Map BezierCurve to BSplineWithKnots 2020-10-11 10:38:38 +02:00
Dion Moult 38e5321dbb Add IFC remove node 2020-10-11 13:13:33 +11:00
Dion Moult 275fa479d6 New IFC add node 2020-10-11 12:32:23 +11:00
CyrilWaechter 60147a8ec9 Fix collections deprecation warning
```python
ifcopenshell/geom/occ_utils.py:28ifcopenshell/geom/occ_utils.py:28
  /home/cyril/git/BIMxBEM/ifcopenshell/geom/occ_utils.py:28: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.9 it will stop working
    from collections import namedtuple, Iterable
```
2020-10-10 10:30:08 +02:00
Dion Moult 8b982df1c0 New IFC create shape node for Sverchok 2020-10-10 10:21:17 +11:00
Dion Moult 688c799d1b New select blender objects node - select objects in the Blender scene based off entities in an IFC file 2020-10-09 21:17:18 +11:00
Dion Moult cc778778ee Add new by query IFC node 2020-10-09 21:05:00 +11:00
Dion Moult b5fa993531 Fix #1007. Bug where box representations don't respect project units. 2020-10-09 20:42:07 +11:00
CyrilWaechter 85e7ed380e Import materials psets and display it
Import psets similarly to objects.
Display in the UI similarly to objects.
Basic handling for ConstituentSet and MaterialList.
2020-10-09 13:22:34 +11:00
Thomas Krijnen fcc056e204 #1032 Consider swept disk Start- and EndParam on single circle/ellipse edge 2020-10-08 16:51:01 +02:00
Thomas Krijnen 16663d4db3 Swept disk revolution processing on face instead of wire 2020-10-08 16:50:05 +02:00
Thomas Krijnen c24a91c42a #1030 Check for intersecting axis and sweptarea 2020-10-08 16:23:55 +02:00
Thomas Krijnen 681fd43599 #1019 check if trimmedcurve compcurve parent has siblings 2020-10-08 13:05:06 +02:00
Dion Moult 1fa7791b8b Three new nodes for IfcSverchok. By ID, By Guid, and By Type 2020-10-08 20:22:18 +11:00
Thomas Krijnen 38e5b17b0f Update schema feature detection in serialization. #1020 2020-10-07 14:12:31 +02:00
Thomas Krijnen ac40b90f27 Python settings.__init__ and settings.__repr__ 2020-10-05 15:39:19 +02:00
Thomas Krijnen 11657207c2 Python settings.__init__ and settings.__repr__ 2020-10-05 15:38:26 +02:00
Dion Moult 8982c8d045 Experimental create entity node created 2020-10-01 14:47:42 +10:00
Thomas Krijnen 373fd417eb #1022 2020-09-30 10:24:50 +02:00
fluider e3831be16e Warning iterator invalidation in removeEntity 2020-09-30 10:22:12 +02:00
Dion Moult b4f4d9b3c5 Improve prototype of native round-tripping by reading from original file and preserving styles 2020-09-28 22:14:03 +10:00
Thomas Krijnen e70d08c3a1 update_default_style() and default material for IfcSpace 2020-09-27 16:01:59 +02:00
Thomas Krijnen a13e28930a SVG drawing center option 2020-09-27 14:29:27 +02:00
Thomas Krijnen fd90d558b3 Correct X axis in SVG elevations 2020-09-27 14:28:47 +02:00
Thomas Krijnen 88bfa6fa96 smaller font-size in SVG print 2020-09-27 14:28:07 +02:00
Thomas Krijnen e17c6e4c9f SVG use stylesheet for all styling 2020-09-27 11:51:23 +02:00
Thomas Krijnen ee1e9b4aec --force-space-transparency 2020-09-27 11:51:00 +02:00
Thomas Krijnen 64153eb39a Fix SVG elevation direction 2020-09-27 11:10:44 +02:00
Thomas Krijnen f489487a20 --force-space-transparency option in IfcConvert 2020-09-27 10:43:11 +02:00
Walter Stanish 44306b036d Fix #1013 2020-09-24 11:51:33 +10:00
Thomas Krijnen bead7192fe #1008 via tpaviot 2020-09-22 14:10:38 +02:00
Dion Moult c01fd01c92 Implement read, create, and write for IfcSverchok 2020-09-22 21:22:10 +10:00
Thomas Krijnen 788c5b32f3 Proper orientation on SVG sections and elevations 2020-09-20 16:39:01 +02:00
Thomas Krijnen 08d773e346 Correctly name SVG section 2020-09-20 15:50:41 +02:00
Thomas Krijnen 5864de6dff Sort SVG drawings plans before elevations 2020-09-20 15:43:57 +02:00
Thomas Krijnen 2dd1a00834 Draw door arcs only on floor plans 2020-09-20 15:37:47 +02:00
Thomas Krijnen 76896fe9d6 write svg drawing name in data-name 2020-09-20 15:36:43 +02:00
Thomas Krijnen 46c82d07d0 submodule 2020-09-20 15:26:09 +02:00
Thomas Krijnen 3e9210d29f support for section and elevation references as annotation lines 2020-09-20 15:08:52 +02:00
Thomas Krijnen 0fba3bde2d Update Travis ICU version after dist upgrade 2020-09-20 14:05:25 +02:00
Thomas Krijnen ca8cf3620a Disable gltf validation on Travis. Stuck on building DART code. 2020-09-20 13:34:04 +02:00
Thomas Krijnen 8f43a65b74 Update travis to bionic 2020-09-20 13:14:47 +02:00
Thomas Krijnen bf57258895 #1005 Check degenerate edges on trimmed linear curves bounded by parameter value as well. 2020-09-20 12:59:11 +02:00
Dion Moult cbeaee8501 Fix bug where spatial elements with representations would import twice 2020-09-20 20:36:38 +10:00
Thomas Krijnen 32ebd08158 #996 Handle CompSolid/Compound in Slicer output 2020-09-20 11:12:57 +02:00
Thomas Krijnen 757e3b5272 #996 Correct thickness computation 2020-09-20 11:11:44 +02:00
Dion Moult 6cc4ce46c2 Proof of concept of native representation roundtripping 2020-09-17 17:28:17 +10:00
Dion Moult 2310bf628f You can now set facet tolerances (angular and deflection tolerance) when importing. See #766. 2020-09-15 15:59:52 +10:00
Dion Moult 85d77798c3 You can now modify IFC classes using IFC CSV 2020-09-15 14:58:17 +10:00
Dion Moult d4a629cbe8 Exporting now sets the IFC file if unset for convenience 2020-09-15 14:57:38 +10:00
Thomas Krijnen 3440dd4bf7 #766 2020-09-14 14:03:35 +02:00
Thomas Krijnen df886b3a6b Add missing express module init 2020-09-12 11:08:31 +02:00
Dion Moult ce831c0e05 Bump IfcOpenShell 2020-09-12 11:07:19 +10:00
Dion Moult 1a04e54f03 Fix bug where multiple presentation style assignments in IFC2X3 would get ignored 2020-09-12 10:59:45 +10:00
Dion Moult aac61a8948 Let users set their own app to open SVGs and PDFs 2020-09-11 19:02:33 +10:00
Dion Moult e25629e64f Remove papercuts when creating drawings to minimise manual tasks 2020-09-11 18:29:09 +10:00
Dion Moult 518c3eb6f0 Remove deprecated representation item operators in the mesh properties 2020-09-11 16:33:33 +10:00
Dion Moult c6a5bdf4eb Fix bugs in geocoding and geolocation MicroMVDs. 2020-09-10 17:43:30 +10:00
Dion Moult 9c591ce285 Add support for exporting addresses to the site and building 2020-09-10 16:11:33 +10:00
johltn a70429d2c8 New cmake for doc 2020-09-09 20:45:42 +02:00
Dion Moult 970832411c Enable exporting the plan context by default 2020-09-09 23:21:24 +10:00
Dion Moult 38765c8f0e Adding openings now detects if you've selected the filling object instead 2020-09-09 23:20:29 +10:00
Dion Moult 681083e757 Fix bug in autodetection of wireframe meshes in case you use a modifier 2020-09-09 23:20:01 +10:00
Thomas Krijnen ac2494968c Actualize trapezium profile per https://forums.buildingsmart.org/t/how-are-the-sides-of-ifctrapeziumprofiledefs-bounding-box-calculated-in-most-implementations/2945/8 2020-09-09 14:20:15 +02:00
Dion Moult 68a821b0ec Drawing styles store the render type and include outlines for more CAD-like drawings, and store shadow and lighting settings 2020-09-09 18:49:27 +10:00
Dion Moult 7f95759df0 Implement model federation MicroMVD for BIMTester 2020-09-09 16:44:36 +10:00
Dion Moult ca6adffc25 Fix incorrect auditing of geolocation MicroMVD in BIMTester 2020-09-09 14:21:10 +10:00
Dion Moult c58db675e3 You can now audit high poly objects using BIMTester 2020-09-09 11:23:11 +10:00
Thomas Krijnen 1494657368 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2020-09-08 14:40:37 +02:00
Thomas Krijnen d506ad77b7 python changes for latebound schema manipulation from python 2020-09-08 14:40:27 +02:00
Thomas Krijnen 95a29dec7b cpp changes for latebound schema manipulation from Python 2020-09-08 14:37:50 +02:00
Thomas Krijnen 27f358b314 Move express parser into module code 2020-09-08 14:36:57 +02:00
Thomas Krijnen fa4ff3e46b Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2020-09-08 14:36:14 +02:00
Thomas Krijnen 44565b320c Submodule 2020-09-08 14:36:05 +02:00
Dion Moult f2de8ce8df Implement imperial formatting for drawing dimensions 2020-09-08 22:13:41 +10:00
Thomas Krijnen 6ceda94cd4 Submodule 2020-09-08 10:49:57 +02:00
Dion Moult 635e84610e Fix #986. Text IfcAnnotation now stores classes and metadata like all IFC objects in SVG. 2020-09-08 18:32:11 +10:00
Dion Moult 94bd8da75e Fix #985. If the active object is a camera, the temporary section plane matches the camera orientation. 2020-09-08 18:14:39 +10:00
Dion Moult 627be5725a Fix #983. Minor fix. 2020-09-08 17:17:45 +10:00
Dion Moult cd5786d2a7 Fix bug where sometimes you cannot add a context 2020-09-07 22:09:48 +10:00
Dion Moult 9c190d74bb Fix #981. Incorrect and inaccurate conversion to imperial units in quantities. 2020-09-07 21:46:13 +10:00
Dion Moult b43f77bc01 Fix #980. You can now have rotated text in drawings. 2020-09-07 19:54:36 +10:00
Dion Moult f351d80453 Fix #979. Include IfcSpace in the preset for cut objects for an overall plan / section 2020-09-07 18:16:39 +10:00
Dion Moult ffebc44c64 Make stroke linecaps use round ends. They're just nicer, you know. 2020-09-07 17:50:04 +10:00
Dion Moult 22d7aef7be You can now refresh the drawing list, in case you are manually creating drawings 2020-09-07 17:47:19 +10:00
Dion Moult 36bd903736 Switch between drawings with one click, with access from the 3D view 2020-09-07 17:08:04 +10:00
Dion Moult 24c00c0235 New feature to select high polygon meshes 2020-09-07 11:28:35 +10:00
Dion Moult 14c824dfee If objects are not selected, export entire project to IFC 2020-09-06 10:21:12 +10:00
Dion Moult dae5adc38b Dumb walls are now even simpler, using two modifiers by default. Plane walls are still available as an option. 2020-09-05 14:23:43 +10:00
Dion Moult 57bc6f7763 Fix #978. Minor fix. 2020-09-05 14:15:37 +10:00
Dion Moult 45b805b05f New debug panel to create shapes from STEP IDs. See #977. 2020-09-05 12:58:53 +10:00
Dion Moult 0522ea61f6 Minor cleanup 2020-09-05 12:20:16 +10:00
Dion Moult a2f24a265a Support exporting qtos related to a spatial element 2020-09-05 10:33:50 +10:00
Dion Moult 0583a5f430 Fix #975. Add error message if drawing not created when adding to sheet 2020-09-05 08:08:50 +10:00
Dion Moult 7e80615fe0 Minor fix 2020-09-03 23:02:41 +10:00
Dion Moult 71fffa41a9 Minor: add demolish hatch pattern 2020-09-03 23:02:00 +10:00
Dion Moult b2e6075aa3 Fix bug where enum properties won't export 2020-09-03 19:36:35 +10:00
Dion Moult d1852b2415 Minor fix 2020-09-03 19:36:06 +10:00
Dion Moult 0b0876877e Provide 3 default hatching styles for orthogonal squares (e.g. for tiling) 2020-09-03 19:35:51 +10:00
Dion Moult 147bf664cc You can now copy properties to selection even if the pset doesn't exist yet 2020-09-03 19:24:55 +10:00
Dion Moult dbbc56ef0d You can now store arbitrary IFC data in the SVG, depending on the drawing style 2020-09-02 21:51:58 +10:00
Dion Moult 9c8f8ba56f You can now add arbitrary annotation to a drawing, not just belonging to one of the preset types 2020-09-02 21:50:58 +10:00
Dion Moult 73e5f1adf2 Switching cameras now automatically sets all of the drawing styles on the fly 2020-09-02 21:49:18 +10:00
Dion Moult 311174b1e7 Fix bug where Plan RL tag was not projected correctly onto the drawing 2020-09-02 21:48:16 +10:00
Dion Moult cba30f0831 Fix bug where 2D annotation curves geometry would be mangled on export. 2020-09-01 22:44:51 +10:00
Dion Moult 03b8503049 2D annotation now extracts from IFC directly, and considers bounding box intersection with the section plane 2020-09-01 22:44:28 +10:00
Dion Moult 3c8c411dc5 Fix #963. Allow getting / setting north to / from IFC and Blender sun position. 2020-09-01 22:43:00 +10:00
Dion Moult 2e6150b5ef You can now set the viewport shadow from the sun angle, useful for shadow studies 2020-09-01 22:26:57 +10:00
Dion Moult 55a54098dd Fix #961. Reloading is now more robust, and detects opening and projection changes to geometry 2020-09-01 12:18:48 +10:00
Dion Moult f1269c7618 Fix #964. Allow import of nested IfcSpace. 2020-09-01 09:46:40 +10:00
Dion Moult 6ac56cbcf6 Fix #965. Improve canonicalisation of material names to fix import failure. 2020-08-31 22:31:15 +10:00
Dion Moult 6f6a1aede6 You can now export to DXF automatically when creating sheets 2020-08-31 10:38:48 +10:00
Thomas Krijnen 1e3dc6ba16 Update validate.py 2020-08-30 15:21:21 +02:00
Dion Moult 1b2c8bdf8e Enable multiprocessing by default. Let's see how stable it is. 2020-08-30 21:41:46 +10:00
Dion Moult 9107c65ad0 New default site boundary CSS stroke style 2020-08-30 21:41:25 +10:00
Dion Moult 8d80c58e2d You can now render OpenGL for drawings - allowing much better wireframe views 2020-08-30 21:41:01 +10:00
Dion Moult 9c50e909e3 Fix bug where adding text no longer works with new scales 2020-08-30 21:40:21 +10:00
Thomas Krijnen b31caf3310 --json option for validate command line usage 2020-08-30 13:01:16 +02:00
Thomas Krijnen fac949cf95 Remove duplicate import 2020-08-30 13:00:56 +02:00
Dion Moult 880a269e21 Fix silly bug causing uninstall to fail 2020-08-29 20:10:25 +10:00
Dion Moult aca70434be Minor fix 2020-08-29 20:07:33 +10:00
Dion Moult f6280dec68 Bump IfcOpenShell 2020-08-29 19:00:33 +10:00
Dion Moult 4c4bc8ffd7 You can now generate annotation references for building storey levels 2020-08-29 18:56:23 +10:00
Dion Moult 2f4c96b9dc Drawings can now be associated with an IFC geometric subcontext target view 2020-08-29 18:55:38 +10:00
Thomas Krijnen bc2ce0ee62 Update express parser to retain AST parse tree 2020-08-29 10:23:59 +02:00
Dion Moult 77d686724e Annotation tools are now in the viewport instead of in properties for easier access 2020-08-29 11:02:43 +10:00
Dion Moult c5dd9a24cb Different drawings can now have different aspect ratios. Finally! 2020-08-29 10:28:34 +10:00
Dion Moult 6bc05c5bdc Add support for custom titleblocks, and provide presets for A1, A2, A3 sizes 2020-08-28 23:16:25 +10:00
Dion Moult 0c145dd885 Fix #956. Add support for imperial and custom drawing scales. 2020-08-28 21:40:24 +10:00
Dion Moult e7aa8d0e27 Support all ODS units for creating schedules (e.g. LibreOffice and Microsoft Excel have different defaults from a quick test) 2020-08-28 18:31:45 +10:00
Dion Moult c368ae6596 Fix #882. All SVG scales are now standardised to human units with appropriate spacing and placement. Views now appear within the titleblock border. 2020-08-28 11:45:57 +10:00
Dion Moult eea7b6547e Fix bug where mapped representations belonging to a context fails to import 2020-08-28 08:24:32 +10:00
Dion Moult 6cbf8cc8db Creating drawing sheets now understand templates in any CSS unit 2020-08-26 20:37:48 +10:00
Dion Moult d2fcf07b37 Utility to get all descriptions of IFC entities 2020-08-26 20:09:14 +10:00
Dion Moult c552e90897 Utility to extract documentation for all maintainable assets 2020-08-26 20:08:28 +10:00
Dion Moult 345ef27b15 Support IFC2X3 classification CalendarDates 2020-08-26 20:04:07 +10:00
Thomas Krijnen c872ee8844 Support writing SVG to scale 2020-08-25 15:01:07 +02:00
Thomas Krijnen 34c51fa9be #823 fallback to BRepBuilderAPI_Transformed in case of errors 2020-08-25 14:43:31 +02:00
Thomas Krijnen 5c20e7b62a #816 Use more than one cycle of self intersections in IfcArbitraryClosedProfileDef 2020-08-25 13:51:59 +02:00
Thomas Krijnen c15fdc7fa9 Remove erouneous line related to #939 2020-08-25 13:00:54 +02:00
Thomas Krijnen d0c207f6b9 #941 version numbers 2020-08-23 14:01:43 +02:00
Thomas Krijnen 1893f6cea4 #941 version numbers 2020-08-23 14:00:53 +02:00
Bruno Postle a2fa3a39e9 configure cmake to use linux/unix soname conventions for shared libraries, initial soversion is 0 2020-08-23 13:59:48 +02:00
Thomas Krijnen 628f9a2879 Iteration of inverse attribute list 2020-08-23 13:54:23 +02:00
Dion Moult 6ec368901b Types are now categorised in the project upon assignment 2020-08-22 19:34:52 +10:00
Dion Moult af05f72010 Grids in drawings now read from the AxisTag attribute when possible 2020-08-22 19:25:58 +10:00
Dion Moult a66b4f138a Support export of IfcCircleProfileDef 2020-08-22 19:11:17 +10:00
Dion Moult 609a2d3a7d Add dumb opening feature 2020-08-21 20:38:57 +10:00
Dion Moult afd6811c08 Improve error reporting for BIMTester auditing lists 2020-08-21 19:52:50 +10:00
Dion Moult ff5bc25228 Support tessellated polygonal face set for much more efficient files (44kb vs 84kb Suzanne!) 2020-08-21 18:14:46 +10:00
Dion Moult 09dd778f97 You can now specify custom attribute mappings to COBie spreadsheets 2020-08-21 14:38:41 +10:00
Dion Moult 668edbc45e Add support to override COBie types/components selection 2020-08-21 11:38:43 +10:00
Dion Moult f64e0c9acc Minor fix 2020-08-20 23:37:03 +10:00
Thomas Krijnen 99a76b5a6e #949 remove trailing dot from tmp filename 2020-08-19 12:56:43 +02:00
Dion Moult 3968bb2bf5 Auto add to drawings IFCs at export time for usability improvement 2020-08-18 15:58:46 +10:00
Dion Moult df382d3e64 Fix bug where predefined types aren't audited correctly by BIMTester 2020-08-18 13:36:07 +10:00
Dion Moult b6f51bc080 You can now add schedules to sheets 2020-08-18 10:04:19 +10:00
Jesusbill cf6ec3777f update changelog - ifc2ca 2020-08-17 20:35:16 +02:00
Thomas Krijnen 48f3d52880 Fix brace init with struct defaults #951 2020-08-17 18:02:59 +02:00
Jesusbill 7f48923153 add rigid connections - add spring stiffness for point connections 2020-08-17 17:05:31 +02:00
Dion Moult eac72dc852 Convert ODS schedules into SVG schedules for inclusion in drawings 2020-08-17 22:10:06 +10:00
Dion Moult d3da378ba3 New UI to add and manage schedules from ODS spreadsheets 2020-08-17 21:43:33 +10:00
Dion Moult 78d33b4ffd Support converting drawings to PDF on the fly 2020-08-17 21:12:31 +10:00
Dion Moult db0c266a17 Update titleblock with white background 2020-08-17 21:11:59 +10:00
Dion Moult 75b34b6a95 Support import of native IfcCircleProfileDef 2020-08-17 10:22:27 +10:00
Thomas Krijnen 1978ffa8df --log-file option 2020-08-16 16:17:38 +02:00
Thomas Krijnen d4afc6d1c0 #923 2020-08-16 14:35:39 +02:00
Thomas Krijnen 6eee9476a6 Default initialize verbosity 2020-08-16 13:40:58 +02:00
Thomas Krijnen 45c16e5318 Option for realtime logging with -vv 2020-08-16 13:37:58 +02:00
Thomas Krijnen f2884f9b0f Annotations with arrow heads and reuse path_objects 2020-08-16 11:41:40 +02:00
Thomas Krijnen 431e703137 Don't emit material warnings without faces 2020-08-16 11:41:07 +02:00
Dion Moult 31c349b0f1 Exports now automatically detect curve representations 2020-08-16 12:54:41 +10:00
Dion Moult b7bb7815ad Improved user friendly UI for sheet creation 2020-08-16 11:54:05 +10:00
Dion Moult b5acf81be2 COBie now shows log too when generating spreadsheet 2020-08-16 10:57:05 +10:00
Dion Moult 2c79f07abf New purge classifications feature, and imported systems shows up immediately 2020-08-15 18:37:03 +10:00
Dion Moult bd02c8e34b Fix bug where aggregate creation doesn't work if the aggregates collection doesn't exist 2020-08-15 17:34:13 +10:00
Dion Moult c359e35747 Enforce directories when selecting features directory for usability 2020-08-15 13:13:30 +10:00
Dion Moult 0a7c365d78 Selecting multiple objects will now guess quantities in bulk 2020-08-15 13:05:09 +10:00
Dion Moult a1e5135a9e More robust footprint area calculation with support for IfcSpace floor area 2020-08-15 12:40:55 +10:00
Dion Moult e9e0dbabe4 You can now implement element filters for drawing styles 2020-08-15 11:52:58 +10:00
Dion Moult 75b14d4c15 Added button to conveniently edit the vector style CSS within Blender 2020-08-15 09:45:20 +10:00
Dion Moult 217098132f Windows now generate a 2D annotation symbol 2020-08-15 09:27:42 +10:00
Dion Moult 6c064ecd51 Doors now have 2D annotation symbols generated too 2020-08-14 21:27:36 +10:00
Dion Moult cc4a29fc11 New feature to quickly add an Ifc Grid system object 2020-08-14 20:43:44 +10:00
Dion Moult 7386da14dc Support export of grids and UVW grid axes 2020-08-14 18:23:24 +10:00
Dion Moult 0a657be394 Grid axes are now categorised in UVW and have attributes on import 2020-08-14 18:22:07 +10:00
Dion Moult 9062d9720b Add import support for IfcGrid itself, not just the grid axes 2020-08-14 16:54:47 +10:00
Dion Moult 43186e4e59 You can now pick the vector style for each drawing style 2020-08-13 20:38:50 +10:00
Dion Moult 3254bc3c14 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-08-13 20:23:36 +10:00
Dion Moult cee53689aa Fix bug in extracting smart data for annotation tags 2020-08-13 20:23:26 +10:00
Thomas Krijnen afb2aaab5a Fixes for polygonal facesets and skip over errors in SVG 2020-08-13 12:22:03 +02:00
Dion Moult e9b791adaa Improve drawings management UI from a single dropdown to a proper list 2020-08-13 20:17:51 +10:00
Dion Moult 7f6c9e61c8 Add highly incomplete proof of concept DXF2IFC script 2020-08-13 17:47:56 +10:00
Dion Moult a7c76b1f48 Drawing styles now can store rudimentary rendering settings 2020-08-13 09:22:27 +10:00
Dion Moult a47d1ac32a Add prototype drawing style UI 2020-08-12 21:50:57 +10:00
Dion Moult 01d0d125a6 Utility to quickly set object colours, also colour mode is automatically changed now 2020-08-12 19:59:30 +10:00
Dion Moult 5db2a46369 Aggregation matrix inversion is no longer required now that relative placements are fixed from the previous commit 2020-08-12 19:04:47 +10:00
Dion Moult 4c3913353c Fix bug where parts of an aggregate were not placed relative to the whole 2020-08-12 18:27:31 +10:00
Dion Moult 71e59922ec Support IfcIndexedPolyCurve for more robust 2D representations 2020-08-12 12:39:39 +10:00
Dion Moult d56dd25245 Add dumb window 2020-08-12 08:57:58 +10:00
Dion Moult a477a2046d Add dumb slab feature 2020-08-11 21:10:02 +10:00
Dion Moult f6e8d5e281 Create dumb door feature 2020-08-11 20:54:54 +10:00
Dion Moult 0d221fa759 New dumb stair tool 2020-08-11 19:05:26 +10:00
Dion Moult e2fd9add83 Add dumb wall feature 2020-08-11 17:24:30 +10:00
Dion Moult e858930755 Enable export with auto-generated bounding box representations 2020-08-11 16:32:59 +10:00
Dion Moult ffa4e7570d Add button for camera to quickly open relevant drawing 2020-08-11 15:04:09 +10:00
Dion Moult cd6bd0e3cc Body subcontext added by default when a new rep is added, with a cloned mesh 2020-08-11 14:50:21 +10:00
Dion Moult ef41daedb9 Users can now specify what objects to cut for documentation with presets 2020-08-11 13:52:16 +10:00
Dion Moult 114e835d4a Implement multiprocessing in shape creation for IFC drawings 2020-08-10 21:47:37 +10:00
Dion Moult 12345b14ac Minor fix 2020-08-10 14:38:46 +10:00
Dion Moult 1e02353922 Minor fix 2020-08-10 13:01:42 +10:00
Dion Moult 6c868033e3 Fix project setup MicroMVD 2020-08-10 11:21:33 +10:00
Dion Moult 1e6e6a4977 Publish MicroMVD definitions for classifications 2020-08-10 10:40:19 +10:00
Thomas Krijnen f9bf6f814d #945 don't fail on degenerate edges in polygonal faceset 2020-08-09 20:55:44 +02:00
Thomas Krijnen 06b512c2e3 #939 break up closed loops for swept disk 2020-08-09 20:50:39 +02:00
Dion Moult 64db48276c Add a blank material style for documentation 2020-08-09 18:19:05 +10:00
Dion Moult 34fc2136c6 Fix #839. Add upstream support for IFCJSON, including compact, v4, and v5a 2020-08-09 18:10:30 +10:00
Dion Moult fb5c25bb68 Fix #873 2020-08-09 17:32:54 +10:00
Dion Moult d12643197e Bump IfcOpenShell 2020-08-09 17:22:20 +10:00
Dion Moult f58847502e Support transparency in non-nodal materials 2020-08-09 17:13:01 +10:00
Dion Moult 57d44c9066 Hotfix IfcOpenShell util module 2020-08-09 13:26:11 +10:00
Dion Moult b1842de9fa New function to add ifc opening relationships 2020-08-09 13:09:29 +10:00
Dion Moult f2dcd8bb75 Add feature to calculate multiple object volumes 2020-08-09 11:46:14 +10:00
Dion Moult 829b97a0d8 New feature to calculate area of selected faces 2020-08-09 11:33:47 +10:00
Dion Moult be4fe1b684 Simplify UI by making GlobalId generation more automated and show in context 2020-08-09 11:21:00 +10:00
Dion Moult 09af3b052b Move object structural properties to its own panel 2020-08-09 11:14:11 +10:00
Dion Moult 3292b98080 Allow export of type relations in IFCCSV 2020-08-08 17:58:45 +10:00
Dion Moult 11a66ee181 Convert units to project settings when guessing quantities 2020-08-08 16:31:27 +10:00
Dion Moult 7d976b1bc7 Add support for importing area and volume units 2020-08-08 14:47:33 +10:00
Dion Moult 43f0f396ab New feature to calculate total length of selected edges 2020-08-08 14:22:48 +10:00
Dion Moult ec66d7c0b8 Split object psets and qto into their own panels for usability 2020-08-08 13:19:56 +10:00
Dion Moult c79ef17a58 Minor fix 2020-08-07 20:18:43 +10:00
Dion Moult 0dbe7b9cc1 Add perimeter quantity calculation 2020-08-07 20:00:45 +10:00
Dion Moult 1d2677543d Allow calculation of depth 2020-08-07 18:23:50 +10:00
Dion Moult e56648e393 Simple recipe to merge two IFC files 2020-08-06 20:27:10 +10:00
Dion Moult 562dc72129 Publish implementation of geocoding MicroMVD 2020-08-06 18:32:33 +10:00
Thomas Krijnen bc8b377d6d #928 make trim param precision comparison dependent on radius 2020-08-05 10:40:25 +02:00
Dion Moult b60438b51c New UI in Blender to run IFCPatch 2020-08-05 17:18:10 +10:00
Dion Moult 277786771c Optimise the optimisation recipe. See #944. 2020-08-05 15:12:23 +10:00
Dion Moult 61f6ecbf17 New IFCPatch recipe to optimise IFCs by recycling non rooted elements 2020-08-04 21:11:37 +10:00
Dion Moult 6772886e65 New utility function to replace an attribute 2020-08-04 21:08:49 +10:00
Dion Moult 2a22acfdc9 Make util.element.get_psets() support IfcComplexProperty 2020-08-04 20:18:08 +10:00
Dion Moult 323dddf082 New feature to visualise IFC diff changes 2020-08-04 19:00:34 +10:00
Dion Moult a2454cf5ee Add support for dimensions added with MeasureIt-ARCH 2020-08-03 21:43:48 +10:00
Dion Moult 91917dcbb4 Minor fix for OCC import 2020-08-03 21:43:10 +10:00
Thomas Krijnen 97f03d3933 Skip degenerate triangles in IfcTriangulatedFaceSet #934 2020-08-03 10:57:10 +02:00
Thomas Krijnen 0d28978a48 Reuse py build dir in build script to speed up builds 2020-08-01 19:32:50 +02:00
Dion Moult 8ad9c215af Allow keyboard shortcuts for import and export.
Turns out operators need to start with import/export. Odd.
2020-08-01 09:31:28 +10:00
Dion Moult ecebb4b853 Fix #932 - bug where a material_id of -1 will not import. 2020-07-31 20:28:01 +10:00
Dion Moult 3e985facdd When absolute coordinates are offset during import, record the offset 2020-07-31 20:10:05 +10:00
Dion Moult 6c7ddcca9c Fix #940 2020-07-31 16:12:14 +10:00
Dion Moult e9cd48c62d Fix import bug getting geometry type of objects without a representation
E.g. an IfcGridAxis
2020-07-31 15:41:38 +10:00
Dion Moult e63f083a40 Fix bug where IFC2X3 files cannot have coordinates reset properly 2020-07-31 09:32:08 +10:00
Dion Moult a376ec1b12 Accommodate blank qto names. Probably invalid IFC though. 2020-07-31 09:31:31 +10:00
Dion Moult a3e38d2322 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-07-30 19:15:19 +10:00
Dion Moult e7446dc6cb Fix bug #936 where long, duplicate, material names fail to import. 2020-07-30 19:15:06 +10:00
Thomas Krijnen 75cff21efe #939 closed sweep 2020-07-30 11:12:55 +02:00
Dion Moult 5c2ded1486 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-07-30 17:09:44 +10:00
Dion Moult 8197621232 Curves, if they are a swept disk solid, may belong to multiple items.
Not sure if this is the best approach. It'll probably bite me in the future.
2020-07-30 17:09:09 +10:00
Bruno Postle 0cc816922c Fix shebang in command-line scripts 2020-07-30 10:11:32 +10:00
Dion Moult a337c480a9 Support exporting IfcSweptDiskSolid for curves with no bevel profile 2020-07-29 21:46:16 +10:00
Thomas Krijnen cc40726618 Fix SVG storey sorting and element naming 2020-07-28 12:19:05 +02:00
Dion Moult 7f58df876b Allow explicit checking for null attributes and properties 2020-07-28 17:31:26 +10:00
Dion Moult 330aa1b6e3 Publish element classes MicroMVD definitions 2020-07-28 17:31:11 +10:00
Dion Moult 252479189c Refactor geolocation MicroMVD definitions 2020-07-28 16:41:13 +10:00
Dion Moult f56269301f Fix bug where IFCCSV won't correctly store boolean data types 2020-07-28 11:47:22 +10:00
CyrilWaechter d87ea93e89 Restore OCC 0.18.1 support 2020-07-27 23:03:25 +10:00
Dion Moult 1d6f0c8e63 Document dependencies 2020-07-27 21:01:16 +10:00
Dion Moult 9359c388d1 Add true north conversion function to IfcOpenShell geolocation util lib 2020-07-27 18:38:34 +10:00
Dion Moult e2621e0207 Publish definitions for geolocation and project setup MicroMVD 2020-07-27 18:38:13 +10:00
Dion Moult 2837f75d50 BIMTester will now report unspecified tests with fancy colours 2020-07-27 18:37:05 +10:00
CyrilWaechter ab1f7337a5 Support for pythonocc-core 7.4.0 2020-07-27 08:39:28 +10:00
Cyril Waechter 21a4680811 Adapt data type for python-fcl/fcl 0.6.1
Credit to @aothms #919 
Need testing with python-fc 0.0.12l / fcl 0.5 to make sure it breaks nothing
2020-07-26 10:53:25 +10:00
Dion Moult 019f460af2 IFCPatch can now be used as a library or as a CLI 2020-07-25 18:38:35 +10:00
Thomas Krijnen 2a7c406412 #916 2020-07-23 10:49:45 +02:00
blocovin 1018118341 Add center-model-geometry 2020-07-23 10:47:48 +02:00
Dion Moult 5fbb324d7d New GUI to run IFCCOBie using the BlenderBIM Add-on 2020-07-23 17:02:48 +10:00
Dion Moult 7d4c760332 IFCCOBie now supports the ODS format, not just XLSX and CSV 2020-07-23 15:36:25 +10:00
Dion Moult d636775cad Create a better CLI for IFCCOBie, and don't create CSVs when you just need a XLSX 2020-07-23 13:43:57 +10:00
Dion Moult 18a2996a93 Fix bug where COBie convert fails on empty names of related objects for assemblies 2020-07-23 13:42:41 +10:00
Thomas Krijnen 4f1aca8ceb #921 2020-07-22 12:25:24 +02:00
HeySora 416640891f Use cerr_ instead of std::cerr
It was crashing on UNICODE builds.
2020-07-22 10:36:03 +02:00
Yoni Chechik 02bb7bea92 fixed broken url
fixed broken url (thanks https://github.com/IfcOpenShell/IfcOpenShell/issues/656)
2020-07-21 11:39:53 +02:00
Thomas Krijnen f92d1708f2 #924 2020-07-21 11:35:56 +02:00
Dion Moult 37e32738b9 Minor fix 2020-07-21 16:40:33 +10:00
Dion Moult 2d3ede02da BIMTester can now audit predefined types 2020-07-21 16:37:11 +10:00
Dion Moult 95f97efa72 Minor fix 2020-07-21 15:26:43 +10:00
Dion Moult a89f7dc116 New UI to run BIMTester from BlenderBIM Add-on 2020-07-20 22:08:39 +10:00
Dion Moult f1ed9d5b53 More granular reporting from BIMTester, and ability to run without packaging 2020-07-20 16:59:16 +10:00
Dion Moult e7afa0b3e4 Improved error reporting on failed BIMTester tests 2020-07-20 16:58:18 +10:00
Thomas Krijnen 20303ed6a8 Check for unbounded composite curve segments 2020-07-18 10:32:18 +02:00
Thomas Krijnen fdfe1097c4 Minor changes after #916 2020-07-18 09:59:07 +02:00
Stefan Fink ea71a1f8a7 IfcSiPrefix.cpp changes for MSVC 2013
IfcHierarchyHelper.h:176,185 changes in addRelatedObject about throw exception
exception comes from

ifcparse/IfcHierarchyHelper.h line 176 get_parent_of_relation(rel)
if (get_parent_of_relation(rel) == relating_object) {

ifcparse/IfcHierarchyHelper.h line 47
IfcUtil::IfcBaseClass* get_parent_of_relation(IfcUtil::IfcBaseClass* t)

ifcparse/IfcSchema.h
ptrdiff_t attribute_index(const std::string& attr_name) const {

ptrdiff_t index = -1;

-1 return but getArgument(..) Parameter is unsigned int
in the methode -1 is ca. 42123423423423 and throw IfcParse::IfcAttributeOutOfRangeException
we catch this exception and all works as expected and before in 0.5-rc1
2020-07-18 09:55:31 +02:00
Dion Moult 9d6e7c2481 Allow for wildcard expansion in IFCCSV export 2020-07-18 17:29:40 +10:00
Dion Moult 41c539965c Add automatic quantities calculated at export. See #898. 2020-07-18 14:22:18 +10:00
Dion Moult ab432ba3dd Allow "none" geometry types for objects with no body representation 2020-07-18 13:11:13 +10:00
Dion Moult 11472f9aa9 Allow export of mesh edges for structural curve members 2020-07-18 13:10:28 +10:00
Dion Moult 1ec78e57ce Minor fix 2020-07-16 17:35:57 +10:00
Dion Moult 418e4133b7 Minor fix 2020-07-16 17:19:07 +10:00
Dion Moult 2e1a32d540 Provide manual length, area, volume calc operators in qto UI. See #898. 2020-07-16 17:12:11 +10:00
Dion Moult c885652338 Minor fix 2020-07-16 13:05:50 +10:00
Dion Moult ee4a93c0d3 Remove TK interface for BIMTester. Will provide a Blender UI instead. 2020-07-16 12:59:28 +10:00
Dion Moult 9f63f42e6e Support import of IfcObjective constraints 2020-07-16 11:52:51 +10:00
Dion Moult 4d30be716e You can now select all COBie defined assets and types using the selector 2020-07-16 11:37:56 +10:00
Dion Moult e3de339ab2 Fix import bug where truncated material names cause import failure 2020-07-16 11:11:47 +10:00
Jesusbill 2a6b3b981a update changelog 2020-07-15 00:33:06 +02:00
Jesusbill a8d261f271 add zero-length springs for point connections and connection-to-member 2020-07-14 21:48:54 +02:00
Jesusbill 6c22894a93 import elements with no material or profile 2020-07-14 21:44:14 +02:00
Jesusbill 6e8eca37ef experimental ca2ifc (json -> ifc) for creating example files 2020-07-14 21:40:23 +02:00
Dion Moult 63e65b2114 Fix broken selector utility 2020-07-14 19:27:56 +10:00
Dion Moult 1222716e16 BIMTester UI updated to new Gherkin syntax conventions 2020-07-14 18:22:32 +10:00
Thomas Krijnen 98ed21a1e2 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2020-07-13 13:20:08 +02:00
Thomas Krijnen 093ebb2d8f Don't try to apply opening elements marked as Reference 2020-07-13 13:19:28 +02:00
Dion Moult 42f597a7af New experimental mode to allow users to profile import progress 2020-07-13 16:15:23 +10:00
Dion Moult 88331d16a2 Fix bug where imported materials that duplicated a name could be incorrectly assigned 2020-07-13 16:12:34 +10:00
Dion Moult fa1926fa84 Exporting now uses custom people and organisations defined from the UI. See #875. 2020-07-13 15:29:06 +10:00
Dion Moult bdbe988dc7 Don't bother creation relationships to invalid psets.
An invalid pset can occur when the pset doesn't contain any properties. This can happen when all properties are not part of the pset definition template. This may lead to unwanted data loss, but strictly enforces buildingSMART pset definitions.
2020-07-12 11:06:14 +10:00
Dion Moult 6b07aeb703 Allow export of positioning elements (only IfcGrid for now) See #911 2020-07-12 10:19:22 +10:00
Thomas Krijnen 4015c5b5b2 --door-arcs option in SVG serializer 2020-07-11 23:26:21 +02:00
Thomas Krijnen a62fd01725 Move late bound inverse access to IfcBaseEntity 2020-07-11 23:24:49 +02:00
Dion Moult 58fad83d4f No longer require object linked materials in Blender in preparation for new material system 2020-07-11 22:25:06 +10:00
Thomas Krijnen 1e916896ab --section-height-from-storeys 2020-07-11 13:39:09 +02:00
Thomas Krijnen 803cc66abb #873 2020-07-11 11:55:00 +02:00
Thomas Krijnen 8500daf1cc #915 2020-07-11 11:40:27 +02:00
Dion Moult 4baec5754d Allow you to specify whether to recut all, or just recut selected. See #901. 2020-07-10 21:22:22 +10:00
Dion Moult 607e506767 Users no longer need to manually select types for collections when exporting 2020-07-10 14:08:04 +10:00
Dion Moult 65821c4367 Group all aggregates into a single collection and update aggregate operators 2020-07-10 13:52:34 +10:00
s-leger fd283b9c84 Update export_ifc.py
Fix for objects where material index > material slots
Keep material indexes in material slots range (index % slots is blender default behavior)
Fallback to a minimal slot count to 1 for objects without material slots
2020-07-10 12:09:10 +10:00
Dion Moult 2132706c6e Migrate import geolocation to util module 2020-07-10 12:00:54 +10:00
Dion Moult e781dbd789 Export now supports Ifc2x3 style classes in IFC4 2020-07-10 11:59:21 +10:00
Dion Moult 07f8f8c489 Support IfcSpatialElementTypes for export 2020-07-10 11:55:45 +10:00
Dion Moult a7e1eb15ab Add support for triangular grids in IFC import 2020-07-10 10:30:41 +10:00
Dion Moult a27b00e616 Allow import of invalid grids coming from Revit. See #911. 2020-07-10 10:18:33 +10:00
Dion Moult c7211ed171 Create basic UI to manage people and organisations. See #875. 2020-07-09 20:46:50 +10:00
Dion Moult fbaa6cd2ed New UI to assign constraints to objects and export 2020-07-07 12:33:41 +10:00
Dion Moult e2868f871a Support export of scaled curve bevel objects. See #900. 2020-07-06 19:14:27 +10:00
Dion Moult b866106293 Exported constraints are now managed using the new UI, no CSV required 2020-07-06 17:48:00 +10:00
Dion Moult fda508e3f8 New UI to manage IFC constraints in the file 2020-07-06 17:26:38 +10:00
Thomas Krijnen 436eb3a637 msvc utf8 conversion in wrapper write() 2020-07-05 11:40:17 +02:00
Dion Moult 155a1eeca9 Fix incorrect dimension export of rectangle profiles 2020-07-04 13:26:14 +10:00
Dion Moult 79fdfa878c Rename "documentation" to "drawings and sheets" for more universal terminology. See #881. 2020-07-03 22:00:25 +10:00
Dion Moult 9a026d93fb Update fetch object passport to substitute a mesh from a Blender file only. See #871. 2020-07-03 21:54:22 +10:00
Dion Moult 125c0ced6e New feature to remove a representation subcontext. See #870. 2020-07-03 21:08:40 +10:00
Dion Moult 36b262dff9 Allow for null data in exporting georeferencing 2020-06-30 21:28:46 +10:00
Dion Moult 4d8b130f2d Fix IfcPatch ResetAbsoluteCoordinates recipe to account for coordinate lists 2020-06-30 21:24:08 +10:00
Dion Moult d22d903a36 Improve absolute coordinate support for georeferencing 2020-06-29 11:16:49 +10:00
Yorik van Havre c76c72c017 Added USERSPACE_PYTHON_PREFIX cmake variable to allow install IfcPython in userspace instead of system-wide. 2020-06-28 12:48:25 +02:00
Dion Moult 3e9fff6c19 New feature to unassign/reassign IFC class easily 2020-06-23 23:42:33 +10:00
Dion Moult da7ba7b1e9 Fix bug for exporting slots with no materials 2020-06-23 22:49:56 +10:00
Dion Moult 794e55aadd Fallback to non-native if boolean operations exist. See #865. 2020-06-23 08:02:46 +10:00
Dion Moult ebc305c0e1 Bump IfcOpenShell 2020-06-21 19:43:58 +10:00
Dion Moult 358d9ef1c8 Reimplement edge based mesh import
We don't use foreach_set, since for some reason doing it with foreach_set requires edit mode to be toggled for the edges to be visible. We make the assumption that an object is either edge based or face based, but not both.
2020-06-21 09:48:54 +10:00
Dion Moult a931c5ced9 Fix bug with incorrect unit scales on native elements 2020-06-20 21:23:53 +10:00
Dion Moult 189177300a Allow export of native faceted breps 2020-06-20 21:23:15 +10:00
Dion Moult b77ed5aab6 Fix bug where group subtypes are imported as the wrong class 2020-06-20 21:22:49 +10:00
Harald Geyer 501447fa5f Fix building with -DIFCXML_SUPPORT=OFF 2020-06-20 08:47:42 +02:00
Dion Moult 8962e3bcf4 Don't fail on importing case insensitive file extensions 2020-06-19 16:43:22 +10:00
Dion Moult d3f07c4ac4 Support native export of IfcArbitraryClosedProfileDef and IfcRectangleProfileDef 2020-06-18 21:55:07 +10:00
Dion Moult 1280eed00e Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-06-18 11:50:54 +10:00
Dion Moult 391ae80e36 Add support for storing subitems of a representation, like a profile. See #865. 2020-06-18 11:50:23 +10:00
Thomas Krijnen 67754ecfb8 opencascade_knotspec_to_ifc multiple definition 2020-06-16 10:34:48 +02:00
Thomas Krijnen e155cb4ab0 #586 Edge curve point projection error logging 2020-06-15 16:24:45 +02:00
Thomas Krijnen 89a7584d0c --edge-arrows debugging setting 2020-06-15 16:24:16 +02:00
Thomas Krijnen f01ae4a45b #842 IFC4X3 schema and some other schema init cruft 2020-06-15 12:48:30 +02:00
Thomas Krijnen b8d0e22aa8 #891 silence gcc-10 bug 2020-06-15 11:56:04 +02:00
Thomas Krijnen e2784fb69b Backwards pyocc compatibility in occ_utils 2020-06-15 11:36:13 +02:00
Thomas Krijnen e9a9c1ab7a #891 fix wrapper compilation 2020-06-15 10:34:47 +02:00
Thomas Krijnen 724d8c405b Fix constructors and assignment op for Kernel 2020-06-14 16:08:50 +02:00
Thomas Krijnen 4ca158e47b Merge branch '672' into v0.6.0 2020-06-14 13:06:38 +02:00
blocovin 32511bd9e9 Move center-model, model-offset and model-rotation under geom_options instead of serializer_options 2020-06-14 12:16:20 +02:00
blocovin e1af6d34e4 Update IfcConvert documentation 2020-06-14 12:16:20 +02:00
blocovin 6e2038c1f5 Use model-offset in IfcGeom::Kernel and add model-rotation 2020-06-14 12:16:20 +02:00
Dion Moult 76e7205692 Add experimental native support for faceted breps import 2020-06-14 19:19:54 +10:00
Dion Moult 7e362110d2 Optimise import process. See commit notes.
* When there is only one material slot, there is no need to assign materials as the slot becomes the default
 * Don't loop through collections to find the collection you need, we now store aggregate collcetions
 * The project collection is not added to the scene collection until the very end. Apparently linking objects to collections when the collection is enabled in the view_layer causes it to be twice as slow. Therefore all view layer operations happen at the end.
 * Don't print the progress bar, as excessive prints and calls to the iterator.progress() makes it very, very slow. Like, so slow you wouldn't even wait for the file to finish you'd just give up. See #895.
 * Only create materials once per mesh. Nobody seems to be using styled items properly as an object override anyways.
 * Use foreach_set to create meshes instead of mesh.from_pydata. This is much faster.
 * Similarly use foreach_set to set material indexes. This leads to a crazy speed increase on big meshes.
2020-06-14 19:17:58 +10:00
Dion Moult 7b98e48b9c Prevent adding a crazy number of material slots, especially in messy IFCs coming from Revit 2020-06-14 19:03:43 +10:00
Dion Moult d8373715e2 Disable mesh cleaning if objects >= 10000, for import optimisations 2020-06-12 21:48:35 +10:00
Dion Moult 9961f6172f Users can now choose whether to import type representations, disabled by default 2020-06-12 21:46:28 +10:00
Thomas Krijnen e2e217700d #843 SetTransparency requires theToUpdateViewer 2020-06-12 11:18:30 +02:00
Dion Moult 2035cf64c2 Improve i18n support in section plane tool and fix bug for invalid materials 2020-06-12 16:59:27 +10:00
Dion Moult 8b7850b3ff New IFC Patch recipe to split an IFC by building storey 2020-06-11 15:15:54 +10:00
Dion Moult 2f8ea33da5 Native elements are now always processed separately with multithreading, reducing bugs with 2D axis representation parsing too. See #865. 2020-06-11 10:57:29 +10:00
Dion Moult edc3aa6157 Support import whitelists and blacklist filters. Groundwork for #865. 2020-06-11 10:52:00 +10:00
Dion Moult 4a6868495e Opening elements now create a boolean relationship. See #865. 2020-06-11 09:58:40 +10:00
Dion Moult 9ae3adf0d7 Distinct representation items are now stored in different vertex groups. See #865 2020-06-08 17:04:36 +10:00
Dion Moult a8a51eb212 Add support for styled surfaces for native elements. See #865 2020-06-08 12:06:15 +10:00
Thomas Krijnen afb05f42db Merge branch 'master' into v0.6.0 2020-06-07 20:23:00 +02:00
Thomas Krijnen 2a42a582fd Merge branch 'master' into HEAD 2020-06-07 19:46:34 +02:00
Thomas Krijnen 86d7205760 layerset-first setting 2020-06-07 19:46:10 +02:00
Thomas Krijnen c8cca08dfa TODO note 2020-06-07 16:44:42 +02:00
Thomas Krijnen 603cf011c3 Implement LINE primitives in glb exporter #864 2020-06-07 16:39:23 +02:00
Thomas Krijnen 91bfd116e8 Fix correspondence between material_ids and edges 2020-06-07 16:13:20 +02:00
Thomas Krijnen 95c953fd52 Share vertices amonst edge-segments 2020-06-07 15:47:19 +02:00
Dion Moult 0237f12ceb Add native element processor for extruded solids and swept disks. See #865 #885
* New user option to enable native element processing
 * Native element geometry will be substituted with dummy geometry so that the iterator doesn't waste time on it
 * IfcArbitraryClosedProfileDef and IfcRectangleProfileDef are supported for IfcExtrudedAreaSolid
 * Old rebar code full of assumptiosn deleted for a more globally applicable native support for IfcSweptDiskSolid
 * Probably created a whole bunch of new useful utility functions in the process, which can contribute to #829
2020-06-07 22:53:33 +10:00
Thomas Krijnen a17b211983 rename by_type_excl_subtypes 2020-06-07 12:49:39 +02:00
Dion Moult a575b701b7 Merge pull request #888 from robertguetzkow/v0.6.0
Fix #883 by adding correct number of edges
2020-06-07 08:12:27 +10:00
Robert Gützkow 7c7587f167 Fix #833 by adding correct number of edges
The mesh structure was invalid because the vertex indices for only one edge were set. The other edge had the same index for both vertices.
2020-06-06 23:42:24 +02:00
Dion Moult 793c1c8ec6 Enable curve imports by default, so rebar, profiles, are imported without user confusion. See #771 and #865. 2020-06-06 11:55:22 +10:00
Dion Moult 9c111a1470 Disable limited dissolve, which can break geometric accuracy. 2020-06-05 21:24:28 +10:00
Dion Moult f21ae53950 Merge pull request #880 from globalcitizen/v0.6.0
Section Plane -> Temporary Section Cutaway
2020-06-05 21:11:04 +10:00
Walter Stanish 8ab42cf09f Section Plane -> Temporary Section Cutaway 2020-06-05 20:53:20 +10:00
Dion Moult a6a4cb81c5 Merge pull request #876 from globalcitizen/v0.6.0
Minor UX and documentation tweaks
2020-06-04 12:05:16 +10:00
Walter Stanish 619abdae51 Update strings as per pull request 2020-06-04 11:42:29 +10:00
Walter Stanish f5d01a90a9 Note on platform specificity 2020-06-04 11:08:34 +10:00
Walter Stanish 3a8a4b7c86 Normalize UI panel naming 2020-06-04 11:06:46 +10:00
Dion Moult d0f02f9247 Users are prompted to assign an IFC class prior to changing IFC metadata. See #869. 2020-06-04 10:47:51 +10:00
Dion Moult 12bb14da48 Minor fix. See #874. 2020-06-04 10:33:05 +10:00
Dion Moult b708c25f90 Minor fix 2020-06-03 22:03:30 +10:00
Dion Moult 4f1514022a Material layer set usage data is now half-imported, with no metadata. See #865. 2020-06-03 11:21:10 +10:00
Dion Moult 43abb87e82 Fix incorrect type assignment on non-unique type names bug. See #865. 2020-06-02 20:48:36 +10:00
Dion Moult 2e19d7697a IFC4 georeferencing data is now imported 2020-06-02 09:34:24 +10:00
Dion Moult 72a1c00e46 Switching contexts are now more tolerant of broken IFCs. See #865. 2020-06-01 22:37:11 +10:00
Dion Moult fa461502a0 Store the IFC geometry type on import. See #865. 2020-06-01 21:57:56 +10:00
Dion Moult 0ec205ad1d Retain material data if a surface style overrides it on import. See #865 2020-06-01 20:55:14 +10:00
Jesusbill 82ada5c102 minor fix in ifc2ca (revert a bad modification :|) 2020-06-01 01:41:20 +02:00
Jesusbill 9fa89651c4 minor fixes in ifc2ca 2020-06-01 01:26:35 +02:00
Thomas Krijnen 6aa32fb77a Remove debugging statement 2020-05-31 17:11:00 +02:00
Thomas Krijnen be96cee77d Iterator include/exclude of entity_instance in Python 2020-05-31 17:08:19 +02:00
Thomas Krijnen 4ffa658faf Don't segfault on empty multithreaded iterator result set 2020-05-31 17:07:41 +02:00
Thomas Krijnen 1eea532c9e python interator include/exlude entity types 2020-05-31 12:51:21 +02:00
Dion Moult ee7ea5445a Covetool now reads north angle from project geolocation 2020-05-30 19:40:05 +10:00
Dion Moult 7e77c0c92c You can now submit custom geometry for covetool environmental analysis 2020-05-29 19:18:57 +10:00
Dion Moult ec8a07ec6a Setup a default project if one hasn't been setup yet instead of an error 2020-05-29 09:24:07 +10:00
Dion Moult bdf17e5c12 Allow for objects with no placement 2020-05-28 22:34:54 +10:00
Jesusbill e071c7812f major update, refactoring to consider generalization of connections 2020-05-27 05:33:36 +02:00
Dion Moult 8bef6b9347 Bump IfcOpenShell build 2020-05-25 20:42:35 +10:00
Dion Moult 11b3f1c70c Minor fix 2020-05-25 20:38:18 +10:00
Dion Moult e75cc10988 New feature to select IFC clash results 2020-05-25 19:07:09 +10:00
Dion Moult 0d93633326 Update docstrings as per aothms comments 2020-05-22 11:30:45 +02:00
Dion Moult 295b2fb56b More documentation 2020-05-22 11:30:45 +02:00
Dion Moult d62bbd995f Add sphinx docstrings to ifcopenshell python binding 2020-05-22 11:30:45 +02:00
Dion Moult 1361c7b7e5 Users can now switch between IFC4 and IFC2X3 for exporting 2020-05-22 12:06:55 +10:00
Dion Moult 3b81a69591 You can now export psets for spatial elements 2020-05-22 11:08:54 +10:00
Dion Moult 72a2ab93c3 When importing, existing rooted elements are reused 2020-05-21 20:26:08 +10:00
Dion Moult d3590c2325 You can now specify relationships to IFC Diff in Blender 2020-05-21 19:26:28 +10:00
Dion Moult 5ead8995e1 BIMTester now purges data based on the latest MicroMVD syntax spec 2020-05-21 12:46:27 +10:00
Jesusbill ea1c3079cb add export to .ifcjson, related #839 2020-05-21 04:10:20 +02:00
Thomas Krijnen d81196316d Alternative implementation to #801 2020-05-20 16:27:59 +02:00
kukalaka eba631d245 Add missing IFC_PARSE_API 2020-05-20 16:15:08 +02:00
didi-ux 2ee9dafd16 Fix visualization for pythonocc 7.4.0
Following up the issue disscused here: https://sourceforge.net/p/ifcopenshell/discussion/1782717/thread/06e3103d93/

The yield and for-loop in initialize_display() changed slightly, 'GetHandles' and 'SetDiffuse' were removed. The directions are now V3d_TypeOfOrientation enumerations (randomly chosen by me) instead of tuples of integers.
2020-05-20 16:14:41 +02:00
Thomas Krijnen 839ca49a7a Fix #861 2020-05-20 11:55:59 +02:00
Dion Moult 3d06af0001 New simple energy/daylight analysis through cove.tool integration 2020-05-20 10:42:48 +10:00
Dion Moult f081c9dbcb Add support for import and export of clash sets from Blender 2020-05-19 20:35:00 +10:00
Dion Moult bc56196f27 New UI to create, manage, and run clash sets within BlenderBIM Add-on 2020-05-19 15:08:54 +10:00
Dion Moult e45f5d867b IFC Clash now supports clashing multiple clash sets and recording the results for each clash set 2020-05-18 19:40:01 +10:00
carlopav 35ea0b1b8b further fix to geolocation.py 2020-05-17 15:26:54 +02:00
Thomas Krijnen 3427b99521 libxml2.so on travis 2020-05-17 13:46:36 +02:00
carlopav 8fe4eb1dba util/geolocation.py fix imports and dms2dd 2020-05-17 12:32:52 +02:00
Dion Moult b08fb47a47 You can now perform internal collision checks 2020-05-17 19:53:13 +10:00
Dion Moult b0bb05bcdb Minor fix. See #854. 2020-05-17 19:41:26 +10:00
Dion Moult 6193a18734 You can now filter elements in IfcClash with either inclusion or exclusion IFC selectors 2020-05-17 19:32:04 +10:00
Dion Moult c7e3dba8c4 Add util module to IfcOpenShell, including element, geolocation, unit, and selector. See #829. 2020-05-17 18:32:56 +10:00
Dion Moult 1ac37d9110 Users can now configure clash tolerance distance and results show the greatest distance 2020-05-17 14:40:48 +10:00
Dion Moult ca4b257188 You can now clash multiple IFC files against multiple IFC files 2020-05-17 14:35:08 +10:00
Dion Moult ef5f86273e Minor fix.
Use PyPi windows build of fcl instead. https://github.com/BerkeleyAutomation/python-fcl/issues/17
2020-05-17 08:34:50 +10:00
Dion Moult e44eaf0ccd Implement import and export of relative placements of spatial hierarchy. See #852. 2020-05-16 21:36:34 +10:00
Dion Moult 3235d2495a Minor fix. See #852. 2020-05-16 20:04:51 +10:00
Dion Moult 81b3711c33 Bump IOS build and add support for IFCXML import. See #854. 2020-05-16 16:07:12 +10:00
Dion Moult 588549ca91 If you export two IfcProjects, they get merged into one by default. See #852. 2020-05-16 15:10:11 +10:00
Dion Moult 64fe2e978e Bundle IFC Clash in Blender for clash detection for Windows and Linux 2020-05-16 12:54:26 +10:00
Dion Moult 3e223b53e4 Move utility as it is starting to mature 2020-05-16 09:16:54 +10:00
Thomas Krijnen 64c0679a7e FIx code generation import for schema_class 2020-05-15 14:28:56 +02:00
Dion Moult 67cf93d182 Let IFCClash be used either as a standalone or as a library 2020-05-15 21:08:27 +10:00
Dion Moult fd821f3553 Allow ifcclash to patch coordinates to aid clash accuracy 2020-05-15 21:01:18 +10:00
Dion Moult e3c36a28f2 Fix bug where type mapped representations were not isolated to a single IFC 2020-05-15 16:39:40 +10:00
Dion Moult 480a1100ea Allow custom Qto quantities to be exported 2020-05-14 21:37:33 +10:00
Dion Moult 25f5407933 Fix inability to export due to truncated object names 2020-05-14 21:36:21 +10:00
Dion Moult 395d5ebea7 Fix round-trip bug when IFC2X3 classifications are imported. See #851. 2020-05-14 21:35:43 +10:00
Dion Moult dd525d8a30 Fix bug where a subcontext is always assumed during import, causing a fail 2020-05-14 16:30:16 +10:00
Dion Moult 32c621139b Fix bug where monetary unit causes import to fail 2020-05-14 16:29:56 +10:00
Dion Moult 5d7a841380 Rewrite IFCClash to get good results 2020-05-13 22:08:30 +10:00
Dion Moult 619416f7ad Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2020-05-12 13:32:01 +10:00
Dion Moult df12d6bab1 New feature to convert from local to global coordinates 2020-05-12 13:31:16 +10:00
Thomas Krijnen ad4e7fa14f Fix amiguous implicit cast 2020-05-11 11:19:54 +02:00
Dion Moult df62643fc7 Minor fix 2020-05-11 17:55:26 +10:00
Dion Moult 42f325295e Refactor SVG writer class to make multiprocessing easier in Blender 2020-05-11 17:46:38 +10:00
Dion Moult 48341176df Minor fix 2020-05-11 17:29:35 +10:00
Dion Moult 754ebaba1f Forgot to commit this 2020-05-11 17:24:56 +10:00
Dion Moult 7728e83f1e Default to IfcAnnotation for all annotation objects 2020-05-11 17:13:27 +10:00
Dion Moult 42634e9c60 Export views as groups, and text annotation as IfcTextLiteralWithExtents 2020-05-11 15:30:31 +10:00
Dion Moult 1d7865c558 Add support for IfcAnnotation elements 2020-05-11 15:17:39 +10:00
Dion Moult c481b77e73 Add support for breakline annotations 2020-05-11 10:00:54 +10:00
Dion Moult 4871243445 New door tag symbol 2020-05-11 08:34:10 +10:00
Dion Moult 1a31999abf Release new optimised patterns with caching for polygon metadata 2020-05-10 22:11:20 +10:00
Thomas Krijnen b8f790ca8b SVG: Sort storeys and output elements names 2020-05-10 11:48:39 +02:00
Thomas Krijnen 1c82d8c936 svg print space areas 2020-05-10 11:10:30 +02:00
Dion Moult 58a40316af Stair annotations now work in 3D 2020-05-09 22:45:16 +10:00
Dion Moult af11ebdc4f Annotation contexts are now drawn as solid lines in section cuts 2020-05-09 22:26:39 +10:00
Dion Moult 2a8251fc94 New UI to manage representation contexts for each object 2020-05-09 18:14:10 +10:00
Dion Moult 561009c330 Support solid line annotations using curve data 2020-05-09 16:38:05 +10:00
Dion Moult e270cf6989 Improved section caching, with annotation objects not cut. 2020-05-09 15:50:24 +10:00
Dion Moult 752a7c9b1c Minor fix for IFC2X3 2020-05-09 12:47:26 +10:00
Dion Moult c83af5fc2a Switching contexts and pushing contexts now works on object types 2020-05-09 12:02:10 +10:00
Dion Moult b857d9a37b Type representations are now properly mapped to instance representations if they share a rep 2020-05-08 20:40:06 +10:00
Dion Moult ac49d1f7aa For IFC2X3, IfcDoorStyle and IfcWindowStyle metadata will be imported 2020-05-08 10:18:32 +10:00
Dion Moult 1b237ccefe Type representations are now imported too, not just element representations 2020-05-08 10:18:02 +10:00
Dion Moult cdbe3433c0 New feature to add/override a single representation to an existing IFC file 2020-05-07 22:15:16 +10:00
Dion Moult 6300b27ac4 IFC unit settings are now preserved on import 2020-05-07 21:25:53 +10:00
Dion Moult bbc429bb99 New feature to switch / load / create new contexts per object 2020-05-07 16:57:14 +10:00
Dion Moult 673f12dd8a New feature to bulk add smart annotations to objects 2020-05-07 09:36:38 +10:00
Dion Moult 0af8902dde Allow text annotation formatting functions 2020-05-06 21:10:39 +10:00
Dion Moult 4ed3517c47 Minor fix 2020-05-06 20:23:37 +10:00
Dion Moult ef88f574c1 Namespace import/export operator so we can use it headlessly 2020-05-06 09:59:22 +10:00
Thomas Krijnen 9fca1aca3a catch errors during iterator construction 2020-05-05 13:08:38 +02:00
Thomas Krijnen 9c5c05202f more defensive XML parsing 2020-05-05 13:08:09 +02:00
Thomas Krijnen c9c2f76960 parse_xml can return nullptr 2020-05-05 13:07:55 +02:00
Dion Moult 23f5c808e8 Add export support for profile 3d geometry representations 2020-05-05 18:39:14 +10:00
Dion Moult 956e9ab034 Support Annotation 2D and 3D geometry representations 2020-05-05 18:30:43 +10:00
Dion Moult 0288af196d Support FootPrint GeomSet geometry representations 2020-05-05 18:17:12 +10:00
Dion Moult 9384cc04b8 Support 2D axis representations, and curves from either mesh or curves 2020-05-05 18:07:21 +10:00
Dion Moult 01e82620aa Make IFC export more granular to only export contexts that are specified
This allows us to build up highly specific IFC exports instead of monolithic files.
2020-05-05 15:25:48 +10:00
Dion Moult fa8b12497c Reuse materials on subsequent imports if they already exist 2020-05-05 09:35:15 +10:00
Dion Moult 534ede4839 Relevant types are auto selected for export if you don't select them 2020-05-04 18:47:57 +10:00
Dion Moult c3b04d554c Lat/longs are converted to decimal degrees when imported from DMS 2020-05-04 18:46:47 +10:00
Dion Moult 3fedbad7bb Fix classification round-trip bug 2020-05-04 18:46:19 +10:00
Dion Moult 11362becc8 Geometric representation contexts and subcontexts are now imported 2020-05-04 15:27:12 +10:00
Jesusbill 2d2c5cfc3d add orientation in the json file for point and line geometries 2020-05-04 05:34:19 +02:00
Dion Moult 3ce71e855f Text annotation can now extract dynamic variables from IFC data 2020-05-04 12:20:34 +10:00
Dion Moult dce5c40007 Aggregates are now placed inside IfcProject during import 2020-05-04 10:21:28 +10:00
Dion Moult 7410d75ef5 Users can now specify a symbol for text annotation 2020-05-04 09:35:35 +10:00
Dion Moult be2556aa0c Minor fix 2020-05-04 07:46:25 +10:00
Dion Moult 97ac0e09b7 Add option to use cached render during documentation 2020-05-03 20:37:51 +10:00
Dion Moult 61a2eb4a43 Feature to set and resize text to 1.8, 2.5, 3.5, 5 and 7 sizes 2020-05-03 19:54:27 +10:00
Dion Moult 7deedf6ec9 New UI to add annotation objects 2020-05-03 15:41:05 +10:00
Dion Moult 9e250a9616 Cache IFC metadata so you don't need to reload the IFC file on every view generation 2020-05-03 11:24:52 +10:00
Dion Moult a712861633 Grid annotations now work in 3D too 2020-05-03 11:24:22 +10:00
Dion Moult 280c7df79a Don't cut rooms in documentation, fix non single material bug, and add view present for construction style documentation 2020-05-02 21:01:39 +10:00
Dion Moult 47eb032689 Users can now specify which IFC files they want to cut 2020-05-02 17:33:16 +10:00
Dion Moult 741ae2575d Full classification HasReferences hierarchy is now exported 2020-05-02 13:57:11 +10:00
Dion Moult 70f298baae Support import of document information and relationships 2020-05-02 09:21:13 +10:00
Dion Moult 04afc101a3 You can now relate and export document references and information entities 2020-05-01 19:13:54 +10:00
Dion Moult 784a394298 New document reference UI, where all docs are imported regardless of object association, and you can edit almost all metadata 2020-05-01 17:24:59 +10:00
Dion Moult 6e0fb6145e Author and export document information metadata 2020-05-01 12:56:57 +10:00
Dion Moult 7b5d8a4079 Import rebar more efficiently without needing to create a profile 2020-05-01 10:23:19 +10:00
Dion Moult 9d9911c4c0 Import all document association metadata, not just location 2020-05-01 09:58:15 +10:00
Dion Moult 7ac2dc6712 Import element classification references 2020-05-01 08:33:50 +10:00
Dion Moult ce00b3d5f8 Import classifications, as well as the hierarchy tree which can be browsed 2020-04-30 17:03:01 +10:00
Dion Moult 38167af916 Fix section planes not cutting through aggregates and appearing at cursor 2020-04-30 08:28:00 +10:00
Dion Moult adb4a3f72a New feature to select similar type 2020-04-29 20:26:36 +10:00
Dion Moult a34a05262e Minor fix 2020-04-29 18:11:44 +10:00
Dion Moult fcd528abfa Aggregate metadata is now imported (attributes / psets / types / etc) 2020-04-29 09:29:55 +10:00
Dion Moult 3eee143bed New option to merge aggregates into a single object for artists 2020-04-29 09:20:30 +10:00
Dion Moult 203fcc1dca Bump bcfplugin dependency to latest version 2020-04-28 18:32:45 +10:00
Dion Moult 2fa49d36d8 New operator to reload an existing IFC file 2020-04-28 14:52:04 +10:00
Dion Moult 7bb7d91c7e Improve usability of IFCDiff by prompting for export JSON file 2020-04-28 11:42:08 +10:00
Dion Moult 1fdd3352ec Add support for BCF bitmaps 2020-04-28 10:46:08 +10:00
Dion Moult 6d26e1c31f Add support for BCF clipping planes 2020-04-27 14:30:33 +10:00
Dion Moult bb935bf167 Add support for BCF line annotations 2020-04-27 13:35:39 +10:00
Dion Moult 01cd5d1d79 Let user control section plane colour 2020-04-27 09:33:00 +10:00
Dion Moult 9f5ef32173 Eyedrop tool to visually select objects to export to IFC 2020-04-27 08:32:01 +10:00
Dion Moult d65f2b432b New import workaround for vendors who create a silly amount of materials like DDS-CAD 2020-04-26 22:06:27 +10:00
Dion Moult b8ea5dc3be IFCCSV now supports queries for inverse spatial or type relationships 2020-04-26 17:33:18 +10:00
Dion Moult cbfd41ad28 Package IFCCSV with BlenderBIM, with UI to import export CSV IFC data 2020-04-26 14:41:38 +10:00
Dion Moult 753fdae0d4 Allow export of IFC class into CSV 2020-04-26 14:40:33 +10:00
Dion Moult 011c50a042 IFCCSV can now be included as a library in your app! 2020-04-26 14:21:11 +10:00
Dion Moult a695eecd9a Minor fix to IFCCSV when exporting non-existant attributes 2020-04-26 14:12:31 +10:00
Dion Moult 3d45f9afeb New feature to only apply section planes to specific objects 2020-04-25 19:17:47 +10:00
Dion Moult 82e38e3abe New feature to remove a section plane 2020-04-25 19:09:34 +10:00
Dion Moult 3671953472 New feature to have multiple section planes at any angle 2020-04-25 17:40:24 +10:00
Dion Moult b250472d60 New feature to create a section plane on a model in real-time 2020-04-25 16:21:15 +10:00
Thomas Krijnen 2ee0cda83e delitem in ifc express parser schema 2020-04-24 13:56:28 +02:00
Thomas Krijnen 186da7ce8b Better formatting in IFC express parser 2020-04-24 13:56:06 +02:00
Dion Moult 4db3b83681 Deprecate CSV-based pset assignment 2020-04-24 20:54:24 +10:00
Dion Moult 13fef5a452 New workaround for importing Civil 3D files with absolute coords 2020-04-24 19:55:00 +10:00
Dion Moult 80863f94d3 New feature to write new property set templates 2020-04-24 18:05:59 +10:00
Dion Moult 9ad57d658e New feature to read pset template files 2020-04-24 17:14:07 +10:00
Dion Moult a90ad6e16c Only bundle Uniclass and Omniclass. Other systems can be downloaded online. 2020-04-23 18:16:04 +10:00
Dion Moult 19130b109e New hierarchical classification navigator, reading class data from IFCs. Thanks to Lucyon Oak (Teck-Freak) 2020-04-23 16:05:06 +10:00
Dion Moult 9217af315b New Graphisoft classification XML to IFC converter utility 2020-04-23 14:31:58 +10:00
Dion Moult 13d434c00f Fix incorrect OffsetObjectPlacement patch when coordinates or directions are recycled 2020-04-23 09:48:52 +10:00
Dion Moult 2bb57aebb5 New IfcPatch recipe to offset and rotate an entire model 2020-04-21 18:55:28 +10:00
Dion Moult 048966bda2 Read from model precision to determine tolerance when doing diffs 2020-04-21 17:29:47 +10:00
Dion Moult ee69bfedcb New feature to copy attributes or psets to all selected objects courtesy of Lucyon Oak (Teck-Freak) 2020-04-20 11:06:34 +10:00
Dion Moult f63ac9609b Optimise rebar profile creation on IFC import 2020-04-16 13:40:46 +10:00
Dion Moult 7adf4934aa Add support for importing IFC groups 2020-04-15 10:08:09 +10:00
Dion Moult 66afa9872d Minor fix 2020-04-14 20:53:32 +10:00
Dion Moult 4e0347fb05 Fix IFC grids imported in wrong location 2020-04-14 20:51:38 +10:00
Dion Moult 442ab790d4 Add export support for CAD presentation layer assignment 2020-04-13 18:24:47 +10:00
Dion Moult ddc37ab4d1 Minor fix 2020-04-13 13:23:53 +10:00
Dion Moult c3a795c825 Add support for BCF orthogonal camera scales 2020-04-12 21:00:13 +10:00
Dion Moult 88bb7da0b2 Add support for BCF component visibility, colouring, and selection sets 2020-04-12 20:40:07 +10:00
Dion Moult d180c4732f Support for exporting IFCZIP files. See #834 2020-04-12 09:51:10 +10:00
Dion Moult bdfe197c64 Support for importing IFCZIP files. See #834 2020-04-12 09:17:26 +10:00
Thomas Krijnen 42fedf81c4 Add parse_ifcxml to ifcopenshell_wrapper 2020-04-11 14:13:19 +02:00
Dion Moult c93a4b6808 Fix schema-invalid exports for booleans, mat slots without polys, and linked duplicate objects having duplicate materials 2020-04-11 21:54:36 +10:00
Dion Moult 3562b566d0 Remove unnecessary cmake files for linux builds 2020-04-11 11:11:53 +10:00
Dion Moult 65a9d6ac50 Fix potential infinite loop during export thanks to Stephen Leger 2020-04-11 11:03:29 +10:00
Dion Moult 2e21c97d82 Remove obsolete IFC file 2020-04-11 10:40:35 +10:00
Dion Moult efc8533c2d Delete obsolete ifcdoc tool 2020-04-11 10:38:12 +10:00
Dion Moult 407e64632e Reorganise libs into its own folder thanks to Stephen Leger 2020-04-11 10:37:47 +10:00
Dion Moult 3d1c796f14 Minor fix 2020-04-09 18:14:55 +10:00
Dion Moult 2db3cf0aa0 Merge pull request #830 from s-leger/patch-3
Remove hardcoded selection
2020-04-09 10:51:57 +10:00
s-leger f59f017bde Remove hardcoded selection
use selected_objects argument of exporter
2020-04-09 02:46:38 +02:00
s-leger abbaef459b Remove hardcoded input objects
Small cleanup of add_spatial_elements_if_unselected using sets
IfcExporter.export and IfcParser.parse take selected_objects as argument
2020-04-09 02:42:03 +02:00
Dion Moult dd1b0a1056 Merge pull request #828 from s-leger/patch-2
Use ifcExportSettings.factory()
2020-04-09 08:26:55 +10:00
Dion Moult 79b741225b Merge pull request #827 from s-leger/patch-1
Settings factory
2020-04-09 08:26:45 +10:00
s-leger c78bb18c8d Use ifcExportSettings.factory() 2020-04-08 15:43:45 +02:00
s-leger 4cf3479036 Settings factory
Use a static "factory" method to keep init logic near settings definition.
```python
logger = logging.getLogger('ExportIFC')
            logging.basicConfig(
                filename=context.scene.BIMProperties.data_dir + 'process.log',
                filemode='a', level=logging.DEBUG)
            output_file = bpy.path.ensure_ext(self.filepath, '.ifc')
            ifc_export_settings = export_ifc.IfcExportSettings.factory(context, output_file, logger)
            ifc_parser = export_ifc.IfcParser(ifc_export_settings)
            ifc_export_settings.logger.info('Starting export')
```
2020-04-08 15:40:12 +02:00
Thomas Krijnen 8bf8cdf51b Guarantee schemas are initialized for serialization and tesselation 2020-04-08 15:04:17 +02:00
Thomas Krijnen a59633ae0b Update MVD submodule 2020-04-08 12:34:18 +02:00
Dion Moult f6db62c758 Psets and qtos can be selected from a list instead of typed 2020-04-08 14:15:36 +10:00
Dion Moult 44b49f4ce9 Minor fix 2020-04-08 12:07:27 +10:00
Dion Moult b6e97dd26c Optimise spatial tree creation during import 2020-04-08 11:05:27 +10:00
Dion Moult 67bb18b580 Bump to latest IfcOpenShell build 2020-04-08 11:04:18 +10:00
Jesusbill 4786dc78a3 create ifc2ca dedicated folder and populate with existing scripts 2020-04-07 16:10:42 +02:00
Dion Moult fb51e85f79 Minor fix 2020-04-07 19:01:57 +10:00
Dion Moult acf1289d50 Import rebar as an extruded circle instead of a brep 2020-04-07 18:50:07 +10:00
Dion Moult b8edcb880d Minor fix 2020-04-07 18:49:16 +10:00
Dion Moult e86839d2db Diffs are now supported in non-legacy importer 2020-04-07 15:44:54 +10:00
Dion Moult 3049d24f6f Accomodate invalid psets without properties created by Solidworks 2020-04-07 14:46:58 +10:00
Dion Moult 28d5d11474 Spatial elements without geometry are now imported too 2020-04-07 14:34:24 +10:00
Dion Moult 503fcee432 Remove uninstall feature, as the built-in Blender remove plugin now handles this 2020-04-07 12:57:07 +10:00
Dion Moult 4c3051267e Repackage BlenderBIM Add-on in single add-on dir thanks to Stephen Leger from Archipack 2020-04-07 12:02:44 +10:00
Dion Moult df14ab57bf Fix wrapped data values in COBie extracts 2020-04-06 17:30:02 +10:00
Dion Moult 374d5a5d1d New optional GUI for BIMTester for user friendly testing 2020-04-06 16:55:36 +10:00
Dion Moult ee288bf7f9 Implement Project setup MicroMVD steps in BIMTester 2020-04-06 11:59:28 +10:00
Dion Moult 96ab539a0f Allow people to export context / project metadata 2020-04-06 10:18:23 +10:00
Dion Moult 1662b11fb2 Support different aspect ratios for BCF snapshots 2020-04-03 17:35:45 +11:00
Dion Moult 7ee385866a Minor fix 2020-04-03 16:08:49 +11:00
Dion Moult f3590f2b7b Allow people to check all inverse relationships without filters 2020-04-03 11:15:29 +11:00
Dion Moult 22e4eb4570 Allow to diff inverse relationships 2020-04-03 11:10:14 +11:00
Dion Moult 82c38f67ba BIMTester can now package test definitions for portability 2020-04-02 18:38:42 +11:00
Dion Moult 4c58cec393 Fix bug where missing styles in invalid IFCs cause imports to fail 2020-04-02 13:11:07 +11:00
Dion Moult 02e29955bf Merge pull request #819 from Jesusbill/v0.6.0
udpate ifc2ca.py - major revision
2020-04-02 09:04:00 +11:00
Jesusbill f4681b2053 udpate ifc2ca.py - major revision 2020-04-01 15:39:49 +02:00
Thomas Krijnen b41d3ed2e6 SVG --print-space-names and entity classes 2020-04-01 12:19:56 +02:00
Dion Moult 55f3f20531 Add experimental multicore import to IFCClash 2020-04-01 15:11:05 +11:00
Dion Moult a6c88a1d01 Accomodate deprecreated IfcPresentationStyleAssignment better 2020-04-01 09:25:34 +11:00
Dion Moult 3ff4b056b7 Support multiple materials per object on import 2020-03-31 19:37:04 +11:00
Dion Moult a5fd66706a Add support for BCF header files 2020-03-31 12:35:17 +11:00
Thomas Krijnen 293ba0db51 Don't fail on parse errors in multithreaded mode #746 2020-03-30 10:53:08 +02:00
Dion Moult d5d36f85be Change exception to error log 2020-03-30 10:20:15 +02:00
Dion Moult f921b6a7e7 Make validate module write to logger 2020-03-30 10:20:15 +02:00
Dion Moult fe633d9698 Add support for ordered BCF viewpoint snapshot images 2020-03-30 18:27:28 +11:00
Dion Moult c4cd6ef710 New feature to validate IFC files against specification 2020-03-30 12:47:14 +11:00
Thomas Krijnen df81490f86 Don't run wire intersection checks on parallel edge pairs 2020-03-27 13:26:34 +01:00
Dion Moult c99bf6e63a Compile views and sheets with automatic numbers, names, and scales 2020-03-27 18:23:46 +11:00
Dion Moult 46c878341d Fix broken ResetAbsoluteCoordinates IfcPatch recipe 2020-03-27 09:04:20 +11:00
Thomas Krijnen 21c9598409 Remove duplicate element quantity from XML #802 2020-03-26 18:53:57 +01:00
Dion Moult 03a23958a3 Store scale and view title in views on sheets, so it can be post-processed 2020-03-26 21:44:54 +11:00
Dion Moult f37e5e5d83 New buttons to open views and sheets instead of browsing manually 2020-03-26 20:47:21 +11:00
Dion Moult bf4eb330e0 New feature to add a sheet, and add a view to a sheet 2020-03-26 18:26:35 +11:00
Dion Moult cdb7a00f0a Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2020-03-26 18:23:36 +11:00
Dion Moult 8613834129 Optimise titleblock template. Skip pattern adding until it is optimised. 2020-03-26 18:23:27 +11:00
Thomas Krijnen 8625aab5f0 Check CWD in builds-deps.cmd #804 2020-03-25 14:20:47 +01:00
Thomas Krijnen 7e6ebbebe0 Update docs in accordance with #804 2020-03-25 14:09:22 +01:00
Thomas Krijnen ed98983687 Tolerance handling, error detection and triangulation on tesselation geometry #814 2020-03-25 14:05:22 +01:00
Dion Moult 3a590e4ba1 Implement BCF related topics 2020-03-25 17:55:52 +11:00
Dion Moult 1971bfe014 Support BCF topic document references 2020-03-25 17:12:02 +11:00
Dion Moult dd98ac3a89 Add links to project homepage, docs, wiki, and community 2020-03-25 16:32:14 +11:00
Dion Moult 2678dc3a09 Add support for BCF topic BIM snippets 2020-03-25 16:20:24 +11:00
Dion Moult f2e203d699 Show topic reference links and allow browsing of links 2020-03-25 15:03:06 +11:00
Dion Moult 52ff61a91c Show BCF topic metadata in UI 2020-03-24 17:53:58 +11:00
Dion Moult 8a22169036 Add support for viewing BCF comments 2020-03-24 14:44:03 +11:00
Dion Moult 7c66c5e4fc Allow users to select just objects for convenience when exporting 2020-03-24 11:25:27 +11:00
Dion Moult 44d884590a Allow any type of curve to be used for construction documentation annotation 2020-03-24 10:34:58 +11:00
Dion Moult 662a9fdad7 Allow users to see different BCF viewpoints through a camera 2020-03-23 19:35:02 +11:00
Dion Moult 648aaaa778 Show list of BCF viewpoints in UI for each topic 2020-03-22 20:39:22 +11:00
Dion Moult a8cb855613 Add button and operator to uninstall add-on 2020-03-22 15:25:57 +11:00
Dion Moult 7079e2aee2 Package BCF 2.1 schemas with distribution 2020-03-21 21:54:53 +11:00
Dion Moult 65a5dcbe25 Add list of BCF topics in UI 2020-03-21 21:44:02 +11:00
Dion Moult 5454521c2a Minor fix 2020-03-21 00:25:26 +01:00
Dion Moult 9932e7f012 Add ability to select a BCF file to be loaded 2020-03-20 21:22:32 +11:00
Dion Moult a7b52b5578 Add dependencies for patched bcfplugin 2020-03-20 21:21:23 +11:00
Dion Moult 114611d173 Do limited dissolve on imported meshes 2020-03-20 14:42:43 +11:00
Dion Moult 3b8b0cbbbf Don't assume the first representation when checking materials 2020-03-20 09:38:41 +11:00
Thomas Krijnen 83bba733c7 Update .travis.yml 2020-03-19 14:37:11 +01:00
Thomas Krijnen c991b9812f Update .travis.yml 2020-03-19 13:51:45 +01:00
Dion Moult 5454c5b1e7 Allow manually specified qto values to be exported 2020-03-19 18:16:30 +11:00
Dion Moult 7fe067498f Allow qtos to be imported 2020-03-19 16:48:50 +11:00
Dion Moult ea71485f3b Allow import of contained in IfcSpace relationship 2020-03-19 15:53:36 +11:00
Dion Moult 41acb6c985 Allow export of objects contained inside IfcSpace and other spatial elements 2020-03-19 14:37:18 +11:00
Dion Moult 772468d1ec Minor fix 2020-03-19 10:41:07 +11:00
Dion Moult 296ae71606 Merge remote-tracking branch 'refs/remotes/origin/v0.6.0' into v0.6.0 2020-03-19 10:35:07 +11:00
Dion Moult 160c055906 Add workaround for IfcOpenShell e44221c - see bug #812 2020-03-19 10:33:31 +11:00
Thomas Krijnen 86b02a9adf Address some warnings 2020-03-18 11:59:11 +01:00
Thomas Krijnen 30b28d5a8f Update .travis.yml 2020-03-18 11:42:00 +01:00
Thomas Krijnen d02182793b Product names in STP export thanks to luuk https://sourceforge.net/p/ifcopenshell/discussion/1782717/thread/55558229/?limit=25#a843 2020-03-18 10:12:54 +01:00
Dion Moult 358323492e Add new feature to auto-clean mesh on import 2020-03-18 17:49:08 +11:00
Dion Moult e99c775d51 Fix bug where some objects inside spaces won't import 2020-03-18 17:48:42 +11:00
Dion Moult e068776141 Fix bug where aggregate objects might not be exported 2020-03-18 14:22:44 +11:00
Dion Moult 130d732745 Support multiple materials per object on IFC export 2020-03-18 14:22:01 +11:00
Thomas Krijnen f24db3402f Support for 3D part of IfcSurfaceCurve 2020-03-17 15:13:36 +01:00
Thomas Krijnen 0cfbde13b9 PERMISSIVE_EXTRUSION preproc directive 2020-03-17 11:57:43 +01:00
Thomas Krijnen 9a99f85026 IfcCraneRailAShapeProfileDef for better or worse 2020-03-17 11:55:54 +01:00
Thomas Krijnen 481c6165ca Parametrize code generation actions from the command line 2020-03-17 11:55:28 +01:00
Dion Moult dc8e73b822 Add support for IfcSpatialElements and exclude abstract classes. 2020-03-17 19:16:11 +11:00
Dion Moult 8ba9b37ec9 Add icon and embed common.lark for packaging IFCCSV 2020-03-16 14:54:45 +11:00
Dion Moult a5b5b10d29 Add IFCCSV tool - import and export data from CSV 2020-03-16 13:19:35 +11:00
Thomas Krijnen 3e55297eb0 Propagate hierarchy helper template archument to IfcFile schema name 2020-03-11 16:19:13 +01:00
Thomas Krijnen bd27ff150a Place fills under openings in XML 2020-03-11 15:16:18 +01:00
Thomas Krijnen cb872a5bff Miirror SVG output to account for coordinate systems 2020-03-11 14:45:58 +01:00
Dion Moult f540e3495c Allow user toggle if aggregates are created. Useful for artists. 2020-03-11 15:44:00 +11:00
Dion Moult 9ce34ce395 Add feature to merge by material when importing, useful for artists 2020-03-11 15:27:03 +11:00
Dion Moult 608abf2e55 Calculate position of hidden lines in views in absolute coordinates
Very useful for creating projection lines in axonometrics
2020-03-10 18:28:03 +11:00
Dion Moult c6e10abc51 New feature to merge import geometry by class, which is useful for artists who don't care too much about the data 2020-03-10 09:56:34 +11:00
Thomas Krijnen 4df2feabe2 Add py38 to nix build 2020-03-08 10:14:47 +01:00
Thomas Krijnen 3c355b4848 Add py38 to nix build 2020-03-08 10:13:35 +01:00
Dion Moult a7c14bc7c3 Fix bug where placing spaces in a spatial structure fails with non-unique names 2020-03-08 14:51:32 +11:00
Dion Moult 3a91ed1382 Support IFC2X3 materials without transparency 2020-03-06 22:03:01 +11:00
Dion Moult e2cfc676d8 New test to check that no elements exist of a particular type 2020-03-06 11:35:05 +11:00
Dion Moult 8008ad16b1 Fix import bug where not all objects are typed 2020-03-06 10:17:00 +11:00
Dion Moult 5dd919f028 Create argument to specify a single feature in BIMTester, and separate report generation into its own function 2020-03-06 10:16:30 +11:00
Dion Moult 43348ce236 Bump to latest IfcOpenShell build 2020-02-28 11:24:43 +11:00
AlaaB2020 9f2443e01c Update IfcGeomFunctions.cpp
Changing comment to be suitable for the code change
2020-02-26 10:42:23 +02:00
Dion Moult c8cb9d8a7c Auto detect badly geolocated site from Tekla upon import 2020-02-25 17:47:32 +11:00
Dion Moult ffc8ec8c8d Accomodate deprecated IFC2X3 ways of relating type products 2020-02-25 17:43:48 +11:00
AlaaB2020 9cab063671 Update IfcGeomFunctions.cpp
get the first material even if there are more than one material layer
2020-02-24 13:08:21 +02:00
Dion Moult baf5f1891f New import option to toggle the import of space objects 2020-02-21 11:43:48 +11:00
Dion Moult bdc8caa5f6 New feature to colour code objects by attribute or pset values 2020-02-21 09:41:35 +11:00
Dion Moult 7a5ec24d8d Add ability to search with regex for pset values 2020-02-20 17:31:38 +11:00
Dion Moult eac8925134 Minor UI clean-up to hide panels by default 2020-02-19 17:24:28 +11:00
Dion Moult c3ffe9c3de Build new attribute search operator with regex support and ignorecase 2020-02-19 17:24:01 +11:00
Dion Moult 6c47ff73fd Specially import grids even though they are 2D as grids are pretty important. 2020-02-19 16:20:02 +11:00
Dion Moult cfe18d41d6 Implement support for importing pset data 2020-02-19 14:43:34 +11:00
Dion Moult 5beb3dc755 Show percentage results in BIMTester, add tests for element existance, attributes from a list, and more generic attribute checking 2020-02-18 14:03:32 +11:00
Thomas Krijnen e44221c9c2 XML serializer decomposition fixes for IFC4 2020-02-10 16:36:56 +01:00
Thomas Krijnen 56e3353879 Add inverse attribute availability to schema definition macros 2020-02-10 16:36:38 +01:00
Sander Boer 861dab0d9e proposed fix for #739, build with swig4 2020-02-07 10:45:14 +01:00
Dion Moult 7c97ad05fd New IFCPatch tool, which can "patch" an IFC, including adjusting coordinates and elevations. 2020-02-06 16:20:15 +11:00
Dion Moult bf55214e1a IFC2CA made more IFC specific - Merge pull request #778 from Jesusbill/v0.6.0
minor update of ifc2ca.py
2020-02-05 22:05:01 +11:00
Dion Moult 207359ec2c Minor fix 2020-02-04 17:38:08 +11:00
Dion Moult 1f89a00896 Allow people to maintain parametric modifiers, or bake the results 2020-02-04 11:57:06 +11:00
Dion Moult b449f8afaa Handle scenarios where the data block name is the name for meshes and curves 2020-02-04 11:56:39 +11:00
Dion Moult 2d53c691f5 Prevent duplicate GlobalIds if the author manually creates a collision 2020-02-04 11:55:54 +11:00
Thomas Krijnen 3b0585ae4b Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2020-02-03 14:00:51 +01:00
Thomas Krijnen 2e6f5c1bd9 Fix #776 IfcPolygonalFaceSet units 2020-02-03 14:00:21 +01:00
Dion Moult c87903d3d7 Allow arbitrary locations for leaders and section levels. 2020-02-03 18:01:41 +11:00
Dion Moult e03e961a2f Add support for projection elements 2020-02-02 20:28:51 +11:00
Dion Moult c7c3d366bc Allow 3D dimension annotations with arbitrary origins for flexibility. 2020-02-01 22:50:49 +11:00
Dion Moult 691cc8759a New operator to quickly set diagram render options 2020-02-01 22:49:35 +11:00
Jesusbill 2786d7a20c minor update of ifc2ca.py 2020-01-31 16:52:15 +01:00
Dion Moult 9571d4a67b Allow users to toggle import of opening elements. 2020-01-31 12:52:44 +11:00
Dion Moult bb462659a3 Fix import of multiple spatial elements with the same name 2020-01-31 12:44:02 +11:00
Dion Moult 85e55b6deb Implement import and association of type products 2020-01-30 17:23:57 +11:00
Dion Moult e354354b1a Fix curve profile orientation on export. 2020-01-30 15:33:01 +11:00
Dion Moult 56a2f9eedc Minor fix where enum position would get lost when refreshed 2020-01-30 08:57:20 +11:00
Dion Moult 9cf81d5c7b Record the source IFC file as metadata in preparation for partial writes 2020-01-29 11:42:43 +11:00
Dion Moult 1800ebc893 Sites now can have a long/lat attribute exported. 2020-01-29 11:29:29 +11:00
Dion Moult 9895ff3c22 Quick project set up now creates spatial objects. 2020-01-29 11:28:26 +11:00
Dion Moult 52fae93a14 Allow export of objects for spatial tree 2020-01-28 22:06:58 +11:00
Dion Moult 5a3303837d You can now write BIMTester tests directly to the features dir. 2020-01-28 18:10:33 +11:00
Dion Moult f501aaeb01 Add new import workaround for 12D files with absolute coordinates. 2020-01-24 10:19:44 +11:00
Dion Moult 98e082ccac Assign product types using a property, not by parenting for scalability. 2020-01-23 15:23:19 +11:00
Dion Moult 9e67b05df9 Add workaround for importing wrongly geolocated Revit buildings. 2020-01-22 21:43:18 +11:00
Dion Moult f80e700997 Add autodoc for IfcOpenShell-python. See #755. 2020-01-21 21:34:32 +11:00
Dion Moult 2f1b5ff2d4 Add doc pages for utilities, rename doc to IfcOpenShell 2020-01-21 18:03:15 +11:00
Dion Moult 9b5265e6fd Merge IfcOpenShell documentation structure. See #755. 2020-01-21 17:53:05 +11:00
Dion Moult b88739eed8 Add progress bar when importing. Fix #759. 2020-01-21 14:55:35 +11:00
Dion Moult 3108d3ecfe Add experimental IFC to Code_Aster converter script. See #756. 2020-01-21 09:55:40 +11:00
Dion Moult f78a0ec88a Assign all structural members to group. See #756. 2020-01-20 20:15:06 +11:00
Dion Moult afaab7c9e0 Allow export of structural analysis models. See #756. 2020-01-20 17:26:41 +11:00
Dion Moult 8dce661830 Allow export of structural member connections. See #756. 2020-01-20 16:22:24 +11:00
Dion Moult 47723b4e63 Allow export of boundary conditions. See #756. 2020-01-20 15:06:24 +11:00
Dion Moult f50722c4bc New UI to add structural boundary condition data. See #756. 2020-01-19 18:41:57 +11:00
Dion Moult a34588179d Extract select attributes from XSD into JSON. 2020-01-19 18:40:39 +11:00
Dion Moult 3fb268f687 Properly detect all possible representation contexts for an object. See #756. 2020-01-18 12:47:55 +11:00
Dion Moult 368f76b713 Minor fix 2020-01-17 14:13:11 +11:00
Dion Moult 09e4fe56f4 Add junit dir argument 2020-01-17 12:52:55 +11:00
Dion Moult e077235eee Add bimtester definitions related to model setup tests 2020-01-16 17:55:37 +11:00
Thomas Krijnen d9805185ee Fix boolean op style selection 2020-01-15 11:50:44 +01:00
Thomas Krijnen f58d9243fa Fix trimmed curve where vertex order does not agree with linear curve geom 2020-01-15 10:35:31 +01:00
Dion Moult 9a2f101df7 Allow structural point connections to be exported. See #756. 2020-01-15 17:43:21 +11:00
Dion Moult af278b5724 Add UI for pset overrides without the need to create a CSV. 2020-01-15 17:17:03 +11:00
Dion Moult 71f836d013 Add ability to export parameterised profiles for material profiles. 2020-01-14 17:38:54 +11:00
Dion Moult 8490dc7841 Allow material profile sets to be exported. 2020-01-14 16:11:11 +11:00
Dion Moult 2dbcd6712e Create UI to add/remove material attributes 2020-01-14 15:38:22 +11:00
Dion Moult ef919ab431 Create UI to change material definition type 2020-01-14 13:28:48 +11:00
Dion Moult 29b7b2963e Allow topological reference export of structural members. See #756. 2020-01-14 12:11:26 +11:00
Dion Moult 8ae8042d65 Only show predefined type and user defined type if it is a valid input 2020-01-13 17:42:59 +11:00
Dion Moult c4af52e8ee Allow IfcStructural* elements to be exported. See #756. 2020-01-13 17:35:56 +11:00
Thomas Krijnen 9ef9498c35 Submodule 2020-01-12 15:21:09 +01:00
Thomas Krijnen 68763f4988 Don't raise error on eliminated compcurve polygon points 2020-01-12 15:18:12 +01:00
Thomas Krijnen 98d8a3477d Limit max angle for trimmed curve approx 2020-01-12 15:17:48 +01:00
Thomas Krijnen 07756ab2da Renable wire segmentation for #468 and #674 2020-01-12 14:40:27 +01:00
Dion Moult a2003101a0 Support export of point clouds to IFC 2020-01-12 20:47:06 +11:00
Dion Moult ce5bf5749f Minor fix 2020-01-12 20:45:55 +11:00
Dion Moult 7519447966 Add sample data for doors and window. 2020-01-12 19:02:32 +11:00
Dion Moult e1cfa68dcb Allow export of material properties. Related to #756. 2020-01-12 19:01:35 +11:00
Thomas Krijnen 614348d3a2 Update testfile submodule 2020-01-11 14:45:36 +01:00
Thomas Krijnen 4320888d9d Fix #726, #728, #730 by other transition mode, more aggressive curve approx and custom revolution implementation 2020-01-11 14:23:16 +01:00
Dion Moult d84cfeffcc Export an axis representation for beveled curves. Related to #756. 2020-01-11 22:58:53 +11:00
Dion Moult a762afc7c1 All export of vector curve objects. Related to #756 2020-01-11 09:55:39 +11:00
Dion Moult 7c0f5ca7bc Allow import of site objects 2020-01-11 07:51:57 +11:00
Thomas Krijnen 6047addfae #include <Message_Msg.hxx> 2020-01-10 10:05:31 +01:00
Dion Moult b66e5e9911 Document context panel 2020-01-10 18:44:05 +11:00
Dion Moult e5cd71dd1e Minor fix 2020-01-10 18:24:05 +11:00
Dion Moult 28e043f97a Minor makefile fix 2020-01-09 06:00:30 +01:00
Dion Moult af2dd8f9bb Minor fix 2020-01-09 15:52:11 +11:00
Dion Moult 0f1be45990 Automatically detect and set import workarounds for Revit 2020-01-09 15:30:43 +11:00
Dion Moult d91fa69e83 Write documentation for BIM panel and owner history panel 2020-01-09 13:49:11 +11:00
Dion Moult a286082a1c Add scene documentation 2020-01-09 07:28:30 +11:00
Dion Moult fde80896a1 Add assign context operator and minor UI cleanup 2020-01-08 16:58:59 +11:00
Dion Moult 579d3d9f86 Add feature to explode an aggregation. 2020-01-08 15:58:39 +11:00
Dion Moult f11021b505 Place opening elements into collection on import. Fix #750. 2020-01-08 15:26:31 +11:00
Dion Moult 21ed3ea515 Import aggregations into collections. Fix #750. 2020-01-08 15:07:29 +11:00
Dion Moult e927ac49ac Add basic sphinx docs 2020-01-08 10:58:52 +11:00
Thomas Krijnen e8494dcbfd Fix placement on STP and IGS export 2020-01-07 15:37:22 +01:00
Thomas Krijnen 99706bdf5a Fix #741 2020-01-07 14:17:55 +01:00
Dion Moult 6b9a01c50d Add STEP header metadata 2020-01-07 16:12:11 +11:00
Dion Moult 13e0b77c7f Fallback to legacy importer if diff feature enabled 2020-01-07 15:48:54 +11:00
Dion Moult dcaef14b5f Add dependencies for IFC Diff 2020-01-07 14:42:03 +11:00
Dion Moult 6d6f7af3d7 Create UI to run IFCDiff tool from Blender 2020-01-07 14:27:34 +11:00
Dion Moult dfe8149b17 Package IFC diff utility for Windows 2020-01-06 17:39:04 +11:00
Dion Moult fc220efb6c Create UI to switch between views easily 2020-01-06 14:30:44 +11:00
Dion Moult 6d83815ab1 Allow view scales to be set per camera instead of global 2020-01-06 11:46:42 +11:00
Dion Moult 461b1735dd New interface to quickly create a new view for documentation 2020-01-06 10:41:59 +11:00
Dion Moult 642738e0c0 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2020-01-06 08:49:24 +11:00
Dion Moult 99c77fff5e Remove unnecessary example blend file 2020-01-06 08:48:14 +11:00
Dion Moult 8a255d3b0d Fix duplicate material assignment bug on import 2020-01-03 21:21:36 +11:00
Dion Moult 94d2a11096 Minor fix when ignoring site coordinates 2020-01-03 16:56:32 +11:00
Dion Moult 403cda5bc8 Allow you to select person and organisation when exporting owner history metadata 2020-01-03 15:53:57 +11:00
Dion Moult d6b9810b94 Add about 50 hatches in SVG pattern format taken from LibreCAD 2020-01-03 12:46:29 +11:00
Dion Moult 7c6e7742a8 Implement "should recut" to force recutting of a diagram 2020-01-03 08:44:51 +11:00
Dion Moult 220826f141 Turn BIMTester into a CLI app with ability to set arguments to Behave 2020-01-02 15:02:40 +11:00
Dion Moult 2007277bfc Add unit tests to check for names, shapes, attributes, properties, and quantities 2020-01-02 13:01:17 +11:00
Dion Moult f74295127b Allow people to create spatial structure elements 2020-01-02 13:00:18 +11:00
Dion Moult 4ed4bcf660 Implement multicore importer using IfcOpenShell iterator with Revit material hack 2019-12-31 16:32:20 +11:00
Dion Moult 4da2f9c9e7 Don't strictly enforce Ifc naming in objects or meshes 2019-12-29 07:28:54 +11:00
Dion Moult 782b10fbde Add AI-enabled web 2.0 hypermedia API generate digital twin button 2019-12-20 10:43:39 +11:00
Dion Moult 4bb5248593 Minor fix 2019-12-19 16:49:27 +11:00
Dion Moult 5127555740 Implement Conda Mac and Linux lib loading workaround 2019-12-19 15:31:00 +11:00
Dion Moult 276ac5c1d1 Isolate libs for macos and linux builds 2019-12-19 05:05:57 +01:00
Dion Moult d6e16c5373 Fix bug with loading absolute dependencies on a fresh install 2019-12-19 04:35:19 +01:00
Dion Moult a93844bb83 Support multiline annotation, improve RL tags, detect active camera 2019-12-19 13:00:19 +11:00
Dion Moult 6f5a6418a7 Fix rotated dimensions, add engineering style dimensions 2019-12-19 08:17:14 +11:00
Dion Moult f63161e40a Add view cut caching, equal dims, and RL tags 2019-12-17 17:05:03 +11:00
Dion Moult b500dab88a Fix PDF dimension annotation rendering bug 2019-12-17 17:04:00 +11:00
Dion Moult eed5d05af5 Convert template to OpenGOST typeface 2019-12-17 14:59:02 +11:00
Adrien Scho 4b6fe80fb2 chore: updated broken links in readme 2019-12-16 13:43:52 +01:00
Adrien Scho 05a5c3c3f9 fix: #734 - No XML serializer registered for IFC4X1 2019-12-16 13:43:52 +01:00
Thomas Krijnen 3937d995b6 Merge branch 'master' into v0.6.0
# Conflicts:
#	src/ifcopenshell-python/ifcopenshell/geom/main.py
2019-12-16 13:41:54 +01:00
Dion Moult 1b2af78e65 Experimental packaging with OCC and SVG deps 2019-12-16 05:44:52 +01:00
Thomas Krijnen 974e3fa904 Correct clean up in Iterator 2019-12-14 13:23:40 +01:00
Dion Moult c0cd0ce07e Add section cut multiprocessing, grids, hidden lines, stair arrows, text annotations, and leaders 2019-12-13 17:25:52 +11:00
Dion Moult 4f7925580a Implement dimension text rotation, technical font, and dimension position 2019-12-12 18:17:39 +11:00
Dion Moult e87bff736e Add simple section cut results caching 2019-12-12 18:16:02 +11:00
Dion Moult 948ff287f1 Standardise line thicknesses and dimension tick styles 2019-12-12 18:14:44 +11:00
Dion Moult b452d7c794 Add support for different view scales 2019-12-12 12:51:47 +11:00
Mieszko Boczkowski 1426c7066b Move has_occ() function to __init__ 2019-12-11 11:54:56 +01:00
Mieszko Boczkowski f84982f99a Change exception on failed import for Python 2 compatibility 2019-12-11 11:54:56 +01:00
Mieszko Boczkowski 8d4f34461e Fix OCC imports in Python 2019-12-11 11:54:56 +01:00
Dion Moult 516757ba38 Support placing a view / section / diagram on a sheet 2019-12-11 18:50:01 +11:00
Dion Moult 25dfa32b7e Switch to absolute paths for module loading 2019-12-11 18:44:46 +11:00
Dion Moult 2eeb507b78 WIP support for cutting a section with dimension annotation lines 2019-12-10 18:54:26 +11:00
Dion Moult 1d04a3a5c7 Move section generator into plugin to prepare for integration 2019-12-09 21:26:29 +11:00
Dion Moult d3b56bd79b Experimental code to merge background faces in a section cut 2019-12-08 21:14:04 +11:00
Dion Moult 53d64348fd Allow people to configure exportable contexts 2019-12-07 21:33:44 +11:00
Dion Moult d46ba7d1cd Simplify UI for context management 2019-12-07 17:02:59 +11:00
Dion Moult c339a97443 Allow IFC clash utility to run as a command line app 2019-12-05 17:28:34 +11:00
Dion Moult dfc30c2137 Add sample material pass files and fix relative material locations 2019-12-05 09:54:35 +11:00
Dion Moult e9418bfb0b Allow IFC diff utility to read from command line input 2019-12-04 21:58:59 +11:00
Dion Moult f7116d70e7 Add experimental UI to manage geometric contexts 2019-12-04 17:49:28 +11:00
Dion Moult 2d495e6124 Add support to do basic import of document relationships 2019-12-04 15:30:33 +11:00
Dion Moult 5df2b3aa0a Experimental support to proxy one shape for another in IFC 2019-12-03 17:27:22 +11:00
Dion Moult a00449e34b Export clash results to JSON with metadata 2019-12-01 22:17:23 +11:00
Dion Moult 6250f903ff Implement experimental clash detection with a tolerance 2019-12-01 22:04:28 +11:00
Dion Moult 5bb59f3136 Allow fetching Eevee or Cycles materials from a material pass file 2019-11-30 22:42:04 +11:00
Dion Moult d76a67450c Import externally defined materials 2019-11-30 12:05:56 +11:00
Dion Moult a38df48d5a Support styled item surface colours on IFC import 2019-11-30 11:26:02 +11:00
Thomas Krijnen e283b51dbc Add includes for older occt versions 2019-11-26 12:47:43 +01:00
Dion Moult 44491c6167 Make the audit class a drop down in the panel UI 2019-11-26 21:05:05 +11:00
stephassoria afaa34ffc2 IfcOpenShell v0.6.0 as subrepo 2019-11-26 10:09:16 +01:00
Dion Moult 031fd1baff Mostly stable implementation of mirror modifier 2019-11-26 11:49:14 +11:00
Dion Moult e643966191 Fix incorrect version replacement 2019-11-25 07:49:13 +11:00
Dion Moult ad7ef0be4f Implement experimental support for mirror modifier 2019-11-24 22:11:57 +11:00
Dion Moult b9e6665eab Fix reuse of representation maps. See #724 2019-11-24 18:12:33 +11:00
Thomas Krijnen 9bcd932bed fixes for macos catalina 2019-11-22 18:45:11 +01:00
Thomas Krijnen bfaa9ed5f9 Old OCC compatibility 2019-11-22 13:12:39 +01:00
Johan Luttun a2418cf260 added faceset feature (#714)
* added faceset feature

* indented code correctly

* better indentation on selected hunk
2019-11-22 12:58:30 +01:00
Dion Moult 69a6f5ee36 Minor fix to build script 2019-11-21 21:49:18 +11:00
Dion Moult e781df10b8 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2019-11-21 21:27:49 +11:00
Dion Moult f16861d5a9 Implement support for IfcLibraryInformation like a Git server 2019-11-21 21:27:32 +11:00
Dion Moult ad504ff081 Add sentences to exempt IFC files from BIMTester auditing 2019-11-21 09:46:37 +11:00
Dion Moult 9a18198988 Partial implementation of project library information 2019-11-21 07:09:08 +11:00
Dion Moult de64e3afc3 Reorder BIM property panels for better user experience 2019-11-21 06:48:22 +11:00
Dion Moult 7253b07b0c Fix broken select IFC type operator 2019-11-21 06:43:35 +11:00
Dion Moult b4f344627d Merge pull request #725 from s-leger/patch-5
Fix bug in boolean modifier support
2019-11-19 07:42:59 +11:00
Thomas Krijnen c385257c92 Add more warning related to rep usage. See #724 2019-11-18 12:59:48 +01:00
s-leger 859afaeece Fix negative right axis 2019-11-18 07:54:11 +01:00
s-leger e510d5a197 Fix resolve_boolean_modifier
Use matrix col for axis instead of row ..
Store product indexes in resolve_boolean_modifier
Remove get_product_from_raw_name
2019-11-18 07:51:09 +01:00
Dion Moult 33967953b7 Merge pull request #723 from s-leger/patch-5
Implement element voiding and clean up to PEP8
2019-11-18 15:55:14 +11:00
s-leger 34c2cd3c06 Update export_ifc.py
Fix function names, spaces, "type" shadowing 
improve vertices export using list comprehension
Check for empty material slot
2019-11-18 05:46:52 +01:00
s-leger 5cd6f44e73 Update export_ifc.py
Fix translation and axis of type_products
2019-11-18 04:23:41 +01:00
s-leger b75f1e1758 Merge branch 'v0.6.0' into patch-5 2019-11-18 04:07:26 +01:00
Stephen Leger f12e732854 fix merge error 2019-11-18 03:49:04 +01:00
Stephen Leger c9a5fbf221 merge 0.6 into patch-5 2019-11-18 03:45:24 +01:00
Dion Moult c930b8f155 Optimise select audited operator 2019-11-18 11:30:08 +11:00
Dion Moult 1e802bd0a3 Bugfix for BIMTester purge function to overwrite existing feature files 2019-11-18 10:48:50 +11:00
Dion Moult c46167073b Specifying an IFC diff now does an incremental import 2019-11-18 10:18:21 +11:00
Thomas Krijnen 5237f4a634 Add warning related to rep usage. See #724 2019-11-17 14:07:32 +01:00
s-leger b54be81408 Update export_ifc.py
fix typo in product
2019-11-17 14:00:05 +01:00
s-leger 39a5ecb6d2 Update export_ifc.py
Replace object by obj   - never override native var "object" 
Implements get_axis from matrix helper
2019-11-17 13:25:41 +01:00
s-leger a6128f118a Update export_ifc.py 2019-11-17 13:12:22 +01:00
Dion Moult 448a56afe9 Minor scale fix and code cleanup 2019-11-17 20:41:53 +11:00
Dion Moult 0d243beb36 Implement export for objects with non-uniform scale 2019-11-17 19:08:29 +11:00
s-leger 9e4092a050 Update export_ifc.py
Retrieve product from raw name
2019-11-17 03:15:46 +01:00
s-leger 44d4d9e563 process booleans
process booleans as RelFillsElements and RelVoidsElements
Fills are expected to be parent of holes so when you move a fill hole follow in real time
2019-11-17 02:52:20 +01:00
Dion Moult f249d55d3c Add version string to Makefile so users know their version 2019-11-17 12:40:14 +11:00
Dion Moult 85076dc697 Rename plugin to "BlenderBIM" 2019-11-17 12:29:02 +11:00
Dion Moult c074bd455f Ensure null values cannot be picked which result in bad IFC data 2019-11-17 11:59:35 +11:00
Dion Moult c04e8f98ec Refactor Blender property definitions in its own file 2019-11-17 11:38:56 +11:00
Dion Moult ef6dcd9291 Fix location for parented and constrained objects 2019-11-16 07:38:21 +11:00
s-leger c51c8602a3 Update ui.py
Dynamic enum cache
Update on change
Use direct propertygroup access in enum functions
2019-11-15 17:33:11 +11:00
Dion Moult 9659de6ebf Support export of people and organisations 2019-11-15 15:44:04 +11:00
Dion Moult 396979954f Add ability to purge tests of deleted elements 2019-11-15 15:43:33 +11:00
Dion Moult 836e350a15 Merge pull request #721 from s-leger/patch-3
Update ui.py
2019-11-15 15:03:59 +11:00
s-leger 0532048f37 Update ui.py 2019-11-15 04:59:51 +01:00
s-leger 78e18f0a01 Update ui.py
Fix for dynamic enum function signature
2019-11-15 04:53:58 +01:00
Dion Moult e1bf82b88e Merge pull request #720 from s-leger/patch-2
Class naming convention
2019-11-15 14:18:44 +11:00
Dion Moult ed0dffb409 Merge pull request #719 from s-leger/patch-1
Dynamic enumerators
2019-11-15 14:18:29 +11:00
s-leger c66a2589d8 Class naming convention
Fix naming convention for Panel classes
2019-11-15 01:48:20 +01:00
s-leger 7140b2c4e8 Dynamic enumerators
Dynamic enums require to hold proper reference to enum array. (may lead to access violation and strange ui behaviour)
Cleanup bpy.props.xxx and bpy.types.xxx
Fix in path for files with hardcoded "/"
BIM_PT_ prefixes for Panel classes
Use poll method for panels
2019-11-15 01:44:29 +01:00
Dion Moult 21e87095dc Minor fix 2019-11-14 07:51:47 +11:00
Dion Moult cfe030378a New UI to assign multiple swept solids per object 2019-11-13 18:48:12 +11:00
Dion Moult 556a476f9f Improved extrusion algorithm calculates extrusion profiles per face
Bugfixes incorrect extrusion axis locations, and also decouples object matrix_world from the extrusion axis, allowing you to have multiple extrusion per object in the future.
2019-11-12 17:57:59 +11:00
Dion Moult 49efce7eca New option to ignore site, to import incorrectly geolocated IFCs
This behaviour occurs extensively in IFC files coming from Revit
2019-11-08 17:24:15 +11:00
Dion Moult c425b44ca9 Store generated GlobalId values for parametric geometry 2019-11-08 16:45:39 +11:00
Dion Moult af16e64fd9 Add UI option to import curves and tolerate invalid IfcSite objects 2019-11-08 16:02:57 +11:00
Dion Moult 60b3daf686 Create legacy features to export materials into broken BIM programs like Revit 2019-11-08 15:10:51 +11:00
Dion Moult 80dccfeb54 Add support for inner curves in mesh extrusions and fix position bug 2019-11-08 12:39:34 +11:00
Thomas Krijnen c89d268986 More elaborate shape fixing on face surface 2019-11-07 14:04:45 +01:00
Dion Moult ee7956d921 Add support for plan representations and all target views 2019-11-07 21:49:14 +11:00
Dion Moult 609ef5f3a7 Add support for exporting survey points geometry 2019-11-07 17:59:37 +11:00
Dion Moult 0477910fc0 Add support for export of imperial units 2019-11-07 16:40:57 +11:00
Dion Moult 85a3a97d13 Fix import of conversion based units 2019-11-07 14:20:54 +11:00
Dion Moult 9eb035e6f5 Fix export bug with uncast attribute data types 2019-11-07 09:11:25 +11:00
Thomas Krijnen 2a407f007c Document fontconfig dependency for occt 7.4 2019-11-06 14:05:05 +01:00
Thomas Krijnen 5992cdfdaf Build script changes for occt 7.4 2019-11-06 12:03:32 +01:00
Dion Moult 0d7d843fc9 Support extruded vector curves and tilts 2019-11-06 17:37:51 +11:00
Dion Moult fae405bfe0 Add support for importing curves, such as for survey point curve sets 2019-11-06 11:10:51 +11:00
Thomas Krijnen c59c74aeed Confitionally select num_bytes, see #699 2019-11-05 17:23:13 +01:00
Thomas Krijnen e36357d381 Log error about missing triangulation 2019-11-05 15:47:02 +01:00
Thomas Krijnen 8d96f40934 Check for inner wires before reinitializing face builder 2019-11-05 15:27:39 +01:00
Thomas Krijnen a1253b004d Fixes for closed/non-periodic nurbs curve edges #586 2019-11-05 15:13:34 +01:00
Thomas Krijnen ee79401a34 Correct attribute_filter notice 2019-11-05 14:43:37 +01:00
Dion Moult 37990310eb Experimental half-broken support for curves added 2019-11-05 21:49:17 +11:00
Dion Moult d806c6ab55 Cull-backfaces and cache geometry creation in IfcDoc 2019-11-02 20:08:34 +11:00
Thomas Krijnen ed013db011 throw exception on invalid nested aggregates 2019-11-01 16:11:46 +01:00
Thomas Krijnen 5fcee9dfe5 spherical toroidal surface 2019-11-01 16:11:26 +01:00
Thomas Krijnen 159ce931b4 Break up sweeps along adjacent non-linear segments. 2019-11-01 15:06:04 +01:00
Dion Moult 2d0d0ed786 New UI to add and remove classifications 2019-11-01 17:44:10 +11:00
Dion Moult 635ad552d3 New UI to create, edit, and save aggregates 2019-11-01 16:32:11 +11:00
Thomas Krijnen d3eab88ab9 Create FUNDING.yml 2019-10-30 08:31:30 +01:00
Dion Moult c3a36b7cdb Support cartesian transformations on mapped representations on import 2019-10-30 13:15:03 +11:00
Thomas Krijnen f231db0aff Remove newlines and other characters from material names 2019-10-29 10:06:02 +01:00
Dion Moult 0a610f88e0 New UI to set features dir and diff JSON file 2019-10-29 18:13:10 +11:00
Dion Moult e2764c9764 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2019-10-28 21:02:03 +11:00
Dion Moult d6ef64aef4 Proof of concept for IFC construction documentation 2019-10-28 21:01:32 +11:00
Dion Moult cf454c6306 IFC cutting tool now supports multiple files and classes 2019-10-28 20:59:16 +11:00
Dion Moult 18daa6aacd Allow gbXML export of simple objects that don't have vertex groups
Also record space names
2019-10-28 17:53:13 +11:00
Dion Moult 55717756e6 Create IFC Diff tool, showing added, removed, and modified.
It produces a JSON output of exactly what changed. It requires a patched version of the DeepDiff library, which I will provide.
2019-10-25 16:42:49 +11:00
Dion Moult 852df6e2ce Some bugfixes and package IFC COBie for alpha release 2019-10-25 08:22:16 +11:00
Dion Moult bc2bce8fae Add experimental support for openings in gbXML export 2019-10-23 13:29:25 +11:00
Dion Moult e5efa2803a Fix BIMTester file overwrite bug and template re-reading. 2019-10-23 13:28:18 +11:00
Dion Moult d3ccd9ee61 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2019-10-23 11:33:05 +11:00
Dion Moult 593af0509f Optimise import to only create shapes once. Much faster. 2019-10-23 11:32:30 +11:00
Thomas Krijnen 60073da049 Update validate.py 2019-10-22 10:49:07 +02:00
Dion Moult 681a3c3a5c Test new way of getting element position matrix in import 2019-10-22 15:54:38 +11:00
Dion Moult f63c0293bf IFC import now supports IFC attributes 2019-10-21 17:44:06 +11:00
Dion Moult 7e8cda6c12 Add interface to add or remove documents to objects 2019-10-21 15:31:10 +11:00
Dion Moult 1bdb64d9e7 Refactor properties to have prefix to prevent name clashes with other addons 2019-10-21 14:56:40 +11:00
Dion Moult e2ada7ce90 Implement IFC import mesh reuse for mapped representations 2019-10-21 14:33:51 +11:00
Dion Moult 2751b7728f Add new feature to select object by GlobalId 2019-10-19 17:38:25 +11:00
Dion Moult 9ee708fbe6 Create UI to input georeferencing variables 2019-10-19 15:15:42 +11:00
Dion Moult 851acca4b2 Support custom psets 2019-10-19 14:45:07 +11:00
Dion Moult 4cddd95337 Fix bug where blank predefined types could be added by accident 2019-10-19 13:59:05 +11:00
Dion Moult 5a7acda57d Allow to add attributes from a drop down for ease of use 2019-10-19 13:48:07 +11:00
Dion Moult 62f04fc9a6 Move pset definitions into a property group and create a UI for it 2019-10-19 11:36:29 +11:00
Dion Moult 4dbe7d92aa Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2019-10-19 10:47:15 +11:00
Dion Moult c79db0380d Create quick project setup button for convenience 2019-10-19 10:47:00 +11:00
Demetrio92 e6cae6e7b9 minor bugfix
should be OR, not AN;  color is spelled without U everywhere else; exception call itself was breaking
2019-10-17 14:14:15 +02:00
Dion Moult 791be5006b Couple of minor fixes to make importing more robust 2019-10-17 18:47:01 +11:00
Dion Moult 240b642d6d Test light schedule data for gbxml 2019-10-17 18:46:06 +11:00
Dion Moult 574d9a3036 Add attributes interface 2019-10-16 23:17:48 +11:00
Dion Moult 34e5dac549 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2019-10-16 07:23:39 +11:00
Dion Moult 1fc06da7a2 Create UI to assign and remove Psets 2019-10-16 07:23:03 +11:00
Thomas Krijnen 4000fef4c7 Don't apply too many half space subtraction operands at once 2019-10-15 15:06:51 +02:00
Thomas Krijnen 503029733c Fix face-face distance calc and hardcode tolerance independent of precision. 2019-10-15 14:14:50 +02:00
Thomas Krijnen 734c456fa5 Properly adjust wire intersection tolerance based on vertex clustering 2019-10-15 12:53:44 +02:00
Thomas Krijnen 5b81d7a0c1 Fix previous commit 2019-10-15 10:39:58 +02:00
Thomas Krijnen f9b76ce022 Don't write materials without diffuse color in geom server 2019-10-15 10:38:49 +02:00
Dion Moult fa3431f983 Fix bug with Revit where Revit expects normalised unit vectors.
I think IFC doesn't require it, but fine, we'll play with Revit.
2019-10-15 18:11:06 +11:00
Dion Moult 2d673acb1d Styled items repeat per product, so this should be a list, not a dict 2019-10-15 18:10:32 +11:00
Dion Moult 05c05b5700 Purge old BIMTester files 2019-10-15 16:30:10 +11:00
Dion Moult 58b7c42fc5 Create features template 2019-10-15 11:58:26 +11:00
Dion Moult f78fb0a4f0 Package up BIMTester - basically a super lightweight wrapper around Behave and a JUnit HTML formatter. 2019-10-15 11:19:44 +11:00
Dion Moult 2b34d66ca4 Include Behave configuration 2019-10-14 18:27:17 +11:00
Dion Moult f21fac9edc Change build url 2019-10-13 20:30:01 +11:00
Dion Moult 15a93b1651 Merge branch 'v0.6.0' of github.com:IfcOpenShell/IfcOpenShell into v0.6.0 2019-10-13 20:23:53 +11:00
Dion Moult b7ffd4e350 Fix makefile to build just one plugin, since import and export are merged now 2019-10-13 20:20:48 +11:00
Thomas Krijnen 833d16404f Update attribute filter in accordance with help string 2019-10-13 07:45:19 +02:00
Dion Moult c55dbfc7fa Implement UI to toggle wireframe / swept solid, and assign profiles and extrusions
Also allow file browser to select a location for an external material
2019-10-13 15:36:49 +11:00
Dion Moult 4476cce08c Create interface panel to select external materials 2019-10-13 11:14:49 +11:00
Dion Moult 3db6f42f04 Add latest features into readme 2019-10-13 09:46:12 +11:00
Dion Moult 4732dae384 Allow to define surface styles via object, rather than by material 2019-10-12 22:20:09 +11:00
Dion Moult a9397e23ba Refactor material creation to follow IFC data, not rely on ifcopenshell geom, since we want to retain a bunch of smart IFC data later 2019-10-12 20:09:41 +11:00
Dion Moult c5645a1084 Prevent infinite loops on broken spatial trees 2019-10-12 18:54:12 +11:00
Dion Moult 556766bf2b Spatial elements should check both class and name to prevent issue where two elements have the same name 2019-10-12 18:53:40 +11:00
Dion Moult 33bea4bf6c Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2019-10-11 17:24:53 +11:00
Dion Moult bf31ced530 Create JUnit to HTML converter 2019-10-11 17:23:54 +11:00
Dion Moult 642fd08d1f Define a few more steps 2019-10-11 17:23:20 +11:00
Dion Moult 9d0bbf52a2 Don't include IfcSpace since there can be _lots_ in a large file, and ifc spaces actually have geometry 2019-10-10 21:13:00 +11:00
Dion Moult 9056fd7fd1 Remove some abstract entities 2019-10-10 21:12:40 +11:00
Dion Moult 7513906aaa Implement basic Gherkin-based QA system 2019-10-10 18:29:22 +11:00
Dion Moult 7b15edb44c Implement CSV and XLS writer with logging features for COBie 2019-10-09 14:44:10 +11:00
Dion Moult e25bdd009b Remove unnecessary files 2019-10-09 10:45:30 +11:00
Dion Moult 72f09e6a22 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2019-10-09 10:13:37 +11:00
Dion Moult 7b8a4501e6 Bug #663 - Implement support for COBie issues spreadsheet 2019-10-09 10:12:38 +11:00
Dion Moult ba443232b3 Bug #663 - Implement support for COBie coordinates spreadsheet 2019-10-09 10:01:41 +11:00
Dion Moult 71153abaf6 Bug #663 - Implement support for COBie attributes spreadsheet 2019-10-09 09:43:22 +11:00
Dion Moult d9ebd2d08e Merge experimental new importer plugin into export plugin 2019-10-08 23:05:27 +11:00
Dion Moult 792c9b65b1 Build "select by class / type" feature in the UI panel 2019-10-08 22:09:39 +11:00
Dion Moult 202a4c0a08 Bug #663 - Implement support for COBie documents spreadsheet 2019-10-08 18:35:56 +11:00
Dion Moult 8cb8e22cdc Bug #663 - Implement support for COBie impacts spreadsheet 2019-10-08 18:16:32 +11:00
Dion Moult 38972d7ee4 Bug #663 - Implement support for COBie jobs spreadsheet 2019-10-08 17:33:14 +11:00
Dion Moult 959609db99 Bug #663 - Implement support for COBie resources spreadsheet 2019-10-08 16:56:37 +11:00
Dion Moult e3d24856b9 Bug #663 - Implement support for COBie spares spreadsheet 2019-10-08 16:51:56 +11:00
Dion Moult 6513cb6a88 Bug #663 - Implement support for COBie connections spreadsheet 2019-10-08 16:14:00 +11:00
Dion Moult 77578b0ade Bug #663 - Implement support for COBie assemblies spreadsheet 2019-10-08 15:45:23 +11:00
Dion Moult 32f51086ca Bug #663 - Implement support for COBie systems spreadsheet 2019-10-08 14:52:30 +11:00
Dion Moult f426f2c0af Bug #663 - Implement support for COBie components spreadsheet 2019-10-08 14:32:10 +11:00
Dion Moult a6916e1f59 Bug #663 - Implement support for COBie types spreadsheet 2019-10-08 13:45:48 +11:00
Dion Moult 8f757810e7 Bug #663 - Implement support for COBie zones spreadsheet 2019-10-08 12:22:05 +11:00
Dion Moult 2b786ef945 Bug #663 - Implement suport for COBie spaces spreadsheet 2019-10-08 11:47:49 +11:00
Dion Moult dc7fb6eb98 Bug #663 - Implement support for COBie floors spreadsheet 2019-10-08 10:54:32 +11:00
Dion Moult 3ff9af1421 Bug #663 - Implement support for COBie facilities spreadsheet extraction 2019-10-08 10:18:39 +11:00
Dion Moult fc44b4e0d4 Allow user option to export without representations 2019-10-07 22:23:31 +11:00
Dion Moult 0ebb33da18 Improve error messaging for incorrect psets 2019-10-07 22:14:52 +11:00
Dion Moult eceba6932c Fix date in dist filename 2019-10-07 21:20:39 +11:00
Dion Moult 1f6f7f570e Refactor operators into their own file and provide logging capabilities 2019-10-07 21:11:11 +11:00
Dion Moult 23d65da0e2 Add makefile 2019-10-06 19:59:41 +11:00
Dion Moult 824b30b3da Bundle and implement basic UI with addon 2019-10-05 21:15:53 +10:00
Dion Moult 90fee4ef7f Throw in bootstrap file for when you don't want to reload blender to test the plugin 2019-10-04 17:28:57 +10:00
Dion Moult adeb3dea61 Include utility to merge materials by diffuse colour to clean up bad IFC files 2019-10-04 17:26:15 +10:00
Dion Moult 75f254d162 Extract definitions and descriptions for use in plugin 2019-10-04 17:24:49 +10:00
Dion Moult 00aad53181 Bug #663 - Implement experimental support for cobie IFC->CSV conversion for contact information 2019-10-04 17:22:03 +10:00
Dion Moult bf7005acfc Add experimental support for gbxml - make importer import spaces, as it is very important for energy modeling 2019-10-04 17:20:19 +10:00
Dion Moult e37c882fe2 Experimental code for a user interface 2019-10-03 22:11:05 +10:00
Dion Moult 624888adab Half-implement experimental support for space boundary relationships 2019-10-03 17:56:45 +10:00
Dion Moult 144df86380 Throw in experimental import and bulk rename script 2019-10-01 18:37:33 +10:00
Dion Moult 50c51530e7 Add pset examples 2019-10-01 18:03:16 +10:00
Dion Moult 7312b8cbe7 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2019-10-01 18:01:55 +10:00
Dion Moult 4e878f5848 Move pset into pset dir 2019-10-01 18:00:54 +10:00
Thomas Krijnen d99b5fb2f9 Merge branch 'master' into v0.6.0 2019-09-30 09:11:04 +02:00
Dion Moult 51e0097db1 Add prepackaged installation instructions. 2019-09-30 10:10:50 +10:00
Dion Moult 1cac87fa50 Bump readme with new features 2019-09-30 08:07:56 +10:00
Dion Moult e688f781f5 Parenting is reserved for type assignment, whereas a named child of constraint now specifys a nesting relationship
This allows you to have a defined by type and a rel nests at the same time. Using parenting for types is the more common operation, whereas nesting is a less frequent operation.
2019-09-29 22:41:26 +10:00
Dion Moult 2f2c40406f Implement support for window attributes 2019-09-29 22:29:06 +10:00
Dion Moult a406f3d78a Implement support for door attributes 2019-09-29 22:12:51 +10:00
Dion Moult 22d35cf89a Fix placement rel to for nested elements for a start. 2019-09-28 23:43:50 +10:00
Dion Moult 8e2723951d Fix #670 - fix compilation with OCE and C++11 range based for loop 2019-09-28 23:14:08 +10:00
Dion Moult 4d4c111d5f Implement nested relationships between elements 2019-09-28 14:08:09 +10:00
Dion Moult 0c294a58bf Implement support for material constituent sets 2019-09-28 12:41:51 +10:00
Dion Moult 81864def9e Implement support for material layer sets 2019-09-28 10:54:10 +10:00
Thomas Krijnen 6771c91224 Remove duplicate swig dependency statement 2019-09-27 15:45:48 +02:00
Thomas Krijnen 596e13b24c Add null check on trimmed curve 2019-09-27 15:12:35 +02:00
Dion Moult a07c2cb1f8 Minor fix to packaging 2019-09-27 08:43:49 +10:00
Thomas Krijnen ae6dfce7e3 Add an excemption for the requirement of boolean op result to be manifold 2019-09-26 15:14:23 +02:00
Dion Moult 1f371f3319 Create Blender export plugin 2019-09-26 21:55:30 +10:00
Dion Moult a41e7fc298 Add SVG sectioning utility 2019-09-26 07:37:08 +10:00
Dion Moult 739c5fb326 Roundtrip export of swept solid for basic extrusions for programs like Revit 2019-09-20 09:15:32 +10:00
Dion Moult 8b40b9944f Provide support for center of gravity representations 2019-09-18 11:30:07 +10:00
Dion Moult 19d587d17c Allow generated mesh representations such as bounding box 2019-09-17 12:56:43 +10:00
Dion Moult 45678c8536 Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2019-09-17 11:21:05 +10:00
Dion Moult c21c9c24f8 Handle materials which don't have nodes 2019-09-17 11:20:22 +10:00
Dion Moult 32588c63eb Bump readme with new features 2019-09-16 19:36:44 +10:00
Dion Moult 611f0e7248 Minor fixes to representation detection 2019-09-16 17:25:00 +10:00
Dion Moult 2d408eb985 Add support for footprint and reference subcontexts 2019-09-16 16:53:34 +10:00
Dion Moult ac166691c4 Allow support for clearance geometry 2019-09-16 16:47:48 +10:00
Dion Moult 7516177304 Add support for multiple representations such as body and axis 2019-09-16 16:28:26 +10:00
Birger Brekke f8d713a412 fixup! Use model-offset in IfcGeom::Kernel and add model-rotation 2019-09-16 07:54:10 +02:00
Dion Moult 6d36ee3f53 Relate documents and classifications to project itself 2019-09-16 13:16:58 +10:00
Birger Brekke e6606e363a Use model-offset in IfcGeom::Kernel and add model-rotation
Applying model-offset in IfcGeom::Kernel makes it work
independently of the serializer.

`model-rotation` was also added to support rotation in the same
manner as `model-offset` supports offset.
2019-09-13 16:09:11 +02:00
Dion Moult dee8af6ec9 Implement associations to qualitative objective constraints 2019-09-11 16:50:27 +10:00
Dion Moult 00af240915 Implement rel associate classifications for objects and types 2019-09-11 14:47:53 +10:00
Dion Moult 730057ed4d Allow objects and types to be associated with external documents 2019-09-11 12:44:36 +10:00
Dion Moult 675ba205ef Bump readme with new features 2019-09-11 09:23:02 +10:00
Dion Moult 9ab13a3e0c Maintain GlobalIds for type products 2019-09-10 20:11:58 +10:00
Dion Moult 9b7ea1e83c Allow for psets to be assigned to types, and pset overrides 2019-09-10 20:11:37 +10:00
Dion Moult 2c84a07bdc Don't hardcode unit definitions 2019-09-10 17:08:45 +10:00
Dion Moult dd1ddfcd8e Merge branch 'v0.6.0' of https://github.com/IfcOpenShell/IfcOpenShell into v0.6.0 2019-09-10 05:26:43 +01:00
Dion Moult cd21611646 Define diffuse colour, and give possibility for externally defined material URI 2019-09-10 14:18:50 +10:00
Dion Moult 360767a6eb Bump feature list 2019-09-09 22:00:12 +10:00
Dion Moult 2bf89f11c8 Minor code cleanup 2019-09-09 15:11:32 +10:00
Dion Moult 018123aa21 Export basic material information 2019-09-09 15:11:07 +10:00
Dion Moult 0bf149c894 Fix minor bug where libraries don't exist 2019-09-09 12:48:42 +10:00
Dion Moult b0797db321 Maintain GlobalIds for projects and spatial structures 2019-09-08 20:51:59 +10:00
Dion Moult 58e870d185 Relate objects to psets 2019-09-08 19:02:00 +10:00
Dion Moult 70ec98a9e0 Add ability to detect data types from property set templates so that psets are easier to insert 2019-09-08 18:30:16 +10:00
Dion Moult 22bb5cc276 Relate types to their respective project library 2019-09-08 14:55:23 +10:00
Dion Moult cecb623e76 Prevent unnecessary duplicate creation of the same representation 2019-09-08 11:24:41 +10:00
Dion Moult 04aa0ad04d Support IfcProjectLibrary as related to IfcProject 2019-09-08 11:07:40 +10:00
Dion Moult 58be8e95b0 Bump readme with new features 2019-09-07 22:32:41 +10:00
Dion Moult 5f8a792cf4 Allow the creation and storage of map conversions and CRSes 2019-09-07 22:27:52 +10:00
Dion Moult 5dbbe174de Allow wireframe geometry exports 2019-09-07 08:05:42 +10:00
Dion Moult 9908e5cf05 Clean up trailing whitespace 2019-09-07 08:04:49 +10:00
Dion Moult 3d11a98eef Fix #665 - Display curves too, not just solid elements 2019-09-07 07:40:16 +10:00
Dion Moult 5ce8917c82 Allow type definitions which have no representation, to be used as simply ways to inherit properties 2019-09-05 21:38:52 +10:00
Dion Moult 9c11e6bd09 Update readme with new features 2019-09-05 18:50:32 +10:00
Dion Moult dd3df2258d Allow settings to toggle export of representations and quantities 2019-09-05 17:18:13 +10:00
Dion Moult 826280f35c Add support for multiple collection instances 2019-09-05 12:04:34 +10:00
Dion Moult 5536bd5d59 Minor fix where qto calculator wasn't passed in, whoops 2019-09-05 12:03:07 +10:00
Krzysztof Trzciński 90bf32c342 Fix reusing meshes and mesh naming 2019-09-05 07:14:08 +10:00
Dion Moult d917e738db Merge pull request #662 from elmopl/blender_ifc_280rc1
Fix reusing meshes and mesh naming
2019-09-05 07:13:16 +10:00
Krzysztof Trzciński 42307972a8 Fix reusing meshes and mesh naming 2019-09-04 21:02:47 +01:00
Dion Moult bd9aa18053 Record and remember globalids between exports 2019-09-04 17:46:58 +10:00
Dion Moult 3074242aa0 Add basic support for some forms of quantity take-off 2019-09-04 16:53:10 +10:00
Dion Moult 684e687b6a Simplify unnecessary code to get representations 2019-09-04 11:58:18 +10:00
Krzysztof Trzciński 1dff84ace3 Fix clash of mesh names (fixes #661) 2019-09-04 09:01:09 +10:00
Krzysztof Trzciński 99d8e96a35 Add support for collections 2019-09-04 09:01:00 +10:00
Krzysztof Trzciński c3a3cbee3f Fix filename -> ifcopenshell.file 2019-09-04 09:00:41 +10:00
Krzysztof Trzciński 748f826418 Introduce defaultdict instead of checks 2019-09-04 08:58:48 +10:00
Dion Moult 032a4743ac Merge pull request #641 from elmopl/blender_ifc_280rc1
Blender ifc 2.80rc1 collections enhancement
2019-09-04 08:55:46 +10:00
Krzysztof Trzciński 7c99294ba8 Fix clash of mesh names (fixes #661) 2019-09-03 17:57:39 +01:00
Dion Moult 1665d8e0f6 Merge remote-tracking branch 'blender-bim-ifc/master' into v0.6.0 2019-09-03 21:06:15 +10:00
Dion Moult 6e9f24af66 Move to subdir 2019-09-03 21:02:57 +10:00
Dion Moult 359b55aeab Add feature about IfcRelAggregates to readme 2019-09-03 20:55:10 +10:00
Dion Moult b1dda0a679 Support element decomposition through IfcRelAggregates 2019-09-03 20:52:22 +10:00
Dion Moult a7286e5527 Add a timer for export times 2019-09-03 20:51:58 +10:00
Dion Moult c055a8e9e8 Allow objects to be an arbitrary collection as long as some parent is part of the spatial tree 2019-09-03 20:51:39 +10:00
Dion Moult 8c0a24c463 Add screenshots 2019-09-02 21:38:14 +10:00
Dion Moult 164c249a48 Add instruction about adding to path 2019-09-02 21:28:53 +10:00
Dion Moult adb3a08638 Bump readme with demo blend file 2019-09-02 21:27:24 +10:00
Dion Moult cba28fbb72 Minor fix to template so that it isn't syntatically incorrect, at least.
We'll fix the hardcoded variables later.
2019-09-02 21:18:22 +10:00
Dion Moult 4de35bc252 Fix missing data for type products 2019-09-02 21:16:21 +10:00
Dion Moult 27407b8642 Parse array modifiers and create instances. Take into account local vs global rotation. 2019-09-02 19:43:55 +10:00
Dion Moult 3490b1b388 Report exceptions about spatial structure 2019-09-02 19:43:11 +10:00
Dion Moult 46c5cd4ee2 Describe newly coded features in readme 2019-09-01 22:17:49 +10:00
Dion Moult 73b387011d Add example pset 2019-09-01 22:03:40 +10:00
Dion Moult 931b00d651 Add types schema 2019-09-01 22:03:33 +10:00
Dion Moult c461a483b3 Now allow the creation of psets in a crude form 2019-09-01 22:03:02 +10:00
Dion Moult 36a74a212c Only parse selected types, not all types in the type collection 2019-09-01 19:30:58 +10:00
Dion Moult 291a54d07e Support IfcRelDefinesByType 2019-09-01 18:40:20 +10:00
Dion Moult 6a5bedc02e Support exporting product types 2019-09-01 17:23:48 +10:00
Dion Moult e11d4e4e4c Support custom attributes for products 2019-09-01 13:22:26 +10:00
Dion Moult fdb6af4ce3 Clean up files I should've put in gitignore 2019-09-01 11:46:11 +10:00
Dion Moult 1c28055afe Support object instancing, so product representations are reused if the mesh data is the same 2019-09-01 11:45:32 +10:00
Dion Moult 72fa983e81 Allow export of any product class 2019-09-01 11:21:24 +10:00
Dion Moult bb29a493c7 Don't hardcode spatial structure elements. Make a sensible assumption instead that all collections are either contexts or spatial structures. 2019-09-01 10:33:06 +10:00
Dion Moult 1c647c5365 Print errors in case the name cannot be detected 2019-09-01 10:32:22 +10:00
Dion Moult 6b53ebdc5e Hardcode context names, since there are unlikely to be many 2019-09-01 10:27:05 +10:00
Dion Moult c2cb11c594 Remove useless function 2019-09-01 10:26:54 +10:00
Dion Moult 153d6fe337 Use an IFC4 template. Don't let 2X3 hold us back! 2019-09-01 10:26:33 +10:00
Dion Moult 11e187fc76 We don't need this ifc_schema class, it seems 2019-09-01 10:14:31 +10:00
Dion Moult fa38317438 Whitespace cleanup 2019-09-01 09:45:57 +10:00
Dion Moult 7c2d640106 Refactor representation creation into its own function 2019-09-01 09:44:06 +10:00
Dion Moult 64b23393a0 Remove unnecessary comment 2019-09-01 09:43:36 +10:00
Dion Moult ae9fce8c45 Support dynamic contexts and trees of spatial structures 2019-08-31 23:51:53 +10:00
Dion Moult bd35a9924e Refactor into a class. It's gonna get big! 2019-08-31 17:37:53 +10:00
Dion Moult 2f4e82e0b9 Rename to sensible name 2019-08-31 17:16:16 +10:00
Dion Moult e9649a5217 Basic geometry export 2019-08-29 23:11:12 +10:00
gpioto 98f4c8518e Casting default timestamp template to integer
The documentation of IFC indicates that the timestamp must be of type Integer. (https://standards.buildingsmart.org/IFC/DEV/IFC4_2/FINAL/HTML/link/ifctimestamp.htm)
If not, it cause some problems importing the generated IFC file in some platforms
2019-08-28 09:01:13 +02:00
Thomas Krijnen 75b24c2352 Put maximum length on layerset wall end point intersection 2019-08-21 11:59:30 +02:00
Thomas Krijnen 16ce1f0823 Make sure layerset fold is parallel to other wall axis curve 2019-08-16 10:42:48 +02:00
Thomas Krijnen af1853de04 Iterative epsilon in faceset helper 2019-08-09 17:48:56 +02:00
Thomas Krijnen b3711ad8cb thread_local define for clang 2019-08-09 10:05:49 +02:00
Thomas Krijnen 188b20533b Only pull when on a branch 2019-08-03 14:48:01 +02:00
Thomas Krijnen f32e034963 Merge pull request #639 from aothms/multithreaded
Multithreaded
2019-08-02 15:37:00 +02:00
Thomas Krijnen fd3469029f -pthread on unix 2019-08-02 14:55:55 +02:00
Thomas Krijnen 88a5dc3053 fix po::value 2019-08-02 13:27:33 +02:00
Thomas Krijnen 6e4a692de3 Threads in python app 2019-07-19 15:55:22 +02:00
Krzysztof Trzciński e450101a12 Add support for collections 2019-07-16 19:31:16 +01:00
Krzysztof Trzciński 3f3b548d74 Fix filename -> ifcopenshell.file 2019-07-16 18:33:54 +01:00
Krzysztof Trzciński 6284b3960d Introduce defaultdict instead of checks 2019-07-16 18:30:03 +01:00
Thomas Krijnen a6835360e4 Guarantee get_decomposing(IfcProject*) == nullptr 2019-07-12 10:43:35 +02:00
Thomas Krijnen 4ec9ab52f1 Remove IfcFileWithSchema 2019-07-10 16:34:57 +02:00
Thomas Krijnen 7ee6cdeeab Add missing header 2019-07-10 16:17:11 +02:00
Thomas Krijnen c9530999f7 Update CMakeLists.txt 2019-07-10 15:44:38 +02:00
Thomas Krijnen 2154e24af1 GLTF_SUPPORT depends on BUILD_CONVERT 2019-07-10 14:35:56 +02:00
Thomas Krijnen 1cd2287d86 Cleanup concurrently created breps and triangulations 2019-07-09 16:34:35 +02:00
Thomas Krijnen 40937b3c72 Write progress for threaded conversion 2019-07-09 16:12:12 +02:00
Thomas Krijnen 3bcced7baa Some fixes to threading work 2019-07-09 16:00:29 +02:00
Thomas Krijnen 3ebca0516e Implement multi_threaded implementation in Iterator 2019-07-03 12:10:27 +02:00
Thomas Krijnen ae2feb2848 Merge remote-tracking branch 'origin/pr/638' into multithreaded 2019-07-02 15:21:46 +02:00
Thomas Krijnen 2a447039d0 Merge remote-tracking branch 'sander/multithreaded' into multithreaded 2019-07-02 15:21:24 +02:00
You Yue 0dec407dbe Last commit for multithreading, Airsquire implementation 2019-07-02 12:30:40 +02:00
You Yue a286598e55 Sander boer's change for multithreading
1. Added multithread for create element
2. Added support function in IfcConvert.cpp for multithreading at bottom
2019-07-02 12:10:08 +02:00
Thomas Krijnen 869cc25061 rollback prcre version due to https://github.com/KhronosGroup/OpenCOLLADA/issues/570 2019-07-01 11:15:12 +02:00
Thomas Krijnen b4ce5be86d Fix error after merge 2019-06-30 15:46:36 +02:00
Thomas Krijnen 1341be223b Merge branch 'master' into v0.6.0 2019-06-30 10:52:21 +02:00
Thomas Krijnen 1103f545a2 Double braces for older version of g++ 2019-06-30 10:51:45 +02:00
Thomas Krijnen 51cf52c388 Build script: Don't use wget or curl, just urlretrieve 2019-06-30 09:44:40 +02:00
Thomas Krijnen c29cc87660 Revert cmake version due to build errors, more careful json install 2019-06-28 08:38:24 +02:00
Thomas Krijnen 839b5a2699 Minor cleanups, 4x1 and 4x2 geom lib, granular schema macros 2019-06-26 13:50:46 +02:00
Thomas Krijnen 73f7c34c8d Update build-all.py 2019-06-26 12:44:56 +02:00
Andrej Tibaut 636b2aafdf 1) Added support for IFC4x1 (see issue https://github.com/IfcOpenShell/IfcOpenShell/issues/504#issuecomment-505051675).
2) New build parameters (flags) introduced for use of IFC4x1 and IFC4x2: USE_IFC4X2 (for use of IfcBridge), USE_IFC4X1 (for use of IfcAlignment)

This explains new parameters (flags):
#ifdef USE_IFC4X2
#include "../ifcparse/Ifc4x2enum.h"
#elif USE_IFC4X1
#include "../ifcparse/Ifc4x1enum.h"
#elif USE_IFC4
#include "../ifcparse/Ifc4enum.h"
#else
#include "../ifcparse/Ifc2x3enum.h"
#endif

3) Added comment block  "This file is part of IfcOpenShell. ..." at the beggining of the Ifc4x2* files.
2019-06-26 12:44:26 +02:00
Andrej Tibaut cee2c4e748 Reverted from SWIG_VERSION=4.0.0 back to SWIG_VERSION=3.0.12 because of https://github.com/IfcOpenShell/IfcOpenShell/issues/582#issuecomment-497789849 as recommended by @aothms. 2019-06-26 12:44:26 +02:00
Andrej Tibaut e7a08a3de6 #634 solved:
- new method to_pystring(...) added to solve the TypeError: Can't mix strings and bytes in path components:
- import "urlib" changed to "urlib.urlretrieve"
- JSON version extracted to a constant
2019-06-26 12:44:26 +02:00
Andrej Tibaut 827c6ac6b4 Motivated by issue #608 to improve the method def git_clone(...) to the def git_clone_or_pull_repository(...).
Also, dependencies versions were updated.
2019-06-26 12:44:26 +02:00
Andrej Tibaut d371f1a6be UnicodeDecodeError problem solved (#630)
* UnicodeDecodeError problem solved

UnicodeDecodeError problem described in #626 solved.

* UnicodeDecodeError solved (2)

UnicodeDecodeError problem described in #626 changed (fname replaced with fn) and solved.
2019-06-21 11:43:53 +02:00
Otso Alho a851a25ddc catch Standard_ConstructionError when serialising xml attributes 2019-06-21 11:21:33 +02:00
Thomas Krijnen 35160e5a94 Update some code comments 2019-06-19 12:41:54 +02:00
Mathias Artus a9a6cfabca Added support for Ifc 4x2 2019-06-19 11:31:11 +02:00
Thomas Krijnen ecb0fee0cd Fix latebound enumeration writing in IfcConvert 2019-06-18 14:28:57 +02:00
Thomas Krijnen 12e9f7b941 Merge branch 'master' into v0.6.0 2019-06-15 15:24:53 +02:00
ninichki 443b8c2079 Boolean Operands like ST_SHAPELIST should not append all shapes 2019-06-14 17:33:30 +02:00
Thomas Krijnen 826316cb2b Remove duplicate faces in faceset_helper. Fixes #600 2019-06-14 11:32:59 +02:00
Thomas Krijnen 491dc57098 Update README.md 2019-06-14 10:00:42 +02:00
Otso Alho 19ed074b4a inverse thicknesses 2019-06-07 11:17:51 +02:00
Otso Alho 2cfe74ce09 reverse styles also when reversing surfaces 2019-06-07 11:17:51 +02:00
Thomas Krijnen b0b844ea5a Provide node names in gltf serializer 2019-06-07 10:38:52 +02:00
Thomas Krijnen 2d0812d46e Update test file submodule 2019-06-05 16:59:04 +02:00
Thomas Krijnen f5b7d0db59 Remove additional fuzz markup on halfspace operands and initially process with smaller fuzz. Fixes #601 2019-06-05 16:58:08 +02:00
Thomas Krijnen 68068cb816 Fix merge error: bring back assignment to Logger::max_severity 2019-06-04 17:24:59 +02:00
Thomas Krijnen 40d2c237fc Merge master 2019-06-04 17:07:35 +02:00
Thomas Krijnen 7e089ab8b5 Fix cleanup of temp files in case of failed initialization 2019-06-04 17:06:13 +02:00
Thomas Krijnen 8ee86f9968 Clean up glb tempfiles in case of error 2019-06-04 17:03:58 +02:00
Thomas Krijnen 2590bd01d5 Fix gltf max accessor meta-data 2019-06-04 16:55:19 +02:00
Thomas Krijnen ef9b9e743f Typo 2019-06-04 16:34:57 +02:00
Thomas Krijnen 532f129458 Tolerance tweaks on unification prior to boolean ops 2019-06-04 14:24:19 +02:00
Thomas Krijnen d535cf0222 Merge master 2019-05-31 14:33:40 +02:00
Thomas Krijnen 77e02ddae4 Remove all references to _newclass from wrapper code 2019-05-31 14:31:31 +02:00
Thomas Krijnen 98bf6c2d95 Merge branch 'master' into v0.6.0
# Conflicts:
#	src/ifcconvert/IfcConvert.cpp
2019-05-28 12:50:38 +02:00
Thomas Krijnen b27482db46 Correct change_extension after unicode changes 2019-05-28 12:48:40 +02:00
Thomas Krijnen 3d2e99b5fa Correct change_extension after unicode changes 2019-05-28 12:44:58 +02:00
Thomas Krijnen 8b382df7cc CMake IFCOPENSHELL_LIBRARIES depending on configuration options 2019-05-28 12:04:13 +02:00
Thomas Krijnen 1a57162873 Do unify boolean operands, especially after new triangulation logic. 2019-05-24 17:16:31 +02:00
Thomas Krijnen 69f25a563c Merge branch 'master' into v0.6.0 2019-05-24 15:39:52 +02:00
Thomas Krijnen 9a85fbc225 Fix static/const declaration 2019-05-24 15:38:35 +02:00
Thomas Krijnen dd71abc672 Fix enum name in geom wrapper 2019-05-24 15:11:09 +02:00
Thomas Krijnen aa493f5987 Merge branch 'master' into v0.6.0 2019-05-24 14:53:50 +02:00
Thomas Krijnen 784c1724d5 Check shell validity in accordance with https://github.com/IfcOpenShell/IfcOpenShell/commit/342cce89d70a5ded5fb1bf52d87383bfce5021ca#commitcomment-31511282 2019-05-24 14:49:14 +02:00
Thomas Krijnen 901e805d24 Revert 13d2cf3357 2019-05-24 14:29:21 +02:00
Thomas Krijnen 41972bba7d Merge branch 'master' into v0.6.0 2019-05-24 12:10:00 +02:00
Thomas Krijnen 17077c74a9 Unify transitionmode for swept disk and swept area 2019-05-24 12:09:33 +02:00
Thomas Krijnen 825a493d7a Add an additional reuse_ok check to the products associated to the *mapped* representation 2019-05-24 12:08:39 +02:00
Thomas Krijnen 6f5e4ec655 Fix iterator constructor in ifcblender 2019-05-24 10:38:31 +02:00
Thomas Krijnen de3f8cdaf4 Merge branch 'master' into v0.6.0 2019-05-24 10:36:43 +02:00
Thomas Krijnen 241c95e6df Some fixes for Blender 2.8? 2019-05-24 10:34:54 +02:00
Thomas Krijnen 8015ea217e codecvt fallback for g++4.8 2019-05-22 22:13:12 +02:00
Thomas Krijnen 285d40d586 add to_string() method in ifcopenshell.file 2019-05-22 16:18:48 +02:00
Thomas Krijnen 80e166302a Fix SVG exporer in 0.6 branch 2019-05-22 14:44:06 +02:00
Thomas Krijnen bcf8cadc30 Correct Y-UP transform in gltf serializer 2019-05-21 18:02:10 +02:00
Thomas Krijnen 26621cbcd5 Update version string to 0.6.0b0 2019-05-21 13:33:59 +02:00
Thomas Krijnen 703c69fdde Update nix build script to default GLTF_SUPPORT to ON 2019-05-21 13:31:43 +02:00
Thomas Krijnen 21981403c7 Merge branch 'master' into v0.6.0
# Conflicts:
#	nix/build-all.py
2019-05-21 13:30:58 +02:00
Daniel Smith c61bc29f06 Relocate random header include 2019-05-21 13:12:27 +02:00
Thomas Krijnen 90ac50f210 Document libffi dependency in nix build script for installing py37 2019-05-21 12:53:54 +02:00
Thomas Krijnen 4e21298009 Merge branch 'master' into v0.6.0 2019-05-19 13:25:14 +02:00
Thomas Krijnen a5cc0f1cef Add python version 3.7.3 2019-05-19 13:22:24 +02:00
Thomas Krijnen d106f178d5 Merge branch 'master' into v0.6.0 2019-05-18 11:07:13 +02:00
Thomas Krijnen a98ab72f67 Update version number 2019-05-18 11:06:27 +02:00
Thomas Krijnen 62e4bf8fb3 Update to OCCT 7.3.0p3 2019-05-18 11:05:12 +02:00
Thomas Krijnen e532a2ead2 Merge branch 'master' into v0.6.0 2019-05-18 11:01:45 +02:00
Thomas Krijnen fd9ba0d243 char wchar_t compatibility 2019-05-18 11:01:17 +02:00
Thomas Krijnen 9a9422bea6 Use ASCII temp name for DAE on nix as well 2019-05-18 10:53:45 +02:00
Thomas Krijnen f10b4bdecc Use ASCII temp name for DAE on nix as well 2019-05-17 16:52:15 +02:00
Thomas Krijnen fd6de77577 Smaller markup on fuzziness for boolean result interference checks 2019-05-17 14:25:28 +02:00
Thomas Krijnen 1d5e560e66 Large refactoring of convert(IfcFace*) to support triangulation of non-planar faces with inner boundaries 2019-05-17 12:31:23 +02:00
Thomas Krijnen fa8ff0d878 Travis: reverse grep command order 2019-05-15 19:43:36 +02:00
Thomas Krijnen 7296bd1382 Try to fix python encoding test error 2019-05-15 17:38:46 +02:00
Thomas Krijnen d60b9df40c Add back ICU as a libxml2 dependency on Travis 2019-05-15 17:20:23 +02:00
Thomas Krijnen 373934f993 Update submodule 2019-05-10 12:09:46 +02:00
Thomas Krijnen a8f6444cad Option to build -static on *nix 2019-05-10 12:04:32 +02:00
Thomas Krijnen 0b2bd5d0e8 Eliminate ICU dependency 2019-05-10 11:59:00 +02:00
Thomas Krijnen c15120e0ae Process string encoding test on travis 2019-05-10 11:56:40 +02:00
Thomas Krijnen 96cb6a73a2 Update .travis.yml 2019-05-08 14:27:00 +02:00
Thomas Krijnen 92b7ca15cf Update .travis.yml 2019-05-08 14:12:40 +02:00
Thomas Krijnen db65678f5e Setup glTF-Validator 2019-05-08 14:06:29 +02:00
Thomas Krijnen f3a7a6594a Small gcc fixes 2019-05-08 13:46:21 +02:00
Thomas Krijnen a786c9a9ee Validate glTF glb 2019-05-08 13:31:51 +02:00
Thomas Krijnen ab1d34fe1d Update CMakeLists.txt 2019-05-08 13:16:50 +02:00
Thomas Krijnen ff542d7381 Update .travis.yml 2019-05-08 13:16:29 +02:00
Thomas Krijnen 3023e084a6 Initial implementation of a direct binary glTF serializer 2019-05-07 17:06:45 +02:00
Sander Boer 0b02f7fb2b .clang-format settings indent=2 for me, temporarily. style=allman width=80 2019-05-03 17:30:48 +02:00
Sander Boer 66508876a5 builds nicely, but chokes immediately on serializer- first element, needs debugging 2019-05-03 17:28:08 +02:00
Sander Boer 8ea77bdeca Linearizing the use of IfcGeomIterator by integrating it into IfcConvert in full, atm it does not build. 2019-05-01 18:34:01 +02:00
Sander Boer 6468329f01 merge with ifcopenshell 2019-04-30 14:26:27 +02:00
Thomas Krijnen 0fd3c69579 FindFromKey() backwards compat 2019-04-30 11:54:56 +02:00
Sander Boer 513d5d0666 Merge branch 'master' of https://github.com/IfcOpenShell/IfcOpenShell 2019-04-26 11:22:36 +02:00
Thomas Krijnen 4792fd9efe Don't do brute-force edge sewing in case of non-manifold faceset from wire intersections or triangulations 2019-04-24 17:15:18 +02:00
Thomas Krijnen 587edca99f Don't log empty error messages from boolean op 2019-04-24 17:01:02 +02:00
Thomas Krijnen 71118fb126 Retain topology information when triangulating face boundaries. #574 2019-04-24 16:32:06 +02:00
Thomas Krijnen 80bdb36ccc Reduce face triangulation message severity to warning 2019-04-09 17:09:27 +02:00
Thomas Krijnen 013b7a763d Some fixes to make sure that non-planar faces get explicitly triangulated 2019-04-09 17:03:24 +02:00
Thomas Krijnen f0fa9ca736 Install python module files using glob 2019-04-05 11:18:22 +02:00
Thomas Krijnen 8a197a6305 Work on 3ds max plug-in 2019-04-03 15:08:14 +02:00
Thomas Krijnen 91d10a1465 Provide basic validation utility in Python 2019-04-03 14:41:25 +02:00
Thomas Krijnen 1314209a89 Map empty aggregate to empty tuple in python 2019-04-03 14:40:09 +02:00
Thomas Krijnen 45c3c27fb5 Fixes for mapping declaration subtypes to SWIG 2019-04-03 13:55:29 +02:00
Thomas Krijnen 6e42f82e1a Merge branch 'master' into v0.6.0 2019-03-29 09:32:22 +01:00
Thomas Krijnen 0ae1c90797 --ignore-whitespace in patch Fixes #565 2019-03-29 09:31:39 +01:00
Thomas Krijnen 94bf798168 Merge branch 'master' into v0.6.0 2019-03-24 14:26:14 +01:00
Thomas Krijnen 8c1924084a Don't consider openings as children in geom filters 2019-03-24 12:36:33 +01:00
Thomas Krijnen 2bf3648966 Add MVD subrepo 2019-03-19 11:04:24 +01:00
Thomas Krijnen 5e54e84a92 Delete MVD module now separate repo 2019-03-19 11:02:24 +01:00
Thomas Krijnen e43e02c003 Vector of bool type conversion in python wrapper. 2019-03-13 13:32:24 +01:00
Thomas Krijnen 2a026e93d5 Fix errors after merge 2019-03-08 17:22:05 +01:00
paul dafa304936 Update Python to 2.7.16 - So Fedora 29 Compile 2019-03-08 15:03:20 +01:00
Thomas Krijnen ac4be43170 Merge branch 'master' into v0.6.0
# Conflicts:
#	src/ifcconvert/IfcConvert.cpp
#	src/ifcgeom/IfcGeomRenderStyles.cpp
#	src/ifcgeom/IfcGeomWires.cpp
#	src/ifcparse/IfcLogger.cpp
#	src/ifcparse/IfcLogger.h
#	src/ifcparse/IfcParse.cpp
#	src/ifcparse/IfcUtil.cpp
#	src/serializers/ColladaSerializer.cpp
#	src/serializers/schema_dependent/XmlSerializer.cpp
2019-03-08 11:40:16 +01:00
Thomas Krijnen e4fdfd2eb3 Apply length unit to IfcCylindricalSurface Radius. Fixes #553 2019-03-04 17:23:15 +01:00
johltn a800a9e7c7 FIx MVD module 2019-03-04 12:50:28 +01:00
Thomas Krijnen 9052721a00 Preliminary work on MVD parser/converter/checker 2019-03-04 10:20:42 +01:00
Thomas Krijnen 2538eeea87 Fixes for latebound inverse attributes in Python 2019-02-27 17:18:19 +01:00
Thomas Krijnen dbc3c5ebef Mark abstract entities in latebound schema 2019-02-20 15:35:19 +01:00
Thomas Krijnen 45136fce6c GeomServer: precision on double formatting, compound in meters, bounding box also from compound 2019-02-20 12:29:44 +01:00
Thomas Krijnen bf1623975c Merge remote-tracking branch 'dleverton/master' 2019-02-15 14:30:55 +01:00
hlg df49f1bc1b prevent index out of bound in case of a single point 2019-02-15 14:22:02 +01:00
hlg acde878946 process IfcIndexedPolyCurve without segments #549 2019-02-15 14:22:02 +01:00
Thomas Krijnen 33cbcc2510 Provide LARGEST_FACE_DIRECTION in geom server quantities 2019-02-15 13:46:13 +01:00
Thomas Krijnen d583bf5284 Populate entity subtypes, get schema info in Python 2019-02-15 13:09:54 +01:00
David Leverton d12cacbd2e Fix Position handling for IfcSurfaceCurveSweptAreaSolid 2019-02-13 15:34:50 +00:00
Thomas Krijnen 8d65086e01 Fix #540. Fix XML serializer schema registration. 2019-02-13 14:16:58 +01:00
Thomas Krijnen 4822b57584 Process binary trees of boolean ops in a single call. Fixes #546 2019-02-13 10:08:55 +01:00
Thomas Krijnen 94c3261ba8 Geomserver positions in 64bit 2019-02-12 16:31:38 +01:00
Thomas Krijnen 5db91e52da Fixes to logger templates 2019-02-12 14:55:03 +01:00
Thomas Krijnen 68151b970a Conditionally sew faces based on detection of shared edges 2019-02-12 13:59:49 +01:00
Thomas Krijnen 826752ca6c Geomserver bounding box sizes 2019-02-12 12:47:01 +01:00
Thomas Krijnen c3adcf631a Fix previous commit 2019-02-08 16:53:09 +01:00
Thomas Krijnen a4c2aa8f42 IfcConvert Windows unicode support (#258) 2019-02-08 15:18:55 +01:00
Thomas Krijnen 7f9d418112 Add LARGEST_FACE_AREA to geom server 2019-02-06 16:24:17 +01:00
Dawid Huczyński 9b0be0fb4e Delete intersection.py 2019-02-06 16:23:22 +01:00
Dawid Huczyński 3fdd92dc84 Create intersection.py 2019-02-06 16:23:22 +01:00
Dawid Huczynski 9f7a7a2c5b basic update to blender2.8, use of existing mesh if id match, 2019-02-06 16:23:22 +01:00
Thomas Krijnen 4df526f023 Merge branch 'master' into v0.6.0 2019-02-06 15:39:43 +01:00
Thomas Krijnen 6bac067488 Keep behaviour of returned null pointers for now 2019-02-06 13:33:38 +01:00
Stinkfist0 000d11daab IfcFile: possibility to mark an entity as modified so that potential cache is invalidated. 2019-02-06 13:30:33 +01:00
Stinkfist0 3bef32bb87 IfcGeom::Kernel::get_layers: remove what would appear to be unnecessary code (yields 0 layers in my tests).
The LayerAssignments() calls can take up to 95 % of the function's execution time yielding no results.
2019-02-06 13:30:33 +01:00
Stinkfist0 9211f80625 IfcFile::entitiesByReference: cache loaded references. Profiling shows around 3x speed-up (avg. of first 5000 calls to this function). 2019-02-06 13:30:33 +01:00
Stinkfist0 910cdb3754 IfcConvert: print durations of file parsing and XML conversion. 2019-02-06 13:30:33 +01:00
Stinkfist0 38f7ccdc20 Optimize IfcFile::entitiesByReference() by reserving capacity for IfcEntityList in advance.
Around 18.4 % speed-up (avg. of first 2000 calls) when converting a somewhat large (176 MB) file to XML.
2019-02-06 13:30:33 +01:00
Thomas Krijnen 40c2602b0e Fix discrepancy with v06 2019-02-06 13:29:56 +01:00
Thomas Krijnen 42e00581cd Merge branch 'master' into v0.6.0
# Conflicts:
#	src/ifcgeom/IfcRepresentationShapeItem.h
#	src/ifcgeom_schema_agnostic/IfcGeomFilter.h
2019-02-06 12:22:48 +01:00
Thomas Krijnen 81f978f101 Changes to Axis with missing refDirection 2019-02-06 12:18:10 +01:00
Xavier Lamorlette 3e041a1fb2 Migrate deprecated bind1st and mem_fun to C++11 bind 2019-02-06 11:01:23 +01:00
Xavier Lamorlette bd3118b4a3 Fix a "declaration of 'identifier' hides class member" warning 2019-02-06 11:01:23 +01:00
Thomas Krijnen 4b57a7bdd6 Set a lower bound tot faceset_helper::epsilon 2019-01-26 15:00:20 +01:00
Thomas Krijnen 6a5bfefce9 Merge branch 'master' into v0.6.0
# Conflicts:
#	src/ifcparse/Ifc4-latebound.cpp
#	src/ifcparse/Ifc4.cpp
#	src/ifcparse/Ifc4.h
#	src/ifcparse/Ifc4enum.h
2019-01-20 14:27:09 +01:00
Thomas Krijnen ef7eee411b Update to IFC4Add2TC1 2019-01-20 13:47:12 +01:00
Thomas Krijnen 5ee32fb945 Merge branch 'master' into v0.6.0 2019-01-16 12:30:12 +01:00
Thomas Krijnen 944813146e Close polylines on closed profile def. Fixes #538 2019-01-16 12:28:58 +01:00
Thomas Krijnen 16cafb9f8b Fix #534 2019-01-11 16:22:53 +01:00
Thomas Krijnen b1754f7b26 Remove debug prints 2019-01-05 13:45:54 +01:00
Thomas Krijnen 55ac6e760d Merge branch 'master' into v0.6.0 2019-01-05 13:43:19 +01:00
Thomas Krijnen 9d6eec0f5a Update suprepo 2019-01-05 13:42:51 +01:00
Thomas Paviot 9048ce4857 Fixed BRepAlgoAPI_BooleanOperation::DumpErrors method only available for OCC version > 7 2019-01-02 10:26:03 +01:00
Thomas Krijnen f24944be48 Merge branch 'master' into v0.6.0 2018-12-31 11:40:16 +01:00
Thomas Krijnen dec0c646cc Only round corners on discontinuous spines. Fixes #358. 2018-12-31 11:39:35 +01:00
Thomas Krijnen 421daa3d19 Work-around for invalid IfcOrganization instances 2018-12-30 12:55:17 +01:00
Thomas Krijnen 7bf9f637e7 Fix some warnings 2018-12-30 12:51:13 +01:00
Thomas Krijnen 9a2623953b Merge branch 'master' into v0.6.0 2018-12-30 12:50:27 +01:00
Thomas Krijnen 382efc0255 Fix some warnings 2018-12-30 12:50:04 +01:00
Thomas Krijnen 93a80c6148 Merge branch 'master' into v0.6.0 2018-12-29 14:35:41 +01:00
Thomas Krijnen bf50d0534b Fixes for edge curves and non-planar faces with inner boundaries. #338 2018-12-29 14:34:47 +01:00
Thomas Krijnen b1ab829c14 Merge branch 'master' into v0.6.0 2018-12-29 14:26:16 +01:00
Thomas Krijnen 7022e842bf Update subproject 2018-12-29 14:18:51 +01:00
Thomas Krijnen 65b5453ef1 More verbosity adjustments 2018-12-29 13:48:20 +01:00
Thomas Krijnen 5e32c1e55c More verbosity adjustments 2018-12-29 13:37:51 +01:00
Thomas Krijnen e6f523a2b8 Adjust verbosity of several log messages 2018-12-29 12:34:32 +01:00
Thomas Krijnen 2c8a79e186 Re-enable some disabled functionality in the 0.6 branch 2018-12-28 16:02:03 +01:00
Thomas Krijnen 13d2cf3357 Remove --sew-shells option, always on now 2018-12-28 15:36:10 +01:00
Thomas Krijnen 427720f369 Addendum to previous merge 2018-12-28 15:18:41 +01:00
Thomas Krijnen d20f4a5af6 Merge branch 'master' into v0.6.0 2018-12-28 15:18:14 +01:00
Thomas Krijnen 4936ea3ac3 Document boolean operation failure reasons, correct min len check and manifoldness check. Fix #478 2018-12-28 15:15:41 +01:00
Thomas Krijnen 4101407b43 Small changes to convert(face) 2018-12-24 16:04:51 +01:00
Thomas Krijnen 29d3b436b4 Merge branch 'master' into v0.6.0 2018-12-24 16:03:20 +01:00
Thomas Krijnen a2231605a5 Take into account edge orientation; small fixes to convert(face) 2018-12-24 16:02:00 +01:00
Thomas Krijnen 4380e1d86a Merge branch 'master' into v0.6.0 2018-12-22 14:06:28 +01:00
Thomas Krijnen 161deeb4e0 Fix warnings and compilation on clang 2018-12-22 14:05:49 +01:00
Thomas Krijnen 31eac564f6 Detect self-intersections in faceset helper and clamp bounding box eps factor to 1. 2018-12-21 15:58:21 +01:00
Thomas Krijnen 99b865bbd9 Some layerset processing comments 2018-12-21 14:40:58 +01:00
Thomas Krijnen 4de617e398 Merge branch 'master' into v0.6.0 2018-12-21 11:53:36 +01:00
Thomas Krijnen 1a1b7e93ab Changes to no-material message 2018-12-19 16:54:02 +01:00
Thomas Krijnen f5af6ee6c0 speed-up min_vertex_edge_distance(). Fixes #518 2018-12-19 16:39:54 +01:00
Thomas Krijnen 94f49af00b Fix header order 2018-12-19 16:30:05 +01:00
Thomas Krijnen 39b8680f64 Improve performance of layerset slicing 2018-12-19 16:10:33 +01:00
Thomas Krijnen 26282437cc Layerset processing error message 2018-12-19 15:15:28 +01:00
Thomas Krijnen 6911b48a46 project() more efficiently onto planar surfaces 2018-12-19 15:15:00 +01:00
Sander Boer de416eca49 Too lazy to comment 2018-12-18 12:49:11 +01:00
Thomas Krijnen acd3564429 Remove some warnings for open shells 2018-12-17 13:25:28 +01:00
Thomas Krijnen 20471bd33e Check comcurve segments extent before creating iterator 2018-12-17 10:56:26 +01:00
Thomas Krijnen bb15446822 Make std::map inheritance private. #512 #517 2018-12-17 10:37:48 +01:00
Thomas Krijnen e3b415ad54 Use miimal bounding box edge length for faceset relative epsilon 2018-12-14 17:14:55 +01:00
Thomas Krijnen 27b9689e14 Work-around gcc issue 2018-12-14 12:14:12 +01:00
Thomas Krijnen 32338e2490 Make std::map inheritance private. #512 #517 2018-12-14 11:56:09 +01:00
Thomas Krijnen e104d1aac3 Travis: max log length 2018-12-12 17:01:11 +01:00
Thomas Krijnen 632d36e2ba Sync subrepo 2018-12-12 16:40:43 +01:00
stephassoria 9a9475adcb Exclude parse_ifcxml.cpp content from build when WITH_IFCXML is not define 2018-12-12 16:29:37 +01:00
Thomas Krijnen f307f39023 Fix remaining merge conflict 2018-12-12 16:29:10 +01:00
Thomas Krijnen f526277a7d Fix some warnings 2018-12-12 16:26:49 +01:00
Thomas Krijnen 0c8e9e7040 Merge branch 'master' into v0.6.0
# Conflicts:
#	src/ifcgeom/IfcGeomIteratorImplementation.h
2018-12-12 16:20:50 +01:00
Thomas Krijnen a0f37cf9ea Fix some warnings 2018-12-12 16:12:38 +01:00
Thomas Krijnen 49c6346af7 Travis: fix shell syntax 2018-12-12 15:57:38 +01:00
Thomas Krijnen eb166da930 Travis: pin py version 2018-12-12 15:53:48 +01:00
Thomas Krijnen d5216c8201 Travis: Build succeeds regardless of conversion result 2018-12-12 15:43:04 +01:00
Thomas Krijnen 027226fb96 Travis: compile on two cores 2018-12-12 14:43:25 +01:00
Thomas Krijnen 5dbd0249b4 Travis: newer gcc for c++11 compat with package manager 2018-12-12 14:40:14 +01:00
Thomas Krijnen 4821226ec2 Travis: xenial, occt 7.3, run IfcConvert 2018-12-12 14:07:13 +01:00
Thomas Krijnen 72c96905b9 Option to validate created geometries based on explicit quantities 2018-12-12 12:33:09 +01:00
Thomas Krijnen a8f4f0270a Don't double quote boost dependency dir #515 2018-12-11 13:01:28 +01:00
Thomas Krijnen 336601a7ae Missing FindFromKey() overload on older versions of occt 2018-12-11 10:55:03 +01:00
Thomas Krijnen d39c7bd641 Postfix integers 2018-12-10 17:26:41 +01:00
Thomas Krijnen d3092090df Substitute tiny trimmed curves with linear approximation when deflection within tolerance 2018-12-10 17:15:39 +01:00
Thomas Krijnen b88c5ee930 Missing include for older occt versions 2018-12-10 12:12:23 +01:00
Thomas Krijnen 645f88a313 Calculate quantities more defensively 2018-12-10 11:51:54 +01:00
Thomas Krijnen a7c7a684ee Emit surface genus for representation items 2018-12-10 11:33:54 +01:00
Thomas Krijnen 20b3a8af3e Faceset_helper: no recursive clustering, epsilon relative to bounds 2018-12-10 10:45:58 +01:00
Thomas Krijnen 0fcf1f14c8 Merge branch 'master' into v0.6.0 2018-12-10 10:41:58 +01:00
Stinkfist0 327be7030f ColladaSerializer minor tweaks and to-dos. 2018-12-09 12:23:44 +01:00
Michael Sundqvist 06589ca1c6 Refactor ColladaSerializer.cpp, encode material names only once, decode them before passing to OpenCollada functions that take URI parameters 2018-12-09 12:23:44 +01:00
Michael Sundqvist 1c83b2db53 Remove object name from no material log message, raise level to warning 2018-12-09 12:23:44 +01:00
Michael Sundqvist 6f3eb84f66 Fix instance_material missing material names as well. 2018-12-09 12:23:44 +01:00
Michael Sundqvist e7a8a97639 If material name is empty when writing collada file, name it as a missing material. Logger::Notice() objects that do not have a material assigned. 2018-12-09 12:23:44 +01:00
Otso Alho fe1cb9e92b default to blank material with IfcMaterial name 2018-12-09 12:23:44 +01:00
Thomas Krijnen f849434f24 More defensive IfcCurveBoundedPlane processing 2018-12-09 11:59:49 +01:00
Thomas Krijnen 8c0c216a1d Check boolean result manifoldness for shells individually. Fixes #516. 2018-12-08 10:37:54 +01:00
Thomas Krijnen 7ed47dee67 Faceset helper: check whether edge has been created 2018-12-03 12:36:30 +01:00
Thomas Krijnen 4f8b430040 Improvements to faceset_helper in case of nearby verts 2018-11-30 11:08:19 +01:00
Thomas Krijnen b48d17c690 Merge branch 'master' into v0.6.0
# Conflicts:
#	src/ifcgeom/IfcGeomFunctions.cpp
#	src/ifcparse/IfcCharacterDecoder.cpp
2018-11-28 14:18:58 +01:00
Thomas Krijnen 3d240deed1 Extended data backwards compatibility 2018-11-28 10:50:09 +01:00
Thomas Krijnen 747ddeb20c Apply openings in batches sorted by increasing detail 2018-11-23 11:45:23 +01:00
Thomas Krijnen 4afd104f3d fit_halfspace() correct padding 2018-11-21 11:28:22 +01:00
Thomas Krijnen 4ed9166e8a Check for null pointers returned by find_representation() 2018-11-20 12:10:44 +01:00
Bernd Hahnebach 64eb5b4d1d namespace fix for debian buster, fixes issue #506 2018-11-20 11:59:08 +01:00
Thomas Krijnen 116de5daec Test powershell v5 or higher 2018-11-20 11:53:11 +01:00
Thomas Krijnen 0016256f57 Merge branch 'master' into v0.6.0 2018-11-19 17:13:28 +01:00
Thomas Krijnen 0018224da7 Handle python positional arguments in case of derived fields more explicitly 2018-11-19 16:38:52 +01:00
Thomas Krijnen 334d867873 Fix #498 2018-11-19 14:56:21 +01:00
Thomas Krijnen 9caa753d27 Fix geom server quantities 2018-11-14 12:14:00 +01:00
Thomas Krijnen ba274bb164 Merge branch 'master' into v0.6.0 2018-11-13 14:46:41 +01:00
Thomas Krijnen 50e5d5f4d5 Sort instances before emitting to file 2018-11-13 14:46:15 +01:00
Thomas Krijnen e7daf871b8 Disallow adding instances from different schema 2018-11-04 15:16:08 +01:00
Thomas Krijnen f7e66d1e7f make_unique<>() is C++14 2018-11-03 16:55:41 +01:00
Thomas Krijnen 6cf214d2e0 Missing header on Travis 2018-11-03 11:34:12 +01:00
Thomas Krijnen 1590ffd6ec Missing header on Travis 2018-11-03 09:59:37 +01:00
Thomas Krijnen 752bda71af Missing header on Travis 2018-11-02 17:01:15 +01:00
Thomas Krijnen e463dca0df Absolute value for dot product in projected areas 2018-11-02 16:37:54 +01:00
Thomas Krijnen 66859c7140 Missing option 2018-11-02 16:24:32 +01:00
Thomas Krijnen 3ff619c7ed Quantities in convert and geomserver. Faceset helper for creating edge pairs. 2018-11-02 16:10:06 +01:00
Thomas Krijnen ad41f04f11 Merge branch 'master' into v0.6.0
# Conflicts:
#	src/ifcconvert/IfcConvert.cpp
#	src/ifcgeom/IfcGeomRenderStyles.cpp
#	src/ifcparse/IfcParse.cpp
2018-10-30 14:32:28 +01:00
Thomas Krijnen e64d8750e1 Use all representations if no representations found through context check 2018-10-30 12:15:35 +01:00
Thomas Krijnen 342cce89d7 #487 perform fix after sewing if not valid 2018-10-30 09:05:18 +01:00
Stinkfist0 ffa282af9d IfcGeomIterator: check the filtered products, not unfiltered ones, for reusability. Speeds up things significantly and also fixes geometry reusability in many cases. 2018-10-15 15:22:44 +02:00
Stinkfist0 fbc0215ef1 IfcGeomIterator: optimize filtering by performing it prior to geometry reuse inspections.
Improves the iteration speed immensely, especially on very large files when only a fraction of the content is wanted to be converted.
2018-10-15 15:22:44 +02:00
Stinkfist0 58759cf365 IfcConvert: prevent memory leaks and clean up code by utilizing shared_ptr. 2018-10-15 14:02:17 +02:00
Stinkfist0 2024a24e31 IfcConvert: proper "exit routine" if initialization of input fails when trying to create geometry files. 2018-10-15 14:02:17 +02:00
Stinkfist0 c420cc1abb IfcFile::Init: return false if unexpected schema encountered. 2018-10-15 14:02:17 +02:00
Jean Niklas L'orange e39835d25e Make API more consistent 2018-10-15 11:25:17 +02:00
Jean Niklas L'orange 9c1660a84b Catch and inform about errors
The changes in how specular roughness and transparency is read in was
done to ensure type safety. If you added

    "transparency": "0.8"

to the file, then that would be silently ignored. In the new style, it
instead errors out if the type cannot be converted to a double.
2018-10-15 11:25:17 +02:00
Jean Niklas L'orange 7e9e56cd2c Support setting default "fallback" material style
Specifying a fallback default material style is added by specifying a
style for "*" in the --default-material-file.
2018-10-15 11:25:17 +02:00
Jean Niklas L'orange a6d3619449 Fix bug where default material was not initialised
We kind-of sort-of do double work here, but I think it is better to
always assume that InitDefaultMaterials when setting the defaults, to
avoid too many code paths.
2018-10-15 11:25:17 +02:00
Jean Niklas L'orange dab3382b29 Implement support for custom default materials
The support for custom default materials is implemented as a JSON
file passed via the command line. The default material specification
will override the defaults, except the toplevel default value.
2018-10-15 11:25:17 +02:00
Stinkfist0 882d27fe25 Use /permissive- introduced in VS 2017 to enforce standards-conformance.
https://docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance?view=vs-2017
2018-10-01 10:30:04 +02:00
paul 81a9d0e747 Changing opencollada version to "v1.6.63"
Discussion:
https://github.com/IfcOpenShell/IfcOpenShell/issues/480

Summary:
"... Compiling OpenCOLLADA  fail on fedora 27... changing  opencollada version to "v1.6.63" (since some time now they do proper tagging over there, the commit we track now is from 19 Dec 2013, probably worth updating as newer compilers might rightfully complain)...

Probably best to rm -rf ... IfcOpenShell/build/Linux/x86_64/build/OpenCOLLADA before restarting."
2018-10-01 10:29:01 +02:00
Thomas Krijnen cb535b4ba8 Merge branch 'master' into v0.6.0 2018-09-25 12:47:31 +02:00
Thomas Krijnen 3102a1c179 Check for empty bounding boxes in boolean op filter 2018-09-25 12:47:06 +02:00
Thomas Krijnen a8effa8289 No need to cast to TopoDS_Face anymore 2018-09-25 12:46:20 +02:00
Thomas Krijnen bf3ec5e507 Add comment 2018-09-24 12:56:07 +02:00
Thomas Krijnen 5526f421f0 Merge branch 'master' into v0.6.0 2018-09-21 14:55:20 +02:00
Thomas Krijnen e24ddae064 Forgot to update code generator 2018-09-21 14:55:10 +02:00
Thomas Krijnen 92f4d76c81 Check for empty list of boolean operands 2018-09-21 14:53:39 +02:00
Thomas Krijnen 59be8f742d Merge branch 'master' into v0.6.0 2018-09-21 12:06:32 +02:00
Thomas Krijnen d2337dc692 Missing FindFromKey() overload on older versions of occt 2018-09-21 12:06:10 +02:00
Thomas Krijnen 2b501a93c9 Merge branch 'master' into v0.6.0
# Conflicts:
#	src/ifcgeom/IfcGeomFunctions.cpp
#	src/ifcgeom/IfcGeomWires.cpp
2018-09-21 12:02:22 +02:00
Thomas Krijnen 6b8681b74a That was bad 2018-09-21 11:45:36 +02:00
Thomas Krijnen 297812d4e2 Better handling of consecutive circular arc segments 2018-09-21 11:43:06 +02:00
Thomas Krijnen 7205f0165e Work around private copy constructor on older versions of occt 2018-09-21 11:21:51 +02:00
Thomas Krijnen bf4b5928dd Fail on empty face early 2018-09-21 10:22:37 +02:00
Thomas Krijnen 3840bd1154 Limit tolerance on wire self-intersection to edge segment length 2018-09-21 10:22:24 +02:00
Thomas Krijnen 47ec4e2240 Merge branch 'master' into v0.6.0 2018-09-19 20:27:03 +02:00
Thomas Krijnen 622853d73d Filter boolean subtraction operands by intial bounding box test 2018-09-19 16:42:34 +02:00
Thomas Krijnen e8b28a099f Some fixes for clang 2018-09-19 14:05:19 +02:00
Thomas Krijnen 9a3039765f Merge remote-tracking branch 'origin/master' into v0.6.0 2018-09-19 10:09:48 +02:00
Unknown bef9bd25f7 Fix dll export on Windows
Fix dll export on Windows
2018-09-19 10:09:05 +02:00
Thomas Krijnen 53577d9da9 Fix ifcopenshell-python build on nix build script 2018-09-18 19:42:01 +02:00
Thomas Krijnen 55d07f8bba Merge branch 'master' into v0.6.0
# Conflicts:
#	nix/build-all.py
2018-09-18 13:42:06 +02:00
Thomas Krijnen 34b3ca307f Enable exception handling on occt release builds Fix #462 2018-09-18 13:39:44 +02:00
Thomas Krijnen 028e8fb926 Merge branch 'master' into v0.6.0
# Conflicts:
#	nix/build-all.py
#	src/ifcgeom/IfcGeomFunctions.cpp
#	src/ifcparse/IfcLogger.cpp
2018-09-17 17:46:13 +02:00
Thomas Krijnen 08557c2664 Don't fail on empty bounding box during halfspace processing 2018-09-17 15:21:12 +02:00
Thomas Krijnen a54b7863cd Fail early on duplicate (non consecutive) points in face loops 2018-09-17 14:59:15 +02:00
Thomas Krijnen 3101ccb83a Fixes for degenerate polylines 2018-09-17 14:42:22 +02:00
Thomas Krijnen 394a7f14ad Emit unopened shapes in case of exceptions during subtraction 2018-09-17 14:11:03 +02:00
Thomas Krijnen 983745b508 More careful face orientation check 2018-09-17 12:05:30 +02:00
Thomas Krijnen b05b62f440 Perform additional check on boolean result output for small edges or distances 2018-09-17 12:02:41 +02:00
Thomas Krijnen 51a9bb0ac1 Retry boolean operations if output is non-manifold on manifold input 2018-09-17 12:00:49 +02:00
Thomas Krijnen 452ab6e5bc Fix flaw in vertex-edge distance used to limit tolerance in boolean ops 2018-09-17 11:33:40 +02:00
Thomas Krijnen 0df2bfadef Don't sew overly complex geometries even as part of boolean operations #455 2018-09-12 16:44:30 +02:00
Thomas Krijnen 12623dd1e5 Only install/strip on Release build 2018-09-12 13:57:41 +02:00
Thomas Krijnen 2eaae2bda8 Use BVH tree for wire intersections 2018-09-12 13:26:11 +02:00
Thomas Krijnen a3141b2acc Make nix build script more granular 2018-09-08 13:23:36 +02:00
Thomas Krijnen 3a4fa2e6dd Merge commit '58ce86d538971fc1815d56368d7077aa85e0592c' into v0.6.0 2018-09-08 13:07:09 +02:00
Thomas Krijnen 472c3478e0 Emit error messages on missing units 2018-09-08 08:27:45 +02:00
Thomas Krijnen 54d96fe167 Merge branch 'master' into v0.6.0
# Conflicts:
#	src/ifcconvert/IfcConvert.cpp
#	src/ifcgeom/IfcGeom.h
2018-09-07 14:42:15 +02:00
Thomas Krijnen 229a708fc3 Emit error messages on missing units 2018-09-07 14:25:46 +02:00
Thomas Krijnen 0df4edff01 Revive some temporarily disabled features in de 0.6 branch 2018-09-07 14:08:56 +02:00
luz.paz d78c9171db Misc. typos
Found via `codespell -q 3`
2018-09-07 11:52:01 +02:00
Thomas Krijnen 03da7bc6e4 Fix missing schema identifier in geometry function 2018-09-05 14:43:25 +02:00
Thomas Krijnen 34d28e8b3a Prefix Kernel factory struct as well 2018-09-05 14:42:59 +02:00
Thomas Krijnen 6e8f5c84e6 Still no working submodule 2018-09-04 15:52:51 +02:00
Thomas Krijnen 08d003ddcd Something went wrong merging submodule 2018-09-04 15:07:14 +02:00
Thomas Krijnen bdf22856e4 Add explicit cast to attribute value 2018-09-04 13:59:57 +02:00
Thomas Krijnen 4d33ed5cb8 Merge branch 'master' into v0.6.0
# Conflicts:
#	src/ifcconvert/IfcConvert.cpp
#	src/ifcgeom/IfcGeomShapes.cpp
#	src/serializers/ColladaSerializer.cpp
#	src/serializers/schema_dependent/XmlSerializer.cpp
2018-09-04 13:23:11 +02:00
Thomas Krijnen 4babe84941 Force decltype using for boost::resulf_of 2018-09-02 13:55:36 +02:00
Thomas Krijnen 4138103541 Fix libxml2 directives on travis 2018-09-02 11:59:54 +02:00
Thomas Krijnen a3894cdcda Fix libxml2 directives on travis 2018-09-02 11:59:54 +02:00
Thomas Krijnen 840f1463e5 Fix libxml2 directives on travis 2018-09-02 11:59:54 +02:00
Thomas Krijnen ad5444b974 Inverse attributes with 0-1 cardinality not as ifcXML aggregates 2018-09-02 11:59:54 +02:00
Thomas Krijnen c0d41103fa add missing file 2018-09-02 11:59:54 +02:00
Thomas Krijnen 3e80d3646c Work on ifcxml parsere 2018-09-02 11:59:54 +02:00
Thomas Krijnen c2f4c2cf74 Add missing patch files. Fix #448 2018-09-02 10:51:16 +02:00
Thomas Krijnen 45be79443f Prefix typename for iteratorimplementation factory function struct 2018-08-29 12:55:27 +02:00
Thomas Krijnen dbc3577497 Test files in submodule 2018-08-26 17:09:01 +02:00
Thomas Krijnen 0a45a82109 Move test files to separate repo 2018-08-26 12:30:18 +02:00
Stinkfist0 07f5ac6994 IfcGeomIterator: compute model's bounding box only if needed (IfcConvert --center-model used). 2018-08-26 12:17:24 +02:00
johanrd 0eb6c597f0 Create 443--segfault-beam.ifc 2018-08-26 12:12:48 +02:00
Thomas Krijnen b13c912c47 Work on #426 2018-08-20 11:46:26 +02:00
Thomas Krijnen 683cadeb76 occt 7.3 2018-08-19 10:29:01 +02:00
Thomas Krijnen b023f6a31d Fix sillyness preventing install of IfcGeomServer 2018-08-16 13:58:50 +02:00
Thomas Krijnen 891448e902 Fix #343 2018-08-15 17:10:29 +02:00
Michael Sundqvist 82718fad30 Catch some ifc file header exceptions to prevent crashing during xml serialization 2018-08-15 16:15:25 +02:00
Stinkfist0 9f03a78652 ColladaSerializer::differentiateSlabTypes: IfcSlab.PredefinedType is optional so check for its existence.
https://github.com/Tridify/IfcOpenShell/commit/c4f426392cfc021b8a9c617f21d258759b289d6a#diff-cca49440331fb4c1363204028192c459
2018-08-15 16:09:15 +02:00
Stinkfist0 505d234ea2 Unify GeometrySerializers' object ID logic. Fixes #397. 2018-08-15 16:09:15 +02:00
Robbe Derks bd5e25889a Added command-line option to output progress to stderr stream 2018-08-15 14:45:43 +02:00
Thomas Krijnen 5609cbdde9 Fix missing symbols for boost 1.67 and BOOST_ALL_NO_LIB 2018-08-15 09:07:40 +02:00
Thomas Krijnen caa6056f01 Conda bld.bat python version 2018-08-14 17:09:00 +02:00
Thomas Krijnen 3ea3627639 Conda bld.bat python version 2018-08-14 16:15:32 +02:00
Thomas Krijnen 175387bd88 Fix IfcOpenHouse 2018-08-13 11:43:28 +02:00
Thomas Krijnen ba5049a7eb Break out of loop in case of attribute count mismatch 2018-08-10 14:57:33 +02:00
Felipe Mesquita 40b70b1815 Workaround wrong argument count. Fix #419 2018-08-10 14:55:47 +02:00
Thomas Krijnen 54d9edfee5 Fix build on gcc 2018-07-12 12:33:35 +02:00
Thomas Krijnen 1c2587ba19 Fix for inverse update on delete 2018-07-12 11:37:23 +02:00
Thomas Krijnen d09abbd260 Merge pull request #409 from IfcOpenShell/master
Additional potential occt lib location
2018-07-08 15:08:32 +02:00
Thomas Krijnen 5359e88f0e Additional potential occt lib location 2018-07-08 15:07:30 +02:00
Thomas Krijnen 2dc01aec2d Update conda meta 2018-07-08 15:06:12 +02:00
Thomas Krijnen 20b35ec4ea Preprocessor stuff for stp and igs serializers 2018-07-08 11:08:07 +02:00
Thomas Krijnen 5245341cdc Correct previous commit 2018-07-08 11:06:45 +02:00
Thomas Krijnen 49932ba5c0 Python wrapper precision updates 2018-07-08 10:32:26 +02:00
Thomas Krijnen 7a7aab01bb IfcGeomServer matrices in double precision 2018-07-07 21:14:27 +02:00
Thomas Krijnen d105292817 Merge branch 'master' into v0.6.0
# Conflicts:
#	src/ifcconvert/IfcConvert.cpp
#	src/ifcgeom/IfcGeomFilter.h
#	src/ifcgeom/IfcGeomIteratorImplementation.h
#	src/ifcgeom/IfcGeomWires.cpp
#	src/ifcparse/IfcFile.h
#	src/ifcparse/IfcLogger.cpp
#	src/ifcparse/IfcLogger.h
#	src/ifcparse/IfcParse.cpp
#	src/serializers/SvgSerializer.cpp
#	src/serializers/schema_dependent/XmlSerializer.cpp
2018-07-07 17:15:54 +02:00
Thomas Krijnen 6fdd2049a2 Restore previous boost version on nix 2018-07-01 11:37:36 +02:00
Thomas Krijnen 8428b93451 nix cmake download url 2018-07-01 09:16:34 +02:00
Thomas Krijnen 8e2a074d70 Correct accidentally committed lines 2018-06-30 18:53:16 +02:00
Thomas Krijnen 1b809ed849 Update boost version 2018-06-30 15:36:51 +02:00
Thomas Krijnen 8c0bcc4ce7 Silent extraction in build-deps.cmd 2018-06-30 10:21:11 +02:00
Victor Haefner 11d0c6ef56 compiles under ubuntu 18.04 2018-06-22 17:16:11 +02:00
Stefan Boeykens 58ce86d538 Pushing cmake to enforce C++ 11
To be able to compile with a recent ICU version (for Unicode) C++11 is required. This enforces this in the main CMakeLists.txt
2018-06-19 09:45:16 +02:00
Stefan Boeykens 0ba1ac7df3 Add ICU header and namespace in IfcCharacterDecoder
To compile on macOS with a recent ICU, we have to add the correct header and refer to the right namespace in IfcCharacterDecoder
2018-06-17 15:15:52 +02:00
Thomas Krijnen 4cfb2f1027 SetNonDestructive does not exist prior to OCCT 7.0 2018-06-15 12:39:29 +02:00
Thomas Krijnen 6d25047c6b higher fuzz on half spaces 2018-06-12 16:15:28 +02:00
Thomas Krijnen 136ec5b224 'nondestructive' boolean ops 2018-06-12 16:15:12 +02:00
Thomas Krijnen 3ac8379187 Set precision on fix after boolean op 2018-06-08 14:12:01 +02:00
Thomas Krijnen 6c1ad47481 Additional improvements for comp curve wire building 2018-06-01 15:38:08 +02:00
thorade 20cd383504 triple double-quoted docstring
and do not use builtin names for variables
2018-05-30 11:32:47 +02:00
Thomas Krijnen 5aebfe9f22 Fix for setting type decl instances 2018-05-29 10:34:38 +02:00
Thomas Krijnen fd821d08cd Dont fail on missing AIS_MultipleConnectedShape in earlier versions of pyocc 2018-05-17 15:54:12 +02:00
Thomas Krijnen 6b772d18b8 Fixes to qt5 port of viewer app 2018-05-17 15:53:40 +02:00
civilx64 33635c2c40 Port viewer app to PyQt5 2018-05-17 00:11:09 -04:00
civilx64 7e6b758450 Add instructions for install via conda. 2018-05-16 23:05:07 -04:00
Yorik van Havre 127bcaf96e adding exception for OCCT 7.3 2018-05-16 16:10:40 +02:00
Yorik van Havre 2d59f9d53a Removed one last remaining BOPCol_ListOfShapes
Replaced one last remaining BOPCol_ListOfShapes with TopTools_ListOfShapes (deprecated in OCC7.3)
2018-05-16 16:10:40 +02:00
Otso Alho 1014049b05 use unordered map for entity by id 2018-05-14 13:36:38 +02:00
Otso Alho 37460d3df9 do not calculate reuse_ok multiple times for mapped representations 2018-05-14 13:36:38 +02:00
Thomas Krijnen 637d3e2eb6 Optimize generation of faces with large (n > 128) number of edges. 2018-05-14 11:06:07 +02:00
Thomas Krijnen 2ed2e9cf86 Add include, missing depending on occt version 2018-05-13 18:52:53 +02:00
Thomas Krijnen c1635d65eb Add include, missing depending on occt version 2018-05-13 16:04:15 +02:00
Thomas Krijnen 495ad75b14 Proper scope around goto labels 2018-05-13 15:30:20 +02:00
Thomas Krijnen 966e57e94a #332 2018-05-13 14:41:39 +02:00
Thomas Krijnen ef7a1ab421 Limit boolean fuzz to edge length 2018-05-13 09:15:06 +02:00
Thomas Krijnen 089bb95c9f Fix previous commit on gcc 2018-05-13 08:45:33 +02:00
Thomas Krijnen 7786b89269 Machine readable progress with -q and --log-format json 2018-05-12 20:12:25 +02:00
Thomas Krijnen 589f4bda2e ... but keep close point removal at 10 times precision 2018-05-08 16:19:47 +02:00
Thomas Krijnen 8ffc12e6cd Reduce radius on wire intersections 2018-05-08 09:41:19 +02:00
thorade bd9875fae5 set TLS to 1.2 2018-05-07 10:53:03 +02:00
thorade 7994bcbb80 https plus original URL 2018-05-07 10:53:03 +02:00
thorade baa0211562 append download to the URL
https://sourceforge.net/p/forge/documentation/Downloading%20files%20via%20the%20command%20line/
2018-05-07 10:53:03 +02:00
thorade a24333486a use SF instead of mirror 2018-05-07 10:53:03 +02:00
thorade 452ba651d0 update SF.net download URL 2018-05-07 10:53:03 +02:00
Thomas Krijnen 161f24d804 Copy operands prior to boolean operation 2018-05-05 16:09:12 +02:00
Thomas Krijnen 6ee283dbae Don't fail on parse errors while resolving inverse attributes 2018-05-04 10:25:57 +02:00
Thomas Krijnen c748c8dcea Better instance not found error messages 2018-04-23 10:51:59 +02:00
Thomas Krijnen 1f68d9d5bc TColgp_SequenceOfPnt::Upper() does not exist on all versions of occt 2018-04-18 11:57:38 +02:00
Thomas Krijnen 120ff2f629 Fix download of occt in nix build 2018-04-18 11:50:59 +02:00
Thomas Krijnen 656346741e #288 #297 2018-04-18 11:33:57 +02:00
Thomas Krijnen e21277e80a nix: use and patch occt 7.2 2018-04-15 14:01:37 +02:00
Thomas Krijnen 9f55444d2e win: apply patch for HLR 2018-04-15 09:27:16 +02:00
Thomas Krijnen 05fd266a65 gcc compatibility 2018-04-14 20:06:25 +02:00
Thomas Krijnen 42c09deb8c #354 loose faces in SewedShape 2018-04-11 12:26:01 +02:00
Thomas Krijnen cb61873179 conda osx build 2018-04-10 19:55:56 +02:00
Thomas Krijnen dbf9f213fd Dont fail on adding length measure instances to empty files 2018-04-04 14:40:10 +02:00
Thomas Krijnen 77e0d9cca7 Freeing of lazily loaded inst attrs 2018-03-21 17:29:37 +01:00
Thomas Krijnen 0cbe984c71 Default to 2x3 for older schemas 2018-03-21 17:18:38 +01:00
Thomas Krijnen 93cca8f7b7 Update README.md 2018-03-16 16:36:36 +01:00
Thomas Krijnen 5082fe8be4 Revive XML serializer 2018-03-16 16:04:48 +01:00
Thomas Krijnen 834780b726 Schema dependent serializers 2018-03-16 13:49:11 +01:00
Thomas Krijnen d374fd3778 More changes to conda build 2018-03-16 12:17:49 +01:00
Thomas Krijnen b86b359563 Schema independent layer and transformation conv functions 2018-03-16 12:10:05 +01:00
Thomas Krijnen 6685ea6d7a Schema dependent serializers 2018-03-16 12:10:05 +01:00
Thomas Krijnen 0a809ba127 Schema dependent serializers 2018-03-16 12:10:05 +01:00
Thomas Krijnen 14be6b49fe #348 2018-03-16 11:03:02 +01:00
Thomas Krijnen e87a1a0b32 #329 Only auto close IfcCompositeCurve when used for profile 2018-03-09 10:41:22 +01:00
Thomas Krijnen 768f49dcc7 Update meta.yaml 2018-03-04 10:50:17 +01:00
Thomas Krijnen 27e335343e Win build script occt7.2 2018-03-04 10:45:44 +01:00
Thomas Krijnen 0920116178 Fix prompt 2018-03-04 10:45:05 +01:00
Thomas Krijnen 1a7a4bdc3e Update boost download path 2018-02-27 18:09:43 +01:00
Thomas Krijnen 5d0c04a077 Fix geometry reuse in case of IfcTypeProducts with maps 2018-02-21 14:54:38 +01:00
Anders Granskogen Bjørnstad 8a316e45ed IfcConvert: Add --building-local-placement argument
Similar to --site-local-placement. Motivated by dealing with at least
two examples where IFC files for the same construction site have
inconsistent ObjectPlacement hierarchy:

- MEP models exported from MagiCAD for Revit:
   ObjectPlacement.PlacementRelTo of IfcBuilding is empty
- Regular construction models exported from Revit:
   ObjectPlacement.PlacementRelTo of IfcBuilding is pointing to
   IfcSite's placement
2018-02-19 16:17:12 +01:00
Thomas Krijnen ef97ea0593 Properly toposort type decl instantiation 2018-01-29 15:03:12 +01:00
Thomas Krijnen 19d834b19e Fix python wrapper 2018-01-29 15:02:36 +01:00
Thomas Krijnen bc64b339a7 Bump version identifier 2018-01-29 15:02:16 +01:00
Thomas Krijnen af93f2a64d Use naked pointer for attribute list and derive size from schema type to reduce mem usage 2018-01-29 12:11:50 +01:00
Thomas Krijnen a3b7a25866 conda yaml: add space before version spec 2018-01-26 14:36:51 +01:00
Thomas Krijnen 25bae21a42 Merge pull request #322 from 3drepo/Convert_Server_Optional
Make IFCConvert and IFCGeomServer optional
2018-01-25 12:50:18 +01:00
Thomas Krijnen d9679d6905 Merge branch 'v0.6.0' into Convert_Server_Optional 2018-01-25 12:49:55 +01:00
carmenfan 7a4059fbfd Adding ifcgeom_schema_agnostic headers in include directory 2018-01-25 12:46:52 +01:00
carmenfan 623e95cefe Add Options on Cmake to selectively compile IFCConvert and IFCGeomServer 2018-01-24 15:55:44 +00:00
Thomas Krijnen 9f91109e66 Update conda 2018-01-21 15:58:36 +01:00
Thomas Krijnen 162b665d07 Update blender addon for str geometry.id 2018-01-15 11:00:25 +01:00
Thomas Krijnen 7b728b9e6d Fix ambiguous call to overloaded function
(`std::exception` has a `char*` constructor?)
2018-01-08 12:33:27 +01:00
Thomas Krijnen 6240191980 Conda build script 2018-01-08 12:19:36 +01:00
Thomas Krijnen c7329497a6 Don't use static boost libs with conda build 2018-01-08 12:02:34 +01:00
Thomas Krijnen 4bed639d9c Python wrapper geometry handling 2018-01-01 11:22:12 +01:00
Thomas Krijnen 5739fa7239 Single threaded compilation on travis 2017-12-31 13:06:18 +01:00
Thomas Krijnen e2f79ec1ba Work on python wrapper 2017-12-31 12:20:13 +01:00
Thomas Krijnen 05e6f56911 Linker errors, geom server, warnings 2017-12-29 13:48:08 +01:00
Thomas Krijnen 19aebacbd8 Initialize kernel base class 2017-12-29 12:25:29 +01:00
Thomas Krijnen aeabe87779 Disable optimization for schema instantiation on gcc as well 2017-12-29 12:21:20 +01:00
Thomas Krijnen 7b3d334472 Warnings and errors 2017-12-29 12:09:07 +01:00
Thomas Krijnen 93c3afa1ae Schema dependent names for serialization functions 2017-12-29 11:23:46 +01:00
Thomas Krijnen 21e53d24e0 Fixes to examples 2017-12-28 18:44:50 +01:00
Thomas Krijnen f5d6f4f7f9 No anonymous structs to work around gcc 5 issue 2017-12-28 16:33:07 +01:00
Thomas Krijnen 24b46c1f43 Work on serialization 2017-12-22 17:37:58 +01:00
Thomas Krijnen ddde7bc367 Fix hierarchy helper 2017-12-22 17:34:13 +01:00
Thomas Krijnen 5f6a18c212 Fixes for hierarchy helper 2017-12-22 17:04:19 +01:00
Thomas Krijnen 5e23086947 Sprinkle with template and typename keywords 2017-12-22 16:45:02 +01:00
Thomas Krijnen 472fde5599 Fixes 2017-12-22 15:19:09 +01:00
Thomas Krijnen b3458c872f Work on python wrapper 2017-12-22 13:51:11 +01:00
stefkeB 5bf7f53fd8 BaseQuantities support in IfcConvert XmlSerializer
Added the export of BaseQuantities in the XML export of IfcConvert.
Very similar to the export of properties.
2017-12-22 11:33:28 +01:00
Thomas Krijnen 4d325e026e Fix compilation and execution of IfcConvert 2017-12-21 14:14:04 +01:00
Thomas Krijnen 6622afd93a Rename 2017-12-20 17:09:42 +01:00
Thomas Krijnen 8b4650b169 Fix compilation on msvc 2017-12-20 16:38:55 +01:00
Thomas Krijnen 6e525662c3 Disable XML serializer for the time being 2017-12-20 12:41:39 +01:00
Thomas Krijnen d46dfb6061 Work on serializers 2017-12-20 12:40:15 +01:00
Thomas Krijnen 830a03ffcd Schema agnostic iterator 2017-12-20 11:10:27 +01:00
Thomas Krijnen f4463d2935 Crazy factory implementation 2017-12-19 20:24:00 +01:00
Thomas Krijnen e3a7e6137d Update SvgSerializer.cpp 2017-12-19 14:58:56 +01:00
Xsoiou 01d261e168 SVG storey elevation (#315)
IfcConvert SVG does not generate <path d=""> for IfcSpace. #313
2017-12-19 12:10:19 +01:00
Thomas Krijnen a792a7e2c7 Two simultaneous IfcGeom implementations 2017-12-18 15:25:09 +01:00
civilx64 c4e56f670d Corrected name of *nix build script. 2017-12-18 15:17:21 +01:00
civilx64 4e28caaf8d Corrected name of *nix build script. 2017-12-18 15:17:21 +01:00
Xsoiou b7992d6a12 This closes #309 and it also fixes #310 2017-12-16 09:25:08 +01:00
Xsoiou efe765f71f Changed from http to https on ICU download 2017-12-16 09:25:08 +01:00
Thomas Krijnen 5eba7af791 Use struct instead of namespace to represent schema 2017-12-13 18:05:10 +01:00
Thomas Krijnen 761e9d7248 Continuing. 2017-12-13 13:58:58 +01:00
Thomas Krijnen 85515e904e Begin phasing out type enumeration in favour of declaration pointers 2017-12-13 13:16:49 +01:00
Thomas Krijnen 33fc2080df Runtime schema by name 2017-12-12 11:00:42 +01:00
Thomas Krijnen 33e1fa6a14 Update python wrapper 2017-12-11 17:20:22 +01:00
Thomas Krijnen e7ccf7269a Remove limited latebound schema representation in favour of full runtime schema representation 2017-12-11 15:46:57 +01:00
Thomas Krijnen 322dec6fd0 Update ifcconvert 2017-12-11 15:46:17 +01:00
Thomas Krijnen c099234796 Update ifcgeom 2017-12-11 15:07:40 +01:00
Thomas Krijnen 0468f12051 Address conflicts in ifcparse 2017-12-11 14:47:30 +01:00
Thomas Krijnen 988094b796 Resolving merge conflicts 2017-12-11 14:20:30 +01:00
Thomas Krijnen f36d27f7af Run codegen 2017-12-11 13:44:01 +01:00
Thomas Krijnen 3763ae18b2 Rough merge of schema runtime representation 2017-12-11 13:43:06 +01:00
Thomas Krijnen be5bd2e735 optional building storey argument added to setSectionHeight() 2017-12-11 11:19:15 +01:00
Thomas Krijnen ce782cc784 2d edges in svg serializer 2017-12-11 11:18:37 +01:00
tymokvo 39b0d11746 fixed missing bracket 2017-12-06 12:20:22 +01:00
tymokvo e06105e878 added some documentation/examples 2017-12-06 12:20:22 +01:00
Anders Granskogen Bjørnstad 34e2ff31bb SvgSerializer: Fix bug in ellipse writeout
Add a missing "=" to create a valid SVG for ellipses.

I accidentally stumbled upon a way to actually get an ellipse in SVG by
tilting a cylinder. If I tilt the cylinder via the `ObjectPlacement` of
the `IfcProduct` I get an ellipse. If I set the `ExtrudedDirection` of
the `IfcExtrudedAreasolid`, however, I get a sampled path.
2017-12-04 17:23:32 +01:00
Thomas Krijnen c0a2e3395f Triangulate non-planar wires when invoked with --sew-shells 2017-11-27 16:27:36 +01:00
Thomas Krijnen 7cd354ee7d Eliminate warning 2017-11-27 16:24:29 +01:00
Thomas Krijnen 95be422d4f Grep for command line arg name in ld stderr output 2017-11-25 19:15:25 +01:00
Thomas Krijnen 111569ec1b Approx other curve types in SVG, hollow circles 2017-11-25 13:08:34 +01:00
Anders Granskogen Bjørnstad 9c88a35173 SvgSerializer: Support full circles and ellipses
Use <circle> and <ellipse> to create a valid SVG for these geometries.

Limit to only the *first* edge. I am not sure whether there are
scenarios with multiple edges like this:
1. One or more straight line pieces or arc segments
2. A full closed circle
3. More straight lines or arc segments

If there is, we are keeping the original behavior here.
2017-11-25 13:06:03 +01:00
Anders Granskogen Bjørnstad 2647eacb74 test: Add {cylinders,ellipses}.ifc samples
A bare-bones IFC with four cylinders/ellipses. Used for SVG conversion
testing.
2017-11-25 13:06:03 +01:00
Anders Granskogen Bjørnstad df942f6460 SvgSerializer: Fix bounding box for arc segments
Not necessarily minimal, but better to be conservative w.r.t. getting
all geometry inside bounds.
2017-11-25 13:06:03 +01:00
Anders Granskogen Bjørnstad 7de877823b SvgSerializer: Add closed circle warning
Only refactoring, adding a warning.
2017-11-25 13:06:03 +01:00
Thomas Krijnen ea3318ae2e Don't rely on man for ld feature detection 2017-11-18 16:51:59 +01:00
Thomas Krijnen fb37899b26 Don't pass empty arguments to boost build 2017-11-18 16:50:38 +01:00
Thomas Krijnen 6463690a8b Fix typo 2017-11-13 13:01:59 +01:00
Thomas Krijnen 148432c011 Fixes for boolean ops on recent OCCT versions 2017-11-13 12:41:37 +01:00
Anders Granskogen Bjørnstad 478da8f658 IfcConvert: Add section-height argument for SVG
Enabling user specified overriding the default (zmin + 1 meter) value.
2017-11-11 10:02:41 +01:00
Anders Granskogen Bjørnstad 9be413a308 SvgSerializer: Use storey elevation if available
For the scenario where we a building storey and it has an elevation:
Instead taking the cross section of every product 1 meter above it's
lowest, take the cross section at storey elevation + 1 meter.
2017-11-11 10:02:41 +01:00
Anders Granskogen Bjørnstad a9606b3044 SvgSerializer: Name storeys properly too
- Fix correct "storey-" prefix for stories
- Follow user settings on names/guids/notset
2017-11-11 10:02:41 +01:00
Anders Granskogen Bjørnstad c419885329 SvgSerializer: Fix error message logic
If we have no storeys *and* we didn't find any suitable fall-back, then
the error message makes sense.
2017-11-11 10:02:41 +01:00
civilx64 b6b41e920f Create docstrings for generated python code. 2017-11-08 13:29:09 +01:00
Thomas Krijnen b7ce547a0c Fill holes in composite curves, fixes #282 2017-11-08 13:27:45 +01:00
thorade 6cd59aa121 autopep8 aggressive
autopep8 --in-place --recursive  --max-line-length=200 --aggressive --aggressive --aggressive ifcopenshell
2017-11-07 15:28:45 +01:00
thorade 8439e5b46d autopep8
autopep8 --in-place --recursive  --max-line-length=200 ifcopenshell
2017-11-07 15:28:45 +01:00
Stinkfist0 403f64a0d0 build-deps.cmd: fix boost build configuration for VS 2015. Fixes #279. [ci skip] 2017-11-05 16:18:00 +01:00
thorade 6bffee83fe identical from __future__ import in ALL py files 2017-11-05 16:17:27 +01:00
Anders Granskogen Bjørnstad f3e20ae450 geom/app.py: ConfigParser py2/py3 fix
When running the viewer app in python3, I got the following crash:
Traceback (most recent call last):
  File "geom_app.py", line 2, in <module>
    ifcopenshell.geom.app.application().start()
  File "/usr/lib/python3/dist-packages/ifcopenshell/geom/app.py", line 534, in __init__
    self.editor = code_edit(self.canvas, configuration().options('snippets'))
  File "/usr/lib/python3/dist-packages/ifcopenshell/geom/app.py", line 68, in __init__
    config = Cfg()
TypeError: 'ConfigParser' object is not callable

Unify configparser usage for py2 and py3 by making sure the py3 path
also gives a callable Cfg
2017-11-05 16:16:49 +01:00
thorade 352b14f07d ignore *.py.bak files 2017-11-03 11:05:02 +01:00
thorade d7bcd00904 also ignoe files generated by PyCharm 2017-11-03 11:05:02 +01:00
Matthis Thorade afce8b37c4 py 2 and 3
http://python3porting.com/noconv.html#handling-exceptions

this is the first error i get when i try to start th eviewer from python 3
using the two-line from https://github.com/IfcOpenShell/IfcOpenShell/commit/1d1fb6d27a5bb1f221aed4dc290c1dc99a324e0f#commitcomment-17161165
2017-10-30 10:31:35 +01:00
Thomas Krijnen a2b575eec8 update SWIG to latest release
#277
2017-10-30 10:26:27 +01:00
Matthis Thorade eb87d50548 update SWIG to latest release
because SWIG 3.0.7 is two years old and the intermediate releases all mention minor Python fixes.
http://www.swig.org/

I have used this for the last couple of builds and did not notice any negative effects.
2017-10-30 10:23:53 +01:00
Thomas Krijnen f64246f7c5 Use building or site placement for SVG section height if file has no storeys 2017-10-23 14:17:54 +02:00
Thomas Krijnen c5495d83e4 Invalid empty SVG file 2017-10-23 13:58:07 +02:00
Thomas Krijnen 095801faa1 Fix warning 2017-10-23 13:47:37 +02:00
Thomas Krijnen 07954122fb Fix #275 2017-10-23 13:32:57 +02:00
Stinkfist0 b347a488af build-deps.cmd: update Boost to latest 1.65.1. Fixes #249. 2017-10-18 13:58:32 +02:00
Campbell Barton 0429e765b5 Validate mesh input
This report comes from a but reported to Blender, where invalid geometry is apparently created by this importer.

https://developer.blender.org/T52921
2017-10-15 12:32:49 +02:00
Thomas Krijnen 33220fa78c Update python module install script 2017-10-06 16:37:22 +02:00
Thomas Krijnen effcecc75f ifcopenshell.template.create() 2017-10-06 16:05:55 +02:00
Thomas Krijnen 85f872d3b8 ifcopenshell.guid.new() 2017-10-06 16:03:04 +02:00
Thomas Krijnen f3b3e2a441 More meaningful error message setting attributes in python 2017-10-06 16:02:34 +02:00
Thomas Krijnen 25d68d320d Remove auto keyword 2017-10-06 16:01:18 +02:00
Matthis Thorade c38ac108cc basestring for py3
this closes #262
2017-10-06 15:49:19 +02:00
Anders Granskogen Bjørnstad d14d63dd5c IfcConvert: Fix bug with --bounds for SVG
`if(bounding_width)` evaluates to true as long as `bounding_width` is
non-zero (including negative values). Since `bounding_width` and
`bounding_height` are default initialized to -1.0, we were erroneously
setting a bounding rectangle of (-1.0, -1.0) here. This means the SVG
output has been broken/malformed if we didn't specify --bounds.
2017-10-06 15:49:07 +02:00
Thomas Krijnen 34d04c0da7 Add test case 2017-10-06 15:41:39 +02:00
Thomas Krijnen 6c4fee1028 Color elements by material association. Reimplement reuse detection. Fix #265 2017-10-06 15:36:51 +02:00
Thomas Krijnen ada503dbf1 Fix #266 2017-10-02 10:22:57 +02:00
Thomas Krijnen 8d0c95a939 Fix typo 2017-09-26 21:16:44 +02:00
Thomas Krijnen 7ba0b04031 Set mmacosx-version-min to 10.9 for OCCT
See https://github.com/openMVG/openMVG/issues/316#issuecomment-332142824
2017-09-26 11:43:03 +02:00
Thomas Krijnen 688a652bc1 Fix #261 2017-09-25 14:57:49 +02:00
Thomas Krijnen d839238949 Yet another repetition for cyclic symbol references 2017-09-24 22:15:33 +02:00
Thomas Krijnen f91ac2b375 Add py 3.6.2 to build-all.py 2017-09-24 13:37:14 +02:00
thomas.guenet 8792a8d750 CMakeLists.txt: add icui18n library for linux compilation 2017-09-22 11:56:10 +02:00
Thomas Krijnen f981c43042 More robust file download 2017-09-18 14:51:58 +02:00
Thomas Krijnen 8c26037f84 Fix null dereference 2017-09-17 20:22:29 +02:00
Thomas Krijnen 96ec925f31 Spatial Querying: Implementation of BVH tree for IFC files using NCollection_UBTree (#130)
* Implementation of BVH tree for IFC files using NCollection_UBTree

* Fixes for gcc and OCCT < v6.8

* Enable BVH selection by TopoDS_Shape

* Small fixes to tree

* Merge conflicted files and other changes

* Eliminate one warning (some remain) + add tree test
2017-09-13 13:16:58 +02:00
Thomas Krijnen ee16deabe5 Fix #38 2017-09-10 17:15:04 +02:00
Thomas Krijnen 4f31b9467a Fix #248 2017-09-10 16:59:05 +02:00
elmir f6645b19ef don't assign ID to Simple types
When adding entities, don't assign ID to Simple types.
Otherwise that type will be serialized incorrectly.

This fixes the issue with IFCPLANEANGLEMEASURE being serilzed
incorrectly when used as attribute to IFCMEASUREWITHUNIT.

With ID assigned, it will look like this:

  #10=IFCMEASUREWITHUNIT(#9=IFCPLANEANGLEMEASURE(0.017453293),#8);

The correct way to serialze is:

  #10=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.017453293),#8);
2017-09-09 14:00:57 +02:00
Thomas Krijnen f2dbf7d063 Improve composite curve error message 2017-09-09 13:29:39 +02:00
Thomas Krijnen 49e5f2944c Rebuild generated source files 2017-09-08 17:26:24 +02:00
youaresoomean fae9661efd Update IfcParse.h (#256) 2017-09-08 17:18:11 +02:00
youaresoomean b90b39a894 Update templates.py 2017-09-08 17:17:50 +02:00
Stinkfist0 c7c5e692d3 IfcConvert --version: print also OCC version. 2017-08-27 16:11:54 +02:00
Stinkfist0 93c2ca6267 CMakeLists.txt: Add ws2_32.lib to OPENCASCADE_LIBRARIES on Win32 as OCCT might require this depending on the used version and build configuration. Closes #250. 2017-08-27 16:11:54 +02:00
Thomas Krijnen 430ab54602 ifcopenshell.file.from_string() 2017-08-22 10:16:07 +02:00
Luke Brooks 08522c9fd7 ifcopenshell.file.from_string() (#246) 2017-08-22 10:15:02 +02:00
Anders Granskogen Bjørnstad 475b8554a8 Site local placement (#240)
* ifcgeom: Add placement_rel_to for convert()

Change geometry conversion in `convert()` for `ObjectPlacement` such
that we can stop the `PlacementRelTo()` recursion when we hit an
`ObjectPlacement` that places a certain type, e.g. a `IfcSite'.

Introduce a new IteratorSetting `SITE_LOCAL_PLACEMENT` which will be
exposed in `IfcConvert`.

* IfcConvert: Add --site-local-placement

Some IFC authoring tools may put the global origo at a large distance
away from the actual building geometry. Also, the global X- and Y-axes
may be at arbitrary angles with natural building axes. Using
--center-model or --model-offset may place the converted geometry closer
to origo, but will still use the global IFC definition of axis
directions. Also, in a scenario with multiple IFC files for one
construction site, using --center-model on each of them would not
generate consistent geometry across OBJ or DAE files.

Solve this by introducing --site-local-placement which will disregard
the ObjectPlacement at the IfcSite level.
2017-08-19 17:21:10 +02:00
Thomas Krijnen 7bea054c1e get_log in python 2017-08-19 16:54:06 +02:00
Thomas Krijnen 490c35bf60 Fix #244 and provide instances by entity type without subtypes 2017-08-16 21:46:39 +02:00
Stinkfist0 b019ff6aed build-deps.cmd: fix URL for Git download (TortoiseGit doesn't contain Git) 2017-08-16 14:12:12 +02:00
Thomas Krijnen 4c6ca83528 Add option to build with OCCT 7.1 in nix build script 2017-08-13 13:13:26 +02:00
Thomas Krijnen 9ba5e8fd88 Add win build script occt patches 2017-08-12 10:53:28 +02:00
Thomas Krijnen 2e36793af2 win build script OCCT 7.1.0 2017-08-12 10:29:23 +02:00
Thomas Krijnen e3d2621ea9 Alternative for CTRL+C in win build script 2017-08-12 10:28:05 +02:00
Thomas Krijnen ebfe8f9c54 Take into account Position is optional in IFC4 when processing layersets on slabs 2017-08-09 17:01:10 +02:00
Thomas Krijnen 132e5d5f6e Disable log_notice message on exceeding tolerance values 2017-08-09 17:00:41 +02:00
Thomas Krijnen 62794d4b07 Unused variable warning 2017-08-09 12:55:03 +02:00
Thomas Krijnen fd7f6e1f26 IfcIndexedPolyCurve 2017-08-05 12:39:15 +02:00
Thomas Krijnen b00acd3f67 only convert length unit if units are present in both files 2017-08-04 16:31:34 +02:00
Thomas Krijnen f12d8eeaa6 by_guid() and unicode in py2 2017-08-04 16:31:10 +02:00
Thomas Krijnen 85524170dd More advanced entity_instance.get_info() 2017-08-04 16:30:43 +02:00
Thomas Krijnen c67de4bbb3 Mark attributes as 'derived in supertype' also in getArgumentType() 2017-08-04 16:29:26 +02:00
Thomas Krijnen 36c52b3bea Update tests 2017-08-02 16:09:20 +02:00
Thomas Krijnen ceff8a8822 Fixes for IfcEntityInstanceData copy construction 2017-08-02 16:09:01 +02:00
Thomas Krijnen a58f23fae2 Missing introspection methods in Python 2017-08-02 16:08:07 +02:00
Thomas Krijnen b696df0da1 Missing semicolons in header 2017-08-02 16:07:30 +02:00
Thomas Krijnen 94224411a9 Recursive get_info() 2017-08-02 16:06:27 +02:00
Thomas Krijnen 5c7e7cab1a Raise IndexError 2017-08-02 16:05:56 +02:00
Thomas Krijnen 29323e4f74 Fix recursion in traverse() 2017-08-01 19:07:46 +02:00
Thomas Krijnen aa0a6aa5d1 Fix #178 2017-08-01 16:45:11 +02:00
Thomas Krijnen d10efe69cd Fix typo in test 2017-07-27 15:53:06 +02:00
Thomas Krijnen fb1fed247e Fix #243 2017-07-27 10:21:37 +02:00
Thomas Krijnen 59d7e0cad3 nix build script: fix compilation of boost.iostreams, disable USE_MMAP 2017-07-25 16:27:13 +02:00
Thomas Krijnen ae0afe2c0a mmap #22 2017-07-25 16:27:13 +02:00
Thomas Krijnen 3edb057178 Bring back id() to python wrapper. Fixes #241 2017-07-17 18:10:28 +02:00
Thomas Krijnen 04e3018f3c Use default logger 2017-07-17 18:09:49 +02:00
Thomas Krijnen f81616a6fb Narrow and wide unicode builds in nix build script 2017-07-03 20:42:18 +02:00
Thomas Krijnen f58539d6d8 Construct not only allocate token buffer 2017-07-03 20:39:40 +02:00
Thomas Krijnen 90bdf03f54 Disable exception 2017-07-03 16:38:04 +02:00
Thomas Krijnen 6e87a21806 Ignore some methods in wrapper to fix build 2017-07-03 15:43:56 +02:00
Thomas Krijnen d94eb9a96e IfcMaterialList in XML output 2017-07-03 15:18:07 +02:00
Thomas Krijnen ac5800326b Fix compilation on gcc 2017-07-03 14:42:08 +02:00
Thomas Krijnen 901ef57d60 Fix #180 2017-07-03 14:18:56 +02:00
Thomas Krijnen b604e5cf99 Fix #204 2017-07-02 19:57:10 +02:00
Thomas Krijnen 1e79eb535a Build comprehensive representation id. Fix #225 2017-06-28 15:59:03 +02:00
Thomas Krijnen 6f7afd4b2a Build comprehensive representation id. Fix #225 2017-06-28 15:24:49 +02:00
Thomas Krijnen a90936a7de Properly initialize parsed simple types 2017-06-24 21:35:38 +02:00
Thomas Krijnen 7c1cf6ebd0 Fix #233 2017-06-24 13:36:26 +02:00
Stinkfist0 7eb1346407 IfcConvert: prevent doing IfcFile::Init() "prematurely", e.g. before some additional program option parsing that might fail. 2017-06-23 14:12:07 +02:00
Stinkfist0 771b1f3d3c IfcConvert: consistent style for user error prints. 2017-06-23 14:12:07 +02:00
Stinkfist0 3fb96cad0b IfcConvert: make sure to delete temp file if no actual conversion occurs. Also fixes serializer memory leaks. Closes #199.
C
2017-06-23 14:12:07 +02:00
Thomas Krijnen 23beb096a0 Remove auto keywords 2017-06-20 19:47:53 +02:00
Thomas Krijnen 101ef69ae9 Fail serialize() if one of the faces cannot be mapped to IFC (2x3) 2017-06-20 18:55:52 +02:00
Thomas Krijnen e60202b738 Unique filter on IfcEntityList 2017-06-20 18:54:55 +02:00
Thomas Krijnen 1e8b1d9c9c traverse() as a global function rather than method on IfcFile 2017-06-20 18:54:30 +02:00
Thomas Krijnen a27e516011 Elided argument in ifcopenshell.file constructor 2017-06-20 18:53:39 +02:00
Thomas Krijnen 69c8b7c1c8 One more boost::blank() refactoring 2017-06-20 18:52:56 +02:00
Thomas Krijnen c25cff6bad Correct setting attributes on lazily loaded instances 2017-06-15 14:12:03 +02:00
Thomas Krijnen 48a61219f7 Fix #228 2017-06-14 12:42:38 +02:00
Stinkfist0 84813084d0 Fix/suppress signed-unsigned integer conversion warnings. 2017-06-05 19:53:10 +02:00
Thomas Krijnen 5e0da9725a ifcparse refactoring (#190)
Unify attribute containers, provide latebound attribute access on IfcBaseEntity, more basic tests on Travis
2017-06-05 17:26:58 +02:00
Thomas Krijnen 9a43658716 Correct verbosity check 2017-06-05 13:08:07 +02:00
Stinkfist0 f3f4c41f8d IfcConvert: add --no-progress option to suppress possible progress bar type of prints that use carriage return. 2017-06-05 11:41:55 +02:00
Stinkfist0 273c977f66 Remove extraneous spaces in geom filter description prints. 2017-06-05 11:41:55 +02:00
Stinkfist0 0adcb9ae20 IfcConvert --filter-file: Specifies a filter file that describes the used filtering criteria. 2017-06-05 11:41:55 +02:00
Thomas Krijnen 1751cf1c95 Generate example models on Travis 2017-06-05 11:29:23 +02:00
Thomas Krijnen 1704862d0d Correct test for when to reuse representation in iterator 2017-06-05 11:08:07 +02:00
Janus Troelsen d7c275e941 use boost's blank instead of none_t 2017-05-23 12:48:17 +02:00
Stinkfist0 1b9a28d799 CMakeLists.txt: fix Windows/MSVC lib search when only Debug versions of libs are found. 2017-05-20 20:19:15 +02:00
Stinkfist0 68b432f6c0 CMakeLists.txt: fix add_debug_variants() to work on Debug build. Re: #201 [ci skip] 2017-05-20 20:19:15 +02:00
Thomas Krijnen af2799acd4 Matrix multiplication in OCC rather than boost::ublas (re #211) 2017-05-20 19:50:10 +02:00
Thomas Krijnen c093dc0335 Merge pull request #211 from mitmadness/feature/hierarchy
Represent hierarchy in Collada files
2017-05-20 19:46:56 +02:00
Balleux Benjamin 834e05a01c Feature : For each parent element, include the type in the name if --use-element-types if used 2017-05-18 11:26:19 +02:00
Balleux Benjamin 4680298bee Clean : Remove debug logs 2017-05-16 16:34:50 +02:00
Balleux Benjamin be39f30029 Fix : fix build error 2017-05-16 15:54:26 +02:00
Balleux Benjamin 3919c1f32e Feature : Retrieve the full hierarchy
(merged from hierarchyDevelop branch)
2017-05-16 15:30:57 +02:00
Balleux Benjamin e02bbefa68 Clean : Removed debug logs 2017-05-16 15:20:30 +02:00
Balleux Benjamin 5c497c8f6c Fix : Handle the case where the first representation element has 0 parent 2017-05-16 15:01:55 +02:00
Balleux Benjamin 942d34ee39 Feature : Retrieve the full hierarchy. Fix the placement of the objects.
Check slab->HasObjectType before using slab->ObjectType
2017-05-16 14:27:36 +02:00
Balleux Benjamin 45ec08f840 feature (WIP) : retrieve the full hierarchy. The placement of several objects still be incorect 2017-05-16 11:27:45 +02:00
Balleux Benjamin be3dbce9f4 feature (WIP) : retrieve full hierarchy
Bug : the element are not at the right location
2017-05-15 17:45:05 +02:00
Stinkfist0 20c189c321 set-python-to-path.bat: fix for command for quoted filename 2017-05-13 14:03:15 +02:00
arzezniczak 97c5126a77 Authenticated proxy support for DownloadFile
DownloadFile subroutine gets credentials from system settings.
2017-05-13 14:02:42 +02:00
Balleux Benjamin ff64ce1e0e Fix : change wrong namespace 2017-05-11 14:02:34 +02:00
Balleux Benjamin 4f6e8a7d56 Fix : Change wrong namespace 2017-05-11 13:27:00 +02:00
Balleux Benjamin 93ece6b3ea Fix : Add missing include 2017-05-11 11:49:25 +02:00
Balleux Benjamin ced9d8c917 Merge branch 'feature/hierarchyDevelop' into feature/hierarchy 2017-05-11 11:22:11 +02:00
Balleux Benjamin ef0e9d9eb4 Feature : Handle every IfcSlabTypeEnum (3 were missing) and sort the floors by elevation 2017-05-09 15:55:37 +02:00
Balleux Benjamin 3c2fbcc4e1 Feature : Handle every IfcSlabTypeEnum (3 were missing) and sort the floors by elevation 2017-05-09 15:54:21 +02:00
Balleux Benjamin a6ffa7fc42 Fix : fill the storey property of an Element with NULL when we don't find any IfcBuildingStorey parent 2017-05-09 14:40:23 +02:00
Thomas Krijnen 0f825b7050 Fix missing import 2017-05-03 15:10:20 +02:00
Stinkfist0 845dd13870 Windows/MSVC: Fix OCCT deployment on VS 2017. 2017-05-03 14:13:24 +02:00
Thomas Krijnen d713b7e06a Limit retries for boolean op on OCCT 6.9 and higher 2017-05-03 12:07:10 +02:00
Tristan Zimpfer e3e4fba63a Clean of the double declaration of IfcSlabTypeEnum. 2017-04-26 10:59:07 +02:00
Tristan Zimpfer 78b904dfeb Differentiate slab types when option --use-element-types is used. 2017-04-26 10:28:38 +02:00
Thomas Krijnen 00c70fa8fb IfcOpenHouse fixes for IFC4 2017-04-25 17:38:59 +02:00
Thomas Krijnen d34c3b4b20 Example for #209 2017-04-25 16:53:35 +02:00
Thomas Krijnen 033075f809 Fix #208 2017-04-25 16:37:50 +02:00
Balleux Benjamin 1d8f6addf8 Get the information on the IfcSlab (floor or roof..) and put it in the element name.
To be cleaned
2017-04-25 16:27:14 +02:00
Balleux Benjamin 26a9167eea Add coments 2017-04-25 11:55:09 +02:00
Balleux Benjamin 5fae7a5992 Merge branch 'feature/hierarchy' of https://github.com/mitmadness/IfcOpenShell into feature/hierarchy 2017-04-25 10:13:37 +02:00
Balleux Benjamin 7edca081bf Raise an error when the option --use-element-hierarchy is used with a file different of .dae 2017-04-25 10:13:18 +02:00
Tristan Zimpfer 08e4d16f28 Modified the condition checking if the parent had changed so an object without parent isn't placed in a storey. 2017-04-21 18:05:35 +02:00
Tristan Zimpfer 470e8e772e Comments + conditions for sorting the deferred objects added. 2017-04-21 16:15:41 +02:00
Balleux Benjamin ea609af394 comments added 2017-04-21 16:02:13 +02:00
Balleux Benjamin 8ac18752b2 Remove temp file 2017-04-21 15:59:54 +02:00
Balleux Benjamin 95acd4c517 Clean : remove debug lines
Find the floor of an element in the IfcGeomIterator class
2017-04-21 15:49:34 +02:00
Balleux Benjamin 7ce795def3 clean WIP 2017-04-20 15:06:49 +02:00
Balleux Benjamin 8e4febecc0 clean : Remove the debug print
debug : don't display the name of the element in unity anymore
2017-04-19 16:38:35 +02:00
Balleux Benjamin 195979d4f0 Merge branch 'feature/hierarchy' of https://github.com/mitmadness/IfcOpenShell into feature/hierarchy
# Conflicts:
#	src/ifcconvert/ColladaSerializer.cpp
2017-04-19 15:09:59 +02:00
Balleux Benjamin ab0e47c55f Options added : --use-element-types and --use-element-hierarchy 2017-04-19 12:07:03 +02:00
Tristan Zimpfer 9f362853d6 Added a matrix for the parent node and a better id. 2017-04-19 11:48:52 +02:00
Tristan Zimpfer 79e1e0ec04 Hierarchy v1 2017-04-13 16:39:36 +02:00
Tristan Zimpfer f446f25cee Sort DeferredObject. 2017-04-12 17:28:29 +02:00
Balleux Benjamin a02b189f69 Bug Fix : the previous commit made the program crash when an object has no parent 2017-04-12 16:11:37 +02:00
Balleux Benjamin 8312853b99 add parent property to deffered objects 2017-04-12 15:49:05 +02:00
Balleux Benjamin be326e13ed Send Hierarchy data to the serializer 2017-04-12 14:56:00 +02:00
Balleux Benjamin a2aa2bf9eb Send hierarchy data to the serializer WIP 2017-04-12 14:38:54 +02:00
Balleux Benjamin b9e9bfeceb Handle errors : when an object has no parent 2017-04-12 13:36:12 +02:00
Stinkfist0 dd8ee915c3 ifcwrap/CMakeLists.txt: as PYTHONLIBS_FOUND and PYTHONINTERP_FOUND cannot seem to be trusted, perform further checks to see whether the packages were actually found or not.
E.g. one can doo set PYTHONHOME=C:/NoPythonHere
and when running CMake it will happily report:
-- Found PythonLibs: C:/NoPythonHere/libs/python34.lib
2017-04-12 10:39:41 +02:00
Stinkfist0 7fdbc9811d src/ifcwrap/CMakeLists.txt: use PYTHON_INCLUDE_DIRS instead of the deprecated PYTHON_INCLUDE_PATH 2017-04-12 10:39:41 +02:00
Stinkfist0 2edf867818 Use boost functions for string manipulation instead of std ones in order to silence char-int conversion warnings on VS 2017. 2017-04-12 10:39:41 +02:00
Stinkfist0 e4a7d2a149 Windows/MSVC build scripts: support for VS 2017 CMake generators, update Boost to 1.63.0, update ICU download to 58.2 in order to have VS 2107 download available, configure Boost using generic MSVC instead of specific version, make sure to 'git fetch' before 'git checkout <revision>'. 2017-04-12 10:39:41 +02:00
Balleux Benjamin 37f7fbecca Retrieve the type and the hierarchy of the IFC and write it in the .dae files 2017-04-11 17:26:30 +02:00
Alexandre Lemire 0f993b32f4 Fix generation of IfcOpenHouse.ifc which doesn't have its ground representation. See #200 2017-04-07 12:29:38 +02:00
Thomas Krijnen f71ee35f57 More 'tolerant' to tolerances higher than the modeling precision 2017-04-03 14:55:34 +02:00
Thomas Krijnen 1856c499b7 Fix misalignment between enum and boost::variant. See #200 2017-04-03 11:41:14 +02:00
Thomas Krijnen 06cad59fa2 Fix missing python module installation 2017-03-24 10:11:44 +01:00
Thomas Krijnen 8e69f84430 Trigger license redetection 2017-03-19 09:47:28 +01:00
Thomas Krijnen 9e3fe84c66 Trigger license redetection 2017-03-19 09:46:07 +01:00
Thomas Krijnen 9ad68db0dc set OCE_VERSION, executable flags in win build script 2017-03-12 11:38:23 +01:00
Thomas Krijnen 40f3447ad1 Update dependency versions in nix build script 2017-03-09 14:36:00 +01:00
Thomas Krijnen c8cc8ab1c8 Resolve python library linking issues on OSX 2017-03-09 13:59:54 +01:00
Thomas Krijnen 4faa66f9b8 Fix for python 2.7 2017-03-09 12:04:07 +01:00
Thomas Krijnen 5705f24f3e python: make logging import conditional in case time is not built 2017-03-09 11:47:54 +01:00
Thomas Krijnen 52d035d09a python: don't import platform module as it may depend on select which might be unavailable 2017-03-09 10:16:22 +01:00
Stinkfist0 921e343187 Fix assertion. Closes #192 2017-03-08 09:31:51 +01:00
Thomas Krijnen 50ea73a28f Update IfcConvert help text 2017-03-04 14:16:54 +01:00
Stinkfist0 3275119d1d TokenFunc::asStringRef: protect against null token. 2017-03-04 13:54:19 +01:00
Stinkfist0 026b4853a2 IfcConvert: single point for IFC file parsing and potential parsing error reporting. 2017-03-04 13:54:19 +01:00
Stinkfist0 cd132473f5 IfcConvert: instead of global --traverse option provide --include+ and --exclude+ options that control traversal on per filter basis. 2017-03-04 13:54:19 +01:00
Stinkfist0 06c1ea9d2c Doc tweaks [ci skip] 2017-03-04 13:54:19 +01:00
Stinkfist0 b058647d46 IfcLogger: convenience shorthands Notice(), Warnings() and Error() 2017-03-04 13:54:19 +01:00
Stinkfist0 8e44290341 string_arg_filter: make sure the argument type is string 2017-03-04 13:54:19 +01:00
Stinkfist0 5d7b392415 IfcGeomIterator: use fully qualified symbol for filter_t to fix SWIT code generation + fix getObject() 2017-03-04 13:54:19 +01:00
Stinkfist0 0383221d00 IfcConvert: print information about the used filters. 2017-03-04 13:54:19 +01:00
Stinkfist0 678d422ec8 Fix errors in rebase merge. 2017-03-04 13:54:19 +01:00
Stinkfist0 eade74c919 Fix --traverse --exlucde=<entities|layers> + clean up duplicate code. filter::traverse_match: dynamic_cast instead of static_cast as the decomposing entity is not guaranteed to be IfcProduct 2017-03-04 13:54:19 +01:00
Stinkfist0 9074f25e93 Fix --exclude=arg when --traverse used also. 2017-03-04 13:54:19 +01:00
Stinkfist0 4b5790e83a IfcConvert: minor cleanup + fix guid exclusion filter's value population. 2017-03-04 13:54:19 +01:00
Stinkfist0 470b08cd04 IfcConvert: output regular prints to cout instead of cerr. 2017-03-04 13:54:19 +01:00
Stinkfist0 d88c93a150 Cleaning up geom filters. 2017-03-04 13:54:19 +01:00
Stinkfist0 7101ac22c8 Refactor template class arg_filter into string_arg_filter instead, support for IfcProxy.Tag (untested, did not find suitable test input yet). 2017-03-04 13:54:19 +01:00
Stinkfist0 1b7d38a56d support for IfcConvert -include=arg <Description|Tag> (for IfcElement.Tag, not yet for IfcProxy.Tag). 2017-03-04 13:54:19 +01:00
Stinkfist0 de5864fc72 IfcConvert: change syntax of --<include|exclude>=<names|guids> to --<include|exclude>=arg <Name|GlobalId>. The plan is to support arbitrary arguments in the future. 2017-03-04 13:54:19 +01:00
Stinkfist0 195d68cd0a Generalize IfcGeom::Iterator filtering and move make the filter specification external to the Iterator. 2017-03-04 13:54:19 +01:00
Stinkfist0 d8a11dd096 Refactoring and cleaning up geom iterator filtering. 2017-03-04 13:54:19 +01:00
Stinkfist0 63b0488909 Implement filtering created geometry by layer assignments. 2017-03-04 13:54:19 +01:00
Stinkfist0 3abee03b9b Filtering by entity GUID and layer name w.i.p. 2017-03-04 13:54:19 +01:00
Stinkfist0 f1709dc71a IfcConvert/IfcGeom: Possibility to include and exclude simultaneously by type and name, w.i.p. 2017-03-04 13:54:19 +01:00
Carles 6b2c8ad23e Update vs-cfg.cmd
prepend win/utils path instead of append it.
It should force the build-deps.cmd to call 7za.exe within utils and not any other old-version that users might already have. 
Discussed in https://sourceforge.net/p/ifcopenshell/discussion/1782717/thread/53803197/
2017-02-23 15:48:37 +01:00
Thomas Krijnen 8ce4bbdf61 Adaptive tolerance boolean ops 2017-02-16 15:54:34 +01:00
Thomas Krijnen e2cf5f4826 Typo in build script 2017-02-16 15:53:58 +01:00
Thomas Krijnen 332a9a571f Special case the normal at the poles of a spherical surface 2017-01-24 14:56:28 +01:00
Thomas Krijnen ac9505506c Extend IfcGeomServer with calculated quantities 2017-01-22 16:09:14 +01:00
Thomas Krijnen 257c28d450 Take into account IfcTrimmedCurves with unspecified preference 2017-01-22 11:06:36 +01:00
Thomas Krijnen f95ad29c7a Extra check for single-face IfcConnectedFaceSets. Fixes #181. 2017-01-19 10:42:03 +01:00
Thomas Krijnen 93c2f93c44 Download PCRE from sourcefore in nix build script. Fixes #182 2017-01-19 10:24:09 +01:00
Stinkfist0 77d53429e3 Make sure to link ifcwrap to Boost libs + fix integer conversion warning. 2017-01-14 20:13:46 +01:00
Stinkfist0 fa76aa9bb0 IfcConvert: add --unicode=utf8|escape when UNICODE_SUPPORT enabled. 2017-01-14 20:13:46 +01:00
Stinkfist0 f0e07f3447 Add status prints for writing XML output. Re: #122 2017-01-14 20:13:46 +01:00
Stinkfist0 80f0ff688d IfcConvert: add --model-ofset x;y;z option. Remove SerializerSettings::CENTER_MODEL as unneeded. 2017-01-14 20:13:46 +01:00
Stinkfist0 222cbe73d3 Use unnamed enum instead of static const member variable for SerializerSettings::DEFAULT_PRECISION in order to fix compilation on GCC & Clang. 2017-01-14 20:13:46 +01:00
Stinkfist0 ecff54c480 IfcConvert --precision option.
Sets the decimal precision to be used to format floating-point values, 15 by default.
Use a negative value to use the system's default precision (should be 6 typically).
Applicable for OBJ and DAE output. For DAE output, value >= 15 means that up to 16 decimals are used,
and any other value means that 6 or 7 decimals are used.
2017-01-14 20:13:46 +01:00
Stinkfist0 2d58a1bc7c Separate serialization-specific settings from IteratorSettings into its own class, SerializerSettings. 2017-01-14 20:13:46 +01:00
Thomas Krijnen 5667f3f94a build script changes for boost 2017-01-09 13:10:01 +01:00
Jelle Feringa 5d6160b47a log exceptions on get_info method
these exceptions currently are actively being hidden, which is
intransparent / could make debugging challenging

improved formatting tot pep8
2017-01-04 10:26:04 +01:00
Stinkfist0 37905c6725 Windows/MSVC: support spaces in the IfcOpenShell build directory's path. re: #171 2017-01-01 18:16:56 +01:00
aahoo 99bde93af5 adds get_info method for class #resolves #175 2017-01-01 18:15:55 +01:00
Thomas Krijnen e6ff78fa29 Size() -> Length() 2016-12-10 15:39:20 +01:00
Thomas Krijnen c08aa3216d Fix #163 Disallow narrow IfcPolygonalBoundedHalfSpace 2016-12-10 14:11:01 +01:00
Thomas Krijnen da0b350378 Fix #140 2016-12-09 16:51:03 +01:00
Thomas Krijnen 4354361a13 More elaborate wire ordering check and shell sewing code (#147) 2016-12-09 16:40:14 +01:00
Thomas Krijnen 51409aff8f Fix #87 2016-12-09 16:33:06 +01:00
Thomas Krijnen c94ed73b8d Incorporate console into main app, fallback to QPlainTextEdit, some styling 2016-11-28 17:46:57 +01:00
jakob-beetz 90e4f21f29 Interactive scripting pane added to pyQt viewer geom.app 2016-11-28 17:46:57 +01:00
jakob-beetz 3ba2f781d8 added a property panel tab to the PyQt geom.app viewer that shows all properties from IfcPropertySets attached to the currently selected object 2016-11-28 17:46:57 +01:00
Ali Kämäräinen aec20057c7 Fix build when USE_IFC4=1 (#160) 2016-11-18 12:43:14 +01:00
Thomas Krijnen 5c107eb165 Merge pull request #161 from IfcOpenShell/aothms-travis-2x3-4
Build Ifc2x3 and Ifc4 on travis
2016-11-18 12:42:50 +01:00
Thomas Krijnen 3d1ea31098 Build Ifc2x3 and Ifc4 on travis 2016-11-18 12:22:02 +01:00
Thomas Krijnen 3d24b67146 Fix #157 2016-11-17 16:05:28 +01:00
Thomas Krijnen 18c87b515b Install ifcopenshell binaries in nix build script 2016-11-13 20:27:22 +01:00
Thomas Krijnen 11a95e7045 Merge pull request #156 from aothms/nix_python_build_script
Nix python build script
2016-11-13 13:45:12 +01:00
Ali Kämäräinen 714a365942 IfcConvert/IfcGeom --traverse option (#159)
geometry filtering option for including/excluding decomposition and containment of filtered entities.
Usage example: IfcConvert Duplex_A_20110907.ifc Level1.dae --include --traverse --names "Level 1"
2016-11-13 13:44:38 +01:00
Thomas Krijnen 739bbcc744 Don't run build script on travis, doesn't complete in under 50m0s 2016-11-11 14:55:07 +01:00
Thomas Krijnen 6a275d04b9 Don't export TARGET_ARCH in nix build script 2016-11-09 11:12:29 +01:00
Thomas Krijnen e8ae491dc3 Type hint from schema when encountering empty aggregate. Fixes #127 2016-11-08 17:24:08 +01:00
Thomas Krijnen 8e2f528a99 Fix python build script 2016-11-06 19:07:25 +01:00
Carmen Fan 00215867c0 Fix matrix multiplication ordering for nested mapped items (#144) 2016-11-06 16:18:30 +01:00
Thomas Krijnen 1e86a31b81 Add nested_mapped_item.ifc test case, based on acad2010_objects.ifc 2016-11-06 16:15:52 +01:00
Ali Kämäräinen f0c4ce5753 Add layer information (IfcPresentationLayerAssignment) to IfcConvert's XML output. Closes #141 (#149)
Add layer information (IfcPresentationLayerAssignment) to IfcConvert's XML output. Closes #141
2016-10-31 18:21:25 +01:00
Thomas Krijnen ea514e9528 Fix #148 catch errors when computing model bounding box from product placements. 2016-10-25 10:11:14 +02:00
Thomas Krijnen 229b123798 Fix potential segfault in hierarchy helper 2016-10-09 12:45:17 +02:00
Thomas Krijnen 86c9d7074b Fix traversal of type relationships in IFC4 XML output 2016-10-09 12:44:37 +02:00
Thomas Krijnen bc000fcbab Fix additional warnings identified in #139 2016-10-09 12:42:39 +02:00
Ali Kämäräinen a171b2b9b0 Couple warning fixes (#139)
* Use -Wno-tautological-constant-out-of-range-compare for Clang (these warnings come from the sanity checks in generated IfcXXX files).

* Remove unused variable and typedefs + suppress uint->bool conversion warnings (MSVC) + add note about Clang in README

* MSVC uint->bool convesion warning fixes when IFC4 is defined
2016-10-09 12:39:47 +02:00
Thomas Krijnen 8a92e1a766 Speed up geometry generation in ifcopenshell.geom.application by using iterator pt2. 2016-09-22 13:45:32 +02:00
Thomas Krijnen efd6eb7f97 Speed up geometry generation in ifcopenshell.geom.application by using iterator 2016-09-22 13:40:39 +02:00
Thomas Krijnen 7ed98869d2 Update ifcopenshell.geom.app for pyocc-0.16.5
https://github.com/tpaviot/pythonocc-core/commit/3d7b9745359b436b4144105f7e17aa0040acb8c6
2016-09-13 14:05:28 +02:00
Karl-Philipp Richter 72d8b5377c ported nix/build-all.sh to python in order to be able to provide any feedback
for the user at all (shell scripts systematically are working against providing
any useful user feedback, so the port is the only option)
2016-09-12 15:50:39 +02:00
Thomas Krijnen 8efd9757b7 Check for null shapes among layer set slicing results 2016-09-01 15:13:48 +02:00
Thomas Krijnen a0f5a422e2 Fix #128. XML serializer. HasPropertySets is an optional attribute. 2016-09-01 14:47:27 +02:00
Thomas Krijnen 8a950b1475 Fix compilation of ifcopenshell-python in nix build script 2016-09-01 12:53:32 +02:00
Thomas Krijnen d2ce8d70b1 Add template disambiguation to make g++ happy 2016-09-01 12:42:12 +02:00
Thomas Krijnen ac1a8f6d16 Add types and placement to XML output 2016-09-01 11:59:43 +02:00
Thomas Krijnen 7883953290 Do not find PCRE in default paths on Windows 2016-09-01 11:40:49 +02:00
Ali Kämäräinen 64dc2ea95c Windows/MSVC + OCCT 7.0.0 (#124)
* Windows/MSVC build scripts: option to build and use official Open CASCADE instead of the community edition.

* Fix C4800 warnings ("'Standard_Boolean': forcing value to bool 'true' or 'false' (performance warning)") + unnecessary integer cast.

* build-deps.cmd: fix OCCT download

* Fix MSVC linking against OCCT 7.0.0. Example executables fail still, needs research.

* occt-V7_0_0-9059ca1_CMakeLists.txt: add_definitions(-DHAVE_NO_DLL) in order to fix static linking to OCCT. Mark IfcOpenShell patches in the OCCT patch files for clarity.

* Patch OCCT in order to fix compliaction when HAVE_NO_DLL is defind. Clean up IfcOpenSHell's linker warnings by defining HAVE_NO_DLL.

* CMakeLists.txt: remove linking to the newly added OCCT libs, these are not needed when HAVE_NO_DLL is defined.

* cmake/CMakeLists.txt: make add_debug_variants() function to handle filenames/paths also. Apply the coding conventions while at it. Fixes #123.

* Patch OCCT's OpenGl_PrimitiveArray.cxx and XCAFDoc_GeomTolerance.cxx in order to fix Debug build. Do not trigger OCCT rebuild each time build-deps.cmd is ran.

* build-deps.cmd: fix OCCT file patch copy.

* Non-MSVC compiler: use -Wextra, suppress/fix -Wignored-qualifiers warnings.

* build-deps.cmd: do not check return values of copy commands as they seem not to be fully reliable.
2016-09-01 11:28:17 +02:00
Ali Kämäräinen e064098f84 Build instructions and PCRE lib dir (#120)
* CMakeLists.txt: show fatal error if PCRE not found if COLLADA_SUPPORT is on.

* Compiling on *nix instruction tweaks.
2016-08-22 11:45:37 +02:00
Bernd Hahnebach 8dadb71648 Add OpenCollada to travis and fix cmake (#119)
* travis: collada support

* travis: opencollada, specify pcre library
2016-08-15 13:14:15 +02:00
Thomas Krijnen 9d757e1b3c Correct typo https://github.com/IfcOpenShell/IfcOpenShell/pull/114/files#r74275264 2016-08-13 10:51:04 +02:00
Thomas Krijnen 92032b6e3b Add travis status 2016-08-09 14:12:12 +02:00
Thomas Krijnen 202b226ea0 Silence compiler warning when without ICU 2016-08-09 14:09:44 +02:00
Bernd Hahnebach 1e8c7ef7f0 Travis 2016-08-09 14:03:26 +02:00
Thomas Krijnen 59035e7ce2 Merge pull request #114 from aothms/cmake_improvements
Cmake improvements: LINK_DIRECTORIES and OCCT 7
2016-08-08 13:40:38 +02:00
Thomas Krijnen 2c332199b1 Merge pull request #115 from aothms/tridify_ifcgeom_dll
Dllimport/export for IfcGeom. Closes #77
2016-08-08 13:40:09 +02:00
Thomas Krijnen ecf67fe939 IFC_PARSE_API for IfcInvalidTokenException after merge 2016-08-08 13:39:43 +02:00
Thomas Krijnen f1099fc3b1 Merge branch 'master' into tridify_ifcgeom_dll
# Conflicts:
#	cmake/CMakeLists.txt
2016-08-08 10:56:06 +02:00
Thomas Krijnen 16e8fff9ca virtual dtor 2016-08-08 10:41:51 +02:00
Stinkfist0 0f857283e8 CMakeLists.txt: append possible extra libraries to OPENCASCADE_LIBRARIES before the variable is used for any target. 2016-08-08 01:40:26 +03:00
Thomas Krijnen 1def5db7e4 Detect OCCT7 and set -std=c++11 accordingly. 2016-08-07 10:38:18 +02:00
Thomas Krijnen e9bd18fd4b Don't search default directories. Use absolute paths to specify libraries. 2016-08-07 10:37:29 +02:00
Stinkfist0 fb98275f50 Typo fix. 2016-08-06 19:08:13 +03:00
Stinkfist0 97a62f45d0 Fix IfcGeomWrapper.i and IfcParseWrapper.i 2016-08-06 18:19:27 +03:00
Stinkfist0 4ebee68736 Ifc2x3enum.h: fix header inclusion. 2016-08-06 13:44:35 +03:00
Ali Kämäräinen a26253321f Bash on Ubuntu on Windows instructions, readme and cmake improvements (#113)
* README.md: add note about Visual C++ Build Tools and Bash on Ubuntu on Windows. Enhance the Compiling on *nix instructions.

* Fix newline.

* README.md tweak

* CMakeLists.txt: remove CHECK_ADD_OCE_OCC_DEF INCLUDE() for good as these are not needed any more at all (OCE codebase also checked and no signs of these).
2016-08-06 10:45:29 +02:00
Thomas Krijnen 4b90e618b0 Add warning #109 2016-08-04 11:47:14 +02:00
Thomas Krijnen 21b35767ba Fix #109 2016-08-02 15:53:41 +02:00
Thomas Krijnen e6fbfee766 Check for existence of representation identifier in python wrapper create_shape 2016-08-02 15:44:42 +02:00
Stinkfist0 3cba5e6e94 Rename BUILD_SHARED_LIBS project-wide precompiler definition to IFC_SHARED_BUILD 2016-07-20 22:59:19 +03:00
Stinkfist0 6d6e7c2982 Unify IfcParse's dllimport/export macros with IfcGeom. 2016-07-20 22:49:32 +03:00
Thomas Krijnen fd4086aa8d Report errors in string escape sequences more verbosely 2016-07-19 16:41:36 +02:00
Ivano Ras cd2b0c3a05 fix #106. (#107) 2016-07-19 16:31:37 +02:00
Ivano Ras 42067de44c use union to remove warning (issue 105). (#108) 2016-07-19 16:29:01 +02:00
Thomas Krijnen 240133515a Unify usage of spaces in Python library code 2016-07-18 15:53:20 +02:00
Thomas Krijnen b7f23ee701 Implement option to get generic inverses from Python 2016-07-18 14:47:32 +02:00
Ali Kämäräinen 4a85e5e7a5 MSYS build scripts and instructions (#99) and warning fixes
* Preliminary MSYS2 + MinGW build scripts and instructions.

* CMakeLists.txt: MinGW tweaks, enforce C++03, suppress warnings for now.

* Fix some GCC warnings.

* Fix unused parameter warnings coming from Ifc*.h.

* Fix warning regarding unreachable code (++jt) on MSVC.

* Add IfcParse_EXPORT for IfcInvalidTokenException

* Fix potentially uninitialized pointer variables.

* Note about OpenCASCADE cyclic dependencies fix.

* GCC warning fix: don't generate 'current_enum' variable that is only set and not used for anything ever

* Work around -Wmaybe-uninitialized warnings about boost::optional constructs. Also prevent passing of negative values for --bounds.

* Remove unused variable.

* CMakeLists.txt: ENABLE_BUILD_OPTIMIZATIONS for GCC (simply enforce -03)
2016-07-15 05:49:32 +02:00
Stinkfist0 3a507ca061 Code doc tweak 2016-07-11 22:41:18 +03:00
Stinkfist0 6bcabfd567 Dllimport/export for IfcGeom. Closes #77 2016-07-11 22:37:50 +03:00
Thomas Krijnen 435eb7ae10 Update python module install script 2016-06-28 15:48:58 +02:00
Thomas Krijnen 17e153d0c5 Fix rename conflict after merge 2016-06-22 15:52:31 +02:00
Thomas Krijnen aebb9e324b Geometry serialization (#71)
Serialize geometry to IFC instances directly from a TopoDS_Shape
2016-06-22 15:03:18 +02:00
Thomas Krijnen 90ad3a4a93 Merge pull request #97 from aothms/dynamic_lib_fixes_2
Dynamic lib fixes
2016-06-22 14:57:16 +02:00
Thomas Krijnen 478bda30bc Install both libraries. Force IfcGeom to static on Windows. Correct IfcParse linkage. Update IfcMax 2016-06-22 14:54:55 +02:00
Thomas Krijnen 69535800b5 Do no silently drop invalid faces from IfcConnectedFaceSets 2016-06-21 11:27:59 +02:00
Thomas Krijnen ee2303d965 Support for IfcExtrudedAreaSolidTapered 2016-06-21 11:25:10 +02:00
Thomas Krijnen b792aba95f Support for *BrepWithVoids 2016-06-21 11:19:51 +02:00
Thomas Krijnen 8f55aa732d IfcParameterizedProfileDef.Position and IfcSweptAreaSolid.Position optional in IFC4 2016-06-21 11:18:16 +02:00
Thomas Krijnen 2c2be389fb Fix header parsing 2016-06-21 11:11:16 +02:00
Thomas Krijnen 62a0f21a57 Fix #94 2016-06-20 11:34:13 +02:00
Ali Kämäräinen 3c418e8e0a Windows batch script enhancements (#88)
* Make possible to invoke run-cmake.bat, build-ifcopenshell.cmd (now bat), install-ifcopenshell.cmd (now bat) directly from File Explorer or command prompt without VS env vars set, if BuildDepsCache file exists, by utilizing CMake's --build functionality. Do not delete CMakeCache.txt always now in order to keep the build options consistent.

* win/readme.md tweaks + make the line width smaller

* Windows batch files: use the last modified BuildDepsCache. Show an error if GEN_SHORTHAND does not exist.
2016-06-17 22:30:33 +02:00
Johannes Obermayr ea6fbc77dd Bring back logic for BUILD_SHARED_LIBS.
Also remove C++11 code.
2016-06-14 20:30:02 +02:00
Thomas Krijnen be10bc46ca More elaborate error reporting 2016-06-12 11:22:08 +02:00
Thomas Krijnen f4fd3a5ca1 Compiler warnings 2016-06-12 10:43:28 +02:00
Ali Kämäräinen 685717b8b8 Fix build of IfcWrap (#90) 2016-06-09 22:49:00 +02:00
stgatilov 8725c66306 Performance improvement of IfcParse tokenizer (#82)
* Applied MSVC tabify to IfcParse.cpp/h.

* Now Argument base class has throwing implementation for each conversion operator (removed those from derived classes).

* Added NullArgument class for the case when null arguments appear after setting elements.

* Now operator tokens are handled just like any other token.

* Refactoring: Token is now a struct with good fields, not a nameless pair.

* Now end position of token is set at its construction.

* Now type of token is determined on construction, as* function simply check stored type.

* Now int-s, float-s and some etc are parsed when token is created.

* Implemented simple way to remove spaces in parsing.

* Tokens are now created without allocations.

* Call RemoveTokenSeparators once for every token.

* Added temporary std::string object in lexer (for optimization purposes).

* Reimplemented asString without allocations.

* Parsing keywords without allocations.

* Added checks for type to tokenFunc::as*** functions.
2016-06-09 18:25:50 +02:00
Thomas Krijnen cbbdb61a0c Merge pull request #89 from aothms/dynamic_lib_fixes
Dynamic lib fixes (#79)
2016-06-09 10:51:05 +02:00
Thomas Krijnen b3167cf1e6 build script simplification 2016-06-09 10:48:43 +02:00
Thomas Krijnen 44f785cce0 Merge branch 'master' into dynamic_lib_fixes
# Conflicts:
#	cmake/CMakeLists.txt
2016-06-09 10:46:58 +02:00
Thomas Krijnen 8e998ec7db MSYS2 Mingw64 compilation (#84) 2016-06-09 10:39:27 +02:00
Thomas Krijnen fc50e6ac23 Revert change adding additional argument to ColladaSW::Scene constructor 2016-06-05 14:41:17 +02:00
Thomas Krijnen 815ed07192 MinGW fixes and warnings 2016-06-05 14:03:03 +02:00
Thomas Krijnen 009870135f Merge branch 'pr/78' into mingw 2016-06-05 14:01:55 +02:00
Stinkfist0 dbc59fe346 Add .vscode to ignored files 2016-06-03 10:03:58 +03:00
Stinkfist0 08aeb80f58 Make set-python-to-path.bat callable from outside locations 2016-06-02 14:39:29 +03:00
Stinkfist0 7f2729c956 .gitignore: ignore __pycache__ in general 2016-06-02 14:36:55 +03:00
Stinkfist0 4d6e25fb69 Also mark the full URL source for Ifc2x3* files 2016-06-02 14:36:09 +03:00
Stinkfist0 37aadcbfbf Update the source information for Ifc4* files 2016-06-02 14:20:12 +03:00
Stinkfist0 74a3f131be Make IfcException's dtor and what() virtual 2016-05-31 17:08:39 +03:00
Stinkfist0 77b72a9dde IfcException.h: suppress C4275 warnings 2016-05-31 14:45:22 +03:00
Stinkfist0 c644ffbe5e Move wildcard_string_to_regex() from IfcParse to IfcGeom as it's not really related to parsing IFC at all. 2016-05-31 14:04:44 +03:00
Stinkfist0 aa03da20a8 Bump up non-MSVC compiler's warning level to a level somewhat similar to MSVC. 2016-05-30 17:44:36 +03:00
Stinkfist0 42acc7224c Add couple missing IfcParse_EXPORTs + add a missing license information 2016-05-30 17:12:53 +03:00
Stinkfist0 53fadd9808 CMakeLists.txt: document usage of IFCDIRS. 2016-05-30 15:29:45 +03:00
Thomas Krijnen 4afc568a41 Remove unsupported feature from IfcGeomServer 2016-05-30 14:14:45 +02:00
Stinkfist0 906fefaf35 Fix installation of IfcParse DLL. 2016-05-30 15:12:07 +03:00
Stinkfist0 90a2c445ea Fix broken build of the project when BUILD_SHARED_LIBS=1 2016-05-30 13:54:24 +03:00
Stinkfist0 cae24a9492 Fix warnings regarding unused variables. 2016-05-30 13:44:03 +03:00
Stinkfist0 8b3d581131 README: IFC4 -> IFC4 Add1 2016-05-30 13:20:03 +03:00
Stinkfist0 c13eb9e131 The usual way of doing MSVC dllimport/export. Add a warning print if building as DLL against the static VC-runtime. 2016-05-30 01:09:39 +03:00
Fredounet 3b169219af MSYS2 Mingw64 compilation. Compilation successful considering everything but the following:
- IFC4 (only IFC2x3 tried; should work)
- VLD
- IfcMax
- shared libraries
2016-05-29 17:58:03 +01:00
Thomas Krijnen 83243ec514 IFCPARSE_STATIC_DEFINE only when BUILD_SHARED_LIBS is not set 2016-05-29 14:18:18 +02:00
stgatilov b5c4eb3b6f IfcParse dynamic linking, IFCPARSE_NO_REGEX, fixes for three memory leaks (#76)
* CMake: moved setting link directories before all the projects.

* Added IfcParse_Export header for declaring export macro.

* Added IFCPARSE_STATIC_DEFINE macro to all projects.

* Added include for export macro to swig file.

* Added IfcParse_EXPORT macro for all classes in headers generated by express parser.

* Allow removing boost.regex dependency by defining macro IFCPARSE_NO_REGEX.

* Fixed bug in deletion of ICU converter.

* Added export macro to most of the classes across headers

* Fixed memory leak: delete nested IfcAbstractEntity in EntityArgument.

* Fixed memory leak in destructor of IfcWritableEntity (args values).
2016-05-29 14:12:57 +02:00
Thomas Krijnen a298903fdd IfcGeomServer settings 2016-05-28 16:08:31 +02:00
Fredounet ccb24948df Merge pull request #1 from IfcOpenShell/master
Fresh-Upgrade-1
2016-05-28 09:43:59 +01:00
iNEHCi 5bdb4ce668 Add IfcReinforcingBar/IfcSweptDiskSolid generation example 2016-05-27 10:18:39 +02:00
Thomas Krijnen 9909e2f7e2 Don't emit OBJ vertex normal if absent (e.g --weld-vertices) 2016-05-24 15:01:34 +02:00
Thomas Krijnen 38d1ec7a78 #28 2016-05-24 13:50:50 +02:00
Thomas Krijnen 85ddae1228 Do not set wire tolerance prior to creating face 2016-05-24 12:51:00 +02:00
Thomas Krijnen 06c3f8d6a9 Record conversion status on IfcFaceBasedSurfaceModel 2016-05-24 12:50:32 +02:00
Thomas Krijnen b04ca74308 Derive minimal face area from modeling precision 2016-05-24 12:50:05 +02:00
Thomas Krijnen 7c0944e43b Defer pythonOCC imports in order not to break if unavailable 2016-05-19 13:31:54 +02:00
Thomas Krijnen a1c660f4ab Fix static linking 2016-05-19 11:34:04 +02:00
Thomas Krijnen 2a5974fde1 Remove superfluous error message 2016-05-18 17:28:58 +02:00
Thomas Krijnen e2ffd0b6d6 Fix IFC4 compilation 2016-05-18 17:15:44 +02:00
Thomas Krijnen 9bff4876c5 Don't apply rpaths on windows due to possible path separator conflicts 2016-05-15 15:51:12 +02:00
Johannes Obermayr 42188904af Fixes to build on openSUSE/Packman. (#67)
- Support different BINDIR, INCLUDEDIR and LIBDIR on install
- Take right python dir on x86_64 arch
- Fix build against Boost >= 1.58
- Make it possible to build libIfcGeom shared to reduce size of dependent binaries
- Fix INSTALL_RPATH
- Fix some more compiler warnings
2016-05-15 15:47:21 +02:00
Lars Moastuen 414d7bb810 OBJ precision and log messages
* Fixes #68: Increase precision in OBJ files (regression in commit 43f5d44)
* Add some verbose logging of a few geometry errors
2016-05-13 12:59:00 +02:00
Thomas Krijnen 01269e5dd5 Fix missing include for debug build 2016-05-11 14:01:38 +02:00
Ivano Ras 0253c1ddbe Extended error logging
Fixes #33
2016-05-11 10:56:40 +02:00
Thomas Krijnen 3f5d30f497 Merge pull request #65 from iras/nested_argument_list_bug
separated nested argument lists to avoid an error when compiling with…
2016-05-05 11:03:38 +02:00
iras 3d2ab25175 separated nested argument lists to avoid an error when compiling with gcc. 2016-05-05 08:09:45 +01:00
Thomas Krijnen d4dc933b99 Qualify auto keyword 2016-05-04 17:30:31 +02:00
Thomas Krijnen d54c1cdc9c Remove compiler warning 2016-05-03 16:32:36 +02:00
Thomas Krijnen c848a7dbe0 remove redundant type attribute on latebound entity instance 2016-05-03 11:24:26 +02:00
Thomas Krijnen 60cf4ab757 Additional check pertaining to face surfaces 2016-05-03 11:22:15 +02:00
Thomas Krijnen 2c3fa89dd0 Preprocessor consistency 2016-05-03 11:21:39 +02:00
Thomas Krijnen e9c7cf235b Fix compiler warning 2016-05-03 11:19:46 +02:00
Thomas Krijnen fefa8a0563 option to pass settings to pyqt4 app 2016-05-03 11:05:46 +02:00
Thomas Krijnen 04acfe1169 Fix #63 2016-05-03 11:01:47 +02:00
Thomas Krijnen 0e25787df3 Merge pull request #64 from aothms/layerset_slicing
Layerset slicing
2016-05-02 16:14:14 +02:00
Thomas Krijnen 3c3bee71d1 Don't process mapped items in case of material layer associations 2016-05-02 16:11:06 +02:00
Thomas Krijnen 37f0e09947 Fix compiler warnings 2016-05-02 15:56:08 +02:00
Thomas Krijnen 39e26dff46 Merge branch 'master' into layerset_slicing
# Conflicts:
#	src/ifcconvert/IfcConvert.cpp
#	src/ifcgeom/IfcGeom.h
#	src/ifcgeom/IfcGeomFunctions.cpp
#	src/ifcgeom/IfcGeomIteratorSettings.h
2016-05-02 15:13:30 +02:00
Thomas Krijnen 2f129556fd Merge pull request #47 from aothms/performance_improvements
Performance improvements
2016-05-01 20:43:37 +02:00
Thomas Krijnen a1d584796a Set reasonable defaults for caching behavior 2016-05-01 20:38:10 +02:00
Thomas Krijnen c6d5adfa42 Merge branch 'master' into performance_improvements
# Conflicts:
#	src/ifcexpressparser/implementation.py
#	src/ifcgeom/IfcGeomFunctions.cpp
#	src/ifcparse/Ifc4.cpp
2016-04-24 15:22:10 +02:00
Thomas Krijnen 1e262c8768 Update build script to install pyqt app 2016-04-23 11:42:11 +02:00
Thomas Krijnen d8919c50ab Fix serialization of list of list of entity instance 2016-04-19 16:44:08 +02:00
Thomas Krijnen 416b163050 Correct display_shape on TopoDS_Shape 2016-04-19 15:42:59 +02:00
Thomas Krijnen 1d1fb6d27a First steps towards a PyQt4 application 2016-04-17 15:27:05 +02:00
Thomas Krijnen 9fedbbff6d Only convert faces once if sewing shell fails pt.2 2016-04-17 15:12:02 +02:00
Thomas Krijnen 1c1097c8a4 Only convert faces once if sewing shell fails 2016-04-16 14:47:34 +02:00
Thomas Krijnen 884b3fe850 Project wires onto a plane if non-planar. Fixes #57. 2016-04-16 14:47:09 +02:00
Thomas Krijnen 81ee60079e Enable per-item styles in the pythonOCC viewer 2016-04-11 11:50:43 +02:00
Thomas Krijnen 426b1279e3 Implement __hash__ and __eq__ functions on entity_instance 2016-04-09 20:20:08 +02:00
Thomas Krijnen 1142db3265 remove msvc specific leniencies 2016-04-09 17:54:23 +02:00
Thomas Krijnen 191c029546 Correctly allow rule labels to be optional 2016-04-09 13:29:35 +02:00
Thomas Krijnen 9bcfe2f50e Generate code for IFC4_ADD1 2016-04-08 23:24:35 +02:00
Thomas Krijnen fa585e60ee Update EXPRESS code generator to work on ancient IFC schemas 2016-04-08 23:23:45 +02:00
Thomas Krijnen 0ff9de3cd9 Update EXPRESS code generator to work on ancient IFC schemas 2016-04-08 23:23:29 +02:00
Thomas Krijnen 63c3b54762 Merge pull request #56 from Tridify/obj_mtl_fix
Fix temp name usage of .mtl file
2016-03-28 11:17:20 +02:00
Stinkfist0 d7f990d8bd IfcConvert: Do not use temp file for MTL as it's such a small file. Fixes #55. 2016-03-28 11:47:21 +03:00
Stinkfist0 b59e8e22a7 IfcConvert: Show an error msg if renaming from temp to final file fails. 2016-03-28 11:47:02 +03:00
Thomas Krijnen 25a5135e8d Disable geometry re-use with world coords 2016-03-27 21:18:28 +02:00
Thomas Krijnen 4c574df1a4 Immediately emit to serializer and remove option to obtain ownership of objects 2016-03-27 21:17:51 +02:00
Thomas Krijnen f3d5954aee Merge pull request #53 from shsteven/fix_build_script_osx_boost
Fix build script under os x
2016-03-24 10:42:03 +01:00
Steven Zhang 7d145a5f69 fix build script under os x 2016-03-24 15:07:52 +08:00
Thomas Krijnen 5b30dfc580 Set required boost components again after merge 2016-03-23 10:27:34 +01:00
Thomas Krijnen e1bb6c95c3 Merge pull request #51 from shsteven/osx_build_fix
Fix build script under os x
2016-03-23 10:15:56 +01:00
Steven Zhang edc6f8ebd4 fix build script under os x 2016-03-23 15:27:03 +08:00
Thomas Krijnen ee56aad90d Merge branch 'master' into performance_improvements
# Conflicts:
#	src/ifcconvert/ColladaSerializer.cpp
#	src/ifcconvert/ColladaSerializer.h
#	src/ifcgeom/IfcGeomIterator.h
#	src/ifcgeom/IfcGeomRenderStyles.h
2016-03-22 16:15:28 +01:00
Thomas Krijnen 5c1ac39f19 Merge pull request #42 from Tridify/ifcconvert_enhancements
IfcConvert enhancements
2016-03-22 13:28:15 +01:00
Stinkfist0 0fd2f04f08 Utilise Collada stream's double precision feature 2016-03-21 11:42:40 +02:00
Stinkfist0 b171bd4a14 Add note/todo regarding Collada stream's double precision feature. 2016-03-20 13:13:15 +02:00
Stinkfist0 54a9d72e25 IfcConvert: use temp file when writing output. 2016-03-20 12:48:20 +02:00
Stinkfist0 798597d5d9 IfcConvert: check that input file exist early, print filenames in error prints 2016-03-18 22:33:03 +02:00
Stinkfist0 f7453c033a IfcConvert: check if output file already exists and ask user for confirmation for overwriting. Overwriting can be forced with -y/--yes 2016-03-18 22:14:05 +02:00
Stinkfist0 bf76bd17b2 Add large_offset.ifc (wallwindow.ifc, courtesy of @klokoy) as test input case. 2016-03-18 14:45:00 +02:00
Thomas Krijnen 59d2d227d9 Directly re-use IfcMappedItem triangulated elements when not using world coordinates 2016-03-18 11:23:25 +01:00
Thomas Krijnen 4a3a0bff71 Cleanup triangulations after use 2016-03-18 11:21:23 +01:00
Thomas Krijnen 8ecc1269d7 Compile-time options to manipulate caching behaviour 2016-03-18 11:21:04 +01:00
Thomas Krijnen 614148e5e4 Don't iterate past material indices in collada serializer 2016-03-18 11:18:02 +01:00
Thomas Krijnen 74e495cec0 python2.7 compatibility on code generator 2016-03-18 11:17:26 +01:00
Thomas Krijnen 0ceef8fe67 Use constant time parent enumeration lookup 2016-03-18 11:14:14 +01:00
Stinkfist0 562f38756f Calculate and store min. and max. placements IfcGeom::Iterator. Implement --center-model for OBJ. 2016-03-17 23:25:53 +02:00
Stinkfist0 76d3823bd4 Make UVs a property of IfcGeom::Representation::Triangulation. Implement writing of UVs for OBJ output. 2016-03-17 00:25:33 +02:00
Thomas Krijnen 28560d164c Add IfcGeomServer description 2016-03-12 16:54:21 +01:00
Stinkfist0 923f1212f5 Clean up program_options printings 2016-03-11 10:05:33 +02:00
Stinkfist0 e9f551ea71 --names for filtering included or excluded entities by name, e.g. --include --names "Wall Compound*" 2016-03-10 21:15:50 +02:00
Stinkfist0 b9c5b0e6c8 Add IFCCONVERT_DOUBLE_PRECISION build option 2016-03-10 17:00:06 +02:00
Stinkfist0 4953b35849 --generate-uvs, applicable for DAE only currently 2016-03-10 16:46:20 +02:00
Stinkfist0 83e5096570 Support for --deflection-tolerance 2016-03-10 16:09:39 +02:00
Stinkfist0 5008c3503d --center-model for DAE output, fixes #8 (TODO: implement also for OBJ) 2016-03-10 14:39:42 +02:00
Stinkfist0 ce38854cff Add --no-normals 2016-03-10 13:29:22 +02:00
Stinkfist0 24e2aece0b Rename --use-guids and --use-names to --use-element-guids and --use-element-names. Add explicit --use-material-names for controlling material naming. 2016-03-10 12:01:04 +02:00
Stinkfist0 43f5d446ec Implement --use-names and --use-guids for DAE, OBJ, and SVG output. 2016-03-10 11:35:32 +02:00
Stinkfist0 50a467fda5 Fix IfcUtil::wildcard_string_to_regex() 2016-03-07 23:15:29 +02:00
Stinkfist0 0da0e63687 Begin to implement IfcConvert enhancements discussed in #20. Remove C++-specific getters and setters and use the same set() and get() functions in in both C++ and Python. Enhance output of IfcConvert, especially in error situations (spamming a hundred lines of options always hides the original error message), utilize Boost's foreach macro to provide cleaner iteration code. 2016-03-07 22:37:36 +02:00
Stinkfist0 e35cefac52 Fix crash (deleting garbage ptr) when nonexisting file passed to IfcSpfStream ctor. Bug surfaced due to recent memory leak fix. 2016-03-07 22:37:04 +02:00
Stinkfist0 84e7a86e77 XmlSerializer: handle openings. Original author of the commit/idea @otsoa. 2016-03-07 22:37:03 +02:00
Thomas Krijnen 82a1e33386 Merge pull request #39 from Tridify/fixed_opencollada_revision
Use a fixed revision of OpenCOLLADA...
2016-03-05 13:50:41 +01:00
Thomas Krijnen 827c6fd407 Build script fixes and compatibility with OSX / bash 3.2 2016-03-03 20:36:16 +01:00
Stinkfist0 851fadb4ec build-deps.cmd: GitCloneAndCheckoutRevision - always checkout the revision, so that users don't have the nuke their existing clones before running the script. 2016-02-27 17:44:45 +02:00
Thomas Krijnen 90f72c4b2c Merge pull request #35 from Tridify/ifcmax
Create CMake file for building IfcMax
2016-02-27 15:52:10 +01:00
Stinkfist0 7ed219af70 Use a fixed revision of OpenCOLLADA in order to prevent introducing breaking changes. Closes #36, related to #38 2016-02-25 17:34:41 +02:00
Stinkfist0 d1a1759016 Use a fixed revision of OpenCOLLADA in order to prevent introducing breaking changes. Closes #36, related to #38 2016-02-25 17:23:04 +02:00
Thomas Krijnen acc4af87d6 Merge pull request #34 from yilativs/master
Set cmake search paths to ubuntu 16.04 package manager defaults
2016-02-24 09:03:06 +01:00
Stinkfist0 ee75545ecd README tweaks 2016-02-21 16:52:00 +02:00
Stinkfist0 58b5838da9 README.md tweaks 2016-02-20 00:43:35 +02:00
Stinkfist0 e171e308d0 Enable solution folders 2016-02-20 00:13:04 +02:00
Stinkfist0 645315a8f4 remove win/sln as these are not needed anymore 2016-02-19 23:02:09 +02:00
Stinkfist0 5ee9bed590 CMakeLists.txt for IfcMax. Tested with VS 2015 and 3ds Max + SDK 2016 2016-02-19 22:53:09 +02:00
yilativs 0f88520e75 [fix] CmakeLists.txt now works on ubuntu 16.04 without the need to compile oce
instead you can
apt-get install git swig cmake gcc g++ libftgl-dev libtbb2 libtbb-dev libboost-all-dev libgl1-mesa-dev libfreetype6-dev liboce-modeling-dev opencollada-dev liboce-foundation-dev
2016-02-19 20:28:46 +03:00
aothms 481515f5ae Add missing include 2016-02-18 16:57:22 +01:00
Thomas Krijnen a33f5b6e17 Merge pull request #31 from aothms/cmake_compile_schema
Add option to compile (external) schema by cmake + general improvements
2016-02-18 15:43:52 +01:00
aothms 10bec3eee0 Replace PYTHONPATH with PYTHONHOME 2016-02-18 14:57:57 +01:00
aothms da0af77570 Compatibility for older versions of cmake, python, open cascade, boost 2016-02-18 13:17:15 +01:00
aothms a6094f50b9 Let CMake find python interpreter for schema compilation and installation dir
Remove unused compiled schema in cpp installation target
2016-02-17 12:03:38 +01:00
aothms c3f1b41860 Fix https://github.com/IfcOpenShell/IfcOpenShell/issues/30 2016-02-15 17:59:31 +01:00
aothms 4122759f1a Add option to compile (external) schema by cmake 2016-02-15 16:59:47 +01:00
Thomas Krijnen a583339492 Merge pull request #29 from Tridify/win_build_script_improvements
Windows build script improvements
2016-02-15 16:14:51 +01:00
Stinkfist0 f12e980bfe build-all.cmd: simplify "yes" trick 2016-02-15 15:08:13 +02:00
Stinkfist0 4979deb111 CMakeLists.txt: Remove sources specific to an IFC release we are not using from the project 2016-02-09 15:51:18 +02:00
Stinkfist0 c575352d20 ~IfcCharacterDecoder: call ucnv_flushCache() to fix two ICU mem leaks. 2016-02-07 23:01:34 +02:00
Stinkfist0 2f8fa3282b Fix mem leak in IfcSpfStream (not closed upon destruction), make Entity's dtor virtual. 2016-02-07 22:45:42 +02:00
Stinkfist0 993e322a8e Fix memory leakage from IfcSpfHeader 2016-02-07 13:14:14 +02:00
Stinkfist0 61ccd8a7cf VLD, not VLC... 2016-02-07 12:28:05 +02:00
Stinkfist0 450baf224f Remove accidentally committed lines 2016-02-07 00:51:10 +02:00
Stinkfist0 7b2197fa37 add /test/__pycache__ to ignore list 2016-02-07 00:31:29 +02:00
Stinkfist0 cde1c5f2ee Add build option for using Visual Leak Detector for debugging memory leaks. Initial report:
- IfcConvert (no arguments): 2 leaks (140 bytes) (from OCE)
- IfcConvert (acad2010_objects.ifc): 47 memory leaks (6,158 bytes)
- IfcGeomServer: 2 leaks (from OCE)
- IfcOpenHouse: 11,952 leaks (1,169,658 bytes)!
- IfcParseExamples (acad2010_objects.ifc): 40 memory leaks (4,564 bytes)
2016-02-07 00:30:08 +02:00
Stinkfist0 33772a4710 run-cmake.bat & build-all.cmd: fix cmake arguments parsing when arguments passed for the batch scripts 2016-02-06 18:48:18 +02:00
Stinkfist0 178c34fb22 README.md: document the supported IFC releases with links 2016-02-05 14:48:51 +02:00
Stinkfist0 17ecc43f78 vs-cfg.cmd: remove if-clause, an erroneous syntax print comes if this script is called when VS env vars not set but that's OK. 2016-02-04 11:46:53 +02:00
Stinkfist0 72999e04d9 vs-cfg.cmd: clean up output when used wrongly (VS tools not in path and empty/no generator argument passed). 2016-02-04 00:43:52 +02:00
Stinkfist0 f191b1fdd2 Fix warning regarding shadowing variable names. 2016-02-03 22:34:50 +02:00
Stinkfist0 d095bfecde Fix command-line argument parsing in run-cmake.bat and build-all.cmd 2016-02-03 22:16:50 +02:00
Stinkfist0 2e1699beea build-all.cmd: support for passing arguments, e.g. build-all.cmd vs2015-x64 RelWithDebInfo -DUSE_IFC4=1 -DENABLE_BUILD_OPTIMIZATIONS=1 2016-02-03 16:36:07 +02:00
Stinkfist0 5c07c8dc95 run-cmake.bat print tweak 2016-02-03 16:15:40 +02:00
Stinkfist0 0fa05faee8 Simplify run-cmake.bat, the script can now be used e.g. run-cmake.bat vs2015-x64 -UDUSE_IFC4=1 -DCMAKE_INSTALL_PREFIX=C:/IfcOpenShell/Ifc4 2016-02-03 16:12:52 +02:00
Stinkfist0 21e8a1e8e6 vs-cfg.cmd: provide support for user-friendly VS generators, e.g. vs2013-x86, and converted them to the appropriate CMake ones. 2016-02-03 16:10:55 +02:00
Stinkfist0 2e6601b3e7 build-deps.cmd: do not print build times if build did not even start properly. 2016-02-03 16:10:55 +02:00
Stinkfist0 634932e6e7 run-cmake.bat: set CMAKE_INSTALL_PREFIX also when passing extra parameters for the script 2016-02-03 16:10:55 +02:00
Stinkfist0 a041d289c6 Add build-all.cmd script for convenience. 2016-02-03 16:10:55 +02:00
Stinkfist0 01f8882311 adjust build-ifcopenshell & install-ifcopenshell to the build cfg batch file change 2016-02-03 16:10:54 +02:00
Stinkfist0 f2bdfbd049 Windows build scripts: move build configuration type to a separate file. 2016-02-03 16:10:32 +02:00
Stinkfist0 c7bf03e8f8 Add set-python-to-path.bat helper, add instructions for using preinstalled Python. 2016-02-03 16:10:32 +02:00
Stinkfist0 18e451b874 Windows build scripts: detect case where user installed Visual Studio but not the C++ toolset. Also detect case where user's CMake version is too old for the desired generator. 2016-02-03 16:10:32 +02:00
aothms f4d58b3969 Fix for IfcAdvancedFace when compiling for 2x3 2016-02-01 14:58:42 +01:00
aothms 76a3146b70 Fix one statement deleted too much in https://github.com/IfcOpenShell/IfcOpenShell/commit/f3af39546be9ecd485737ff0954cfb92807fca1d 2016-01-29 15:25:18 +01:00
aothms fe70acb541 Fix https://github.com/IfcOpenShell/IfcOpenShell/issues/26 2016-01-26 16:45:39 +01:00
Stinkfist0 a52901344c build-deps.cmd: print start, end, and elapsed time + .gitignore doc tweak 2016-01-26 13:41:19 +02:00
Thomas Krijnen d0e26f07fc Merge pull request #25 from aothms/master
Refactoring shared_ptr and array usage
2016-01-25 16:00:49 +01:00
aothms 5270710fc2 Use vanilla C arrays instead of std::tr::array
Fixes https://github.com/IfcOpenShell/IfcOpenShell/issues/17
2016-01-25 14:44:35 +01:00
aothms ed8cc620ea Use boost::shared_ptr
Fixes https://github.com/IfcOpenShell/IfcOpenShell/issues/17
2016-01-25 14:42:41 +01:00
aothms 9b13ed3f38 Emit more debug information when failing to join curve segments 2016-01-25 14:25:24 +01:00
aothms 801c7da40f Use multiple argument boolean operands for IfcOpeningElement subtractions 2016-01-25 13:30:33 +01:00
aothms 4be7da1a43 Use fuzzy boolean subtraction if available
Remove collinear points from polygonal halfspace boundary
Lookup styled items on boolean operation operands

Fixes https://github.com/IfcOpenShell/IfcOpenShell/issues/6
Fixes https://sourceforge.net/p/ifcopenshell/discussion/1782717/thread/a7f99e41/?limit=25#5c36
2016-01-22 17:27:28 +01:00
aothms a0db3a3406 chmod +x on *nix build script 2016-01-09 06:42:35 +01:00
aothms 18f8d7b3a3 Add *nix build script
Set paths by CMake cache entries or env vars
Windows build script: Don't fail on non-zero exit code returned by `git fetch`
2016-01-09 06:38:33 +01:00
Thomas Krijnen 010e05308d Merge pull request #19 from aothms/master
Fixes for sequences of extended control directives
2016-01-08 09:20:50 +01:00
aothms 973fa9ccb5 Fixes for sequences of extended control directives 2016-01-08 09:17:49 +01:00
aothms 0d42a293ad Add license header to occ_utils 2016-01-08 08:38:21 +01:00
Thomas Krijnen a02a06a0e3 Merge pull request #16 from Tridify/win_oce_update
Windows build scripts: OCE & OpenCOLLADA updates
2016-01-06 07:29:06 +01:00
Stinkfist0 d3438335a2 Work around https://github.com/KhronosGroup/OpenCOLLADA/issues/377 2015-12-30 16:26:16 +02:00
Stinkfist0 a0bb589ed3 build-deps.cmd: use OCE and oce-win-bundle from the official repos. 2015-12-30 13:32:22 +02:00
Thomas Krijnen 056bcd12d0 Merge pull request #14 from aothms/master
Various fixes
2015-12-21 11:51:45 +01:00
aothms fe699e0a81 Fix python module import 2015-12-21 11:47:38 +01:00
aothms 4eee9a1936 Merge remote-tracking branch 'official/master'
Conflicts:
	src/ifcconvert/IfcConvert.cpp
	src/ifcgeom/IfcGeomIterator.h
2015-12-21 11:36:23 +01:00
Thomas Krijnen 8c1710cae1 Merge pull request #11 from Tridify/windows_build_scripts
build-ifcopenshell & install-ifcopenshell batch files
2015-12-07 19:21:24 +01:00
Stinkfist0 e2d3b3734f Use IFCOS_NUM_BUILD_PROCS also in build-ifcopenshell.cmd and install-ifcopenshell.cmd. 2015-12-07 16:30:08 +02:00
aothms b243572d23 Don't fail on opening elements lacking representation or placement 2015-12-05 17:14:10 +01:00
Stinkfist0 3224a2cf83 build-ifcopenshell & install-ifcopenshell batch files 2015-12-04 17:33:13 +02:00
aothms a2d91f9331 Fix compilation error reported by bezumenez 2015-12-04 11:56:54 +01:00
aothms 0301e2fb1b Emit an error message on extrusions with negative height or under model precision 2015-12-02 10:17:59 +01:00
Thomas Krijnen 0036bd2dc2 Merge pull request #9 from Tridify/windows_build_scripts
Windows & Visual Studio build scripts continued
2015-12-01 14:27:34 +01:00
Stinkfist0 0877bb0ac3 Windows build scripts: if CMake generator not passed, deduce the generator from VS env vars. 2015-12-01 14:53:16 +02:00
aothms e62ce005dc Work on unit issues with step and iges files 2015-12-01 11:14:50 +01:00
aothms b6e2d78bfa Catch syntax errors during iterator initialization 2015-11-30 23:41:27 +01:00
aothms bf292cccd0 Precision fixes 2015-11-30 22:59:21 +01:00
aothms 9d730054dd Merge branch 'master' into layerset_slicing 2015-11-24 17:19:05 +01:00
Stinkfist0 2dc5cd44b7 Enable warning C4100 ("'identifier' : unreferenced formal parameter") and fix warnings. 2015-11-23 15:52:12 +02:00
Stinkfist0 fcbe93c4c2 vs-cfg.cmd: support CMake pre-3.0 Visual Studio generator strings. 2015-11-23 15:27:58 +02:00
Stinkfist0 89b3b96f1e .gitignore: add /src/ifcexpressparser/__pycache__ & /src/ifcexpressparser/express_parser.py 2015-11-22 02:39:45 +02:00
Stinkfist0 16a82f035f templates.py: disable C4100 warnings for headers created by this file + move <map> inclusion to .cpp as it's not needed in .h + use spaces instead of tabs consistently for these files as seems to be the convention. 2015-11-22 02:26:28 +02:00
Stinkfist0 b562508f5b win/readme.md tweak 2015-11-22 00:04:21 +02:00
Stinkfist0 a13042f227 Fix warnings: unused variables, shadowing variable names, constant conditional expressions, integer conversions, inability to generate copy-ctor and/or assignment operator, etc. 2015-11-21 23:05:28 +02:00
Stinkfist0 3cbb47a831 Bump up MSVC warning level. 2015-11-21 23:01:29 +02:00
Stinkfist0 7d806296c1 vs-cfg.cmd: use the longer generator names for all generator so that VS version can be identified in generic fashion 2015-11-21 13:16:47 +02:00
Stinkfist0 d6bd0c861b README.md formatting fix 2015-11-21 13:15:31 +02:00
Thomas Krijnen 8164c90ba0 Merge pull request #5 from Tridify/windows_build_scripts
Windows & Visual Studio build scripts
2015-11-20 13:38:45 +01:00
Stinkfist0 fff6f97651 build-deps: when building OpenCOLLADA, enforce that the embedded LibXml2 and PCRE are used as there might be problems with arbitrary versions of the libraries. 2015-11-20 12:45:56 +02:00
Stinkfist0 6a5d5dcb12 Further cleanup for the batch scripts. 2015-11-20 12:34:31 +02:00
Stinkfist0 bb3dc351b8 Batch file tweaks, fix printing of the used generator 2015-11-20 11:44:17 +02:00
Stinkfist0 90946e0877 Windows build scripts: TODO & indentation tweaks. 2015-11-20 00:45:01 +02:00
Stinkfist0 7895835ca3 build-deps.cmd: check that powershell, git and cmake are in path using where.exe. Print instructions upon missing VS env vars or tools in PATH. 2015-11-19 18:01:03 +02:00
Stinkfist0 7caa4e3e1d Replace cecho.exe with PowerShell snippet, fix exit bug in vs-cfg.cmd, fix Visual Studio download URL, rename IFCOS_NUM_BUILD_PROCESSES -> IFCOS_NUM_BUILD_PROCS 2015-11-19 17:30:55 +02:00
Stinkfist0 d721dabf3b Replace wget usage with PowerShell. 2015-11-17 16:02:06 +02:00
Stinkfist0 9087bc65a7 win/readme.md tweaks 2015-11-14 20:18:29 +02:00
Stinkfist0 ccf4e84e18 CMakeLists.txt: Clean up addition of debug lib variants on MSVC. 2015-11-14 19:19:55 +02:00
Stinkfist0 0f1db1267b Rename readme.txt to readme.md, link to the Windows readme.md from the main README.md. 2015-11-11 17:41:38 +02:00
Stinkfist0 431e993ba3 CMake biz: Instead of providing elusive prints of missing dependencies for required features and continuing the build configuration, fail fast instead; user can easily disable the feature or fix the paths for the dependency. 2015-11-11 13:30:30 +02:00
Stinkfist0 d912e73282 Allow both debug and release variants of dependencies to co-exist allowing effortless switching between IfcOpenShell debug and release builds. 2015-11-10 23:18:02 +02:00
Stinkfist0 106da12444 build-deps.cmd: make debug libs of OpenCOLADA and ICU to have "d" postfix so that release and debug variants can co-exist in the same dir as is the default with OCE. 2015-11-10 20:05:11 +02:00
Stinkfist0 89a015724b CMake biz: rename OCE_LIBRARIES to OPENCASCADE_LIBRARIES, use this variable also in examples & qtviewer CMakeLists.txt 2015-11-09 17:42:46 +02:00
Stinkfist0 8b63959509 Use separate BuildDepsCache.txt for x86 and x64 builds. 2015-11-09 16:04:06 +02:00
Stinkfist0 0a8791e04e Clean up CMake biz by using OCE_LIBRARIES variable for defining OCE libs + fix setting of PYTHON_INCLUDE_DIR + PYTHON_LIBRARY vars + small README.md cleanup. 2015-11-09 15:36:57 +02:00
Stinkfist0 318779196b Use BuildDepsCache.txt to store information about used Python version so that it's available for "autonomic" run-cmake.bat runs. 2015-11-05 18:05:20 +02:00
aothms d076fa588b Work on runtime representation of schema 2015-11-05 11:55:19 +01:00
Stinkfist0 6190771817 Fix/suppress signed-unsigned int conversion warnings on Windows x64. 2015-11-04 18:27:46 +02:00
Stinkfist0 206a9cf5d0 Work around https://github.com/swig/swig/issues/325 2015-11-04 16:25:13 +02:00
Stinkfist0 d4b51a82e7 Fix/suppress plethora of integer conversion warnings on x64 Visual Studio build. 2015-11-03 17:58:08 +02:00
Stinkfist0 a749775045 build-deps.cmd: use OpenCOLLADA from the official repo now that it has the static MSVC run-time option. 2015-11-03 16:55:33 +02:00
Stinkfist0 26ed16ba52 Make possible to switch between Python 2 & 3 easily. Fixes also possible confusion when having both 32-bit and 64-bit Python installations side by side. 2015-11-03 16:28:30 +02:00
Stinkfist0 7b4d8734ed run-cmake.bat: ensure Python packages are installed to the right direction. 2015-10-30 22:49:52 +02:00
Stinkfist0 455d382a9e build-deps.cmd: add option to use Python 2 instead of 3, fix Boost build variant (for some reason error did not manifest itself until clean build) 2015-10-30 21:12:08 +02:00
Stinkfist0 c9313c8e02 build-deps.cmd: update SWIG, build Boost as debug or release, not both, each run. 2015-10-29 00:23:19 +02:00
Stinkfist0 b44a88d203 CMakeLists.txt: install IfcGeomServer executable. 2015-10-28 21:25:48 +02:00
Stinkfist0 921c3eb2d3 SvgSerializer.cpp: add missing #include <Standard_Version.hxx> 2015-10-28 21:25:23 +02:00
Stinkfist0 d5efe45b0b Update READMEs. 2015-10-28 21:21:23 +02:00
Stinkfist0 b8a7b5426d build-deps.cmd: fix Python installation. Also uninstall Python if build type is Clean or Rebuild. 2015-10-28 21:08:08 +02:00
Stinkfist0 89bea19b75 Enhanced CMakeLists.txt for Windows build scripts. 2015-10-28 19:45:45 +02:00
Stinkfist0 5c0eb05482 Add Windows build scripts from https://github.com/Tridify/IfcOpenShell-SourceForge 2015-10-28 19:43:10 +02:00
Stinkfist0 c9ff455812 Move Visual Studio solution files from win\ to win\sln 2015-10-28 19:41:59 +02:00
aothms fdf1b29682 Return shape for arbitrary representation items in ifcopenshell.geom.create_shape() 2015-10-22 12:04:49 +02:00
aothms f3af39546b Don't construct transformation from matrix, but use original data. 2015-10-13 11:15:45 +02:00
aothms 44ddc5e6dc Don't use IfcMappedItems for IfcOpenHouse walls, as suggested by Ian Clévy in https://sourceforge.net/p/ifcopenshell/discussion/1782716/thread/f9b586ca/?limit=25#ab87 2015-10-09 14:23:38 +02:00
aothms c9db70c7c3 Initial implementation of layerset slicing 2015-10-07 17:33:30 +02:00
aothms c7ddc0643e Fixes to flatten_shape_list() 2015-10-07 16:14:34 +02:00
aothms 3a9e90f94f Mark IfcGeom::Kernel::getValue as const 2015-10-07 16:13:25 +02:00
aothms db6630c1f8 Use boost::to_lower() 2015-10-05 13:34:43 +02:00
aothms c20afd24a5 Remove unnecessary precision cast 2015-10-05 13:09:16 +02:00
aothms 7b82bfb477 Update log messages in parser 2015-10-05 13:08:24 +02:00
aothms 3e00139a87 Add const pointer cast to IfcBaseClass 2015-10-05 13:07:40 +02:00
Thomas Krijnen 23beb5691c Detect abstract entities in schema parser 2015-09-17 10:33:19 +02:00
Thomas Krijnen c6a265adf8 Merge pull request #2 from aothms/master
Assorted fixes
2015-09-13 15:05:46 +02:00
aothms 94d214808e Use boost::to_upper() and -::to_upper_copy() for string manipulation throughout codebase 2015-09-13 15:00:21 +02:00
aothms a58b2ede63 Fixes for unicode handling in Python 2015-09-13 14:43:42 +02:00
aothms e5c20a009d Add convenience method for relating objects to types. As suggested by Cadline St2. 2015-09-12 14:27:58 +02:00
aothms b590747db9 Add version information and schema identifier to Python wrapper 2015-09-10 15:53:59 +02:00
aothms 2532ba30e4 Fix addRelatedObject, fix by Cadline St2 2015-09-10 13:58:27 +02:00
aothms 9096895bdb Support for schemas using TYPE definitions to redeclare BINARY types 2015-09-08 15:27:05 +02:00
aothms 82143f226e Small changes to SVG serialization 2015-09-06 14:50:07 +02:00
aothms 22a8d9a17b Don't leave MakeFace in an invalid state when one of the face boundaries cannot be processed or is not planar 2015-09-04 11:48:53 +02:00
aothms 4385f3b14d Revert some of the typemap work in b96cf38e17 and rely on a general mapping from const vector to tuple 2015-09-04 11:46:52 +02:00
aothms 3cba242295 When built without ICU filter characters outside of unencoded range 2015-08-14 22:11:32 +02:00
aothms 822fa91f4d Work on a C++ representation of the parsed EXPRESS schema 2015-08-13 14:28:50 +02:00
aothms 266d6f4c97 Cache the output of the parsed express schema as a Python pickle stream for speedier code generation 2015-08-13 14:26:14 +02:00
Thomas Krijnen 8406c5243c Merge pull request #1 from aothms/master
Ignore tail remarks in the express schema parser
2015-08-13 14:20:12 +02:00
aothms 810d3eab1e Ignore tail remarks in the express schema parser 2015-08-13 14:18:59 +02:00
aothms 17f6e67706 Update README 2015-08-10 11:38:43 +02:00
Thomas Krijnen f5c32adff1 Be sure to flush fstream when finalizing SVG export 2015-07-26 17:59:52 +00:00
Thomas Krijnen bb43dec90f Fix typos 2015-07-26 17:58:08 +00:00
Thomas Krijnen 0e5edbcd84 Reverse preprocessor statement to work without definition, defaulting to 2x3 2015-07-26 15:26:34 +00:00
Thomas Krijnen 68fc361d96 Add SvgSerializer developed in collaboration with ROOT B.V. 2015-07-26 14:26:13 +00:00
Thomas Krijnen 06b4fcb066 Remove orphaned file. Thanks Stinkfist 2015-07-26 14:22:50 +00:00
Thomas Krijnen 85d5d86c84 Update code examples for recent changes 2015-07-09 13:52:55 +00:00
Thomas Krijnen 78f4d7d592 Fix build with Boost 1.58.0. Patch by stinkfist0. Thanks. 2015-07-09 13:23:40 +00:00
Thomas Krijnen 92bc7b13cb Use custom typemaps for geometry related classes as well 2015-06-26 13:06:28 +00:00
Thomas Krijnen e518146bd6 Fix IfcCurveBoundedPlane implementation 2015-06-21 16:15:15 +00:00
Thomas Krijnen e9eb7db620 Fix ensure_fit_for_subtraction() function when input shape is a solid 2015-06-21 16:14:37 +00:00
Thomas Krijnen 1068070037 Do not free the IFC file if it has not been constructed by the iterator 2015-06-20 14:23:59 +00:00
Thomas Krijnen 3d302619c5 Check for numbers.Integral instead of int, to catch py2.7's long type as well 2015-06-20 14:22:54 +00:00
Thomas Krijnen 48febb7eff Check for null values when setting attributes in IfcOpenShell-Python, also return value being set 2015-06-18 13:15:33 +00:00
Thomas Krijnen feaa13a809 gcc compatibility 2015-06-18 08:55:29 +00:00
Thomas Krijnen 76cbb79c75 Correctly wrap arbitrarily nested aggregates of entity instance attributes in IfcOpenShell-Python 2015-06-17 19:46:11 +00:00
Thomas Krijnen 6aabbd4a55 Correctly interpret SWIG return code of type check 2015-06-17 19:44:15 +00:00
Thomas Krijnen 48676a733f Rework SWIG python binding not to rely on polymorhpic functions. Use hand-written typemaps that map vectors to tuples and iterables to vectors. Add support for multidimensional aggregates in Python. 2015-06-17 11:27:02 +00:00
Thomas Krijnen f8c45b2a99 Fix serialization of binary values 2015-06-17 11:22:43 +00:00
Thomas Krijnen 1ec14118fe Introduce specific exception for out of range attribute indexing 2015-06-17 11:04:28 +00:00
Thomas Krijnen 381f711103 Update string representation of ArgumentTypeToString 2015-06-16 14:47:03 +00:00
Thomas Krijnen b748c0a573 Add source code for generation of IfcTriangulatedFaceSet test case 2015-06-16 13:00:19 +00:00
Thomas Krijnen c4e8a409de Add another IfcTriangulatedFaceSet test case 2015-06-16 12:59:49 +00:00
Thomas Krijnen 28863f90b9 Add support for IFC4.IfcTriangulatedFaceSet 2015-06-16 12:58:51 +00:00
Thomas Krijnen 4f60c7d48c Provide concrete C++ implementations for all multidimensional aggregate types in IFC4 2015-06-16 12:58:07 +00:00
Thomas Krijnen f70b37137d Emit an error message rather than exception for GlobalId parsing inconsistencies to accomodate files with invalid GlobalIds. 2015-06-04 14:33:13 +00:00
Thomas Krijnen 49d491704e Add support for IfcBSplineCurveWithKnots 2015-06-02 15:56:09 +00:00
Thomas Krijnen a3f17cd4e7 Enable passing explicit IfcRepresentation in IfcOpenShell-Python create_shape() 2015-06-02 13:30:02 +00:00
Thomas Krijnen b96cf38e17 Minimize passing STL objects past dynamic library boundaries to improve stability of IfcOpenShell-Python 2015-06-02 13:29:08 +00:00
Thomas Krijnen 5a994ebe28 vc9 compatibility 2015-05-26 12:56:00 +00:00
Thomas Krijnen ffc008228d gcc compatibility 2015-05-26 12:55:00 +00:00
Thomas Krijnen 77ba3f5a80 Perform shape healing after opening subtraction 2015-05-22 15:41:56 +00:00
Thomas Krijnen 04d4095ffe Correctly mark face boundary edges in case of vertex welding 2015-05-22 13:13:48 +00:00
Thomas Krijnen 569fa49796 Prevent an issue with obtaining precision from sub contexts 2015-05-22 13:13:16 +00:00
Thomas Krijnen 7abe2df066 Update implementation of IfcBSplineSurfaceWithKnots for IfcAdvancedFace in IFC4 2015-05-21 13:02:10 +00:00
Thomas Krijnen 9b64c6f4b9 Check for orientation of wires when creating outer boundary of face 2015-05-21 13:01:01 +00:00
Thomas Krijnen 771f78a671 Fix surface style association when compiling with IFC4 2015-05-21 12:55:54 +00:00
Thomas Krijnen 3d6b330366 Reintroduce binary type in express parser 2015-05-21 12:53:17 +00:00
Thomas Krijnen 37d4e9bcbd Fix express parser for simple types that redefine aggregates of entities 2015-05-21 12:09:57 +00:00
Thomas Krijnen 7390faa654 Adapt XML serializer for changes in IFC4 decomposition and property set types 2015-05-21 12:06:38 +00:00
Thomas Krijnen b7d4eb62d5 Add IfcFaceSurface example 2015-05-21 12:05:23 +00:00
Thomas Krijnen 40a60386c8 Brand new implementation of IfcFace(Surface) 2015-05-20 08:55:02 +00:00
Thomas Krijnen 9bf9f82b3b Format obj and dae output predictably based on rfc notation of GlobalId. As discussed in https://sourceforge.net/p/ifcopenshell/discussion/1782717/thread/cbb0c8ca/ 2015-05-13 14:30:21 +00:00
Thomas Krijnen b37a684eb9 Append line segment indices in the IfcGeomServer 2015-04-25 09:13:14 +00:00
Thomas Krijnen c97cf661a2 1. Also emit Plan and Axis shape representations and IfcTopologyRepresentations if requested. 2. Add serialization for curves. 3. In Python add option to specify representation for which to generate shape. 2015-04-22 09:15:48 +00:00
Thomas Krijnen 53f625346f Fix compilation with gcc 2015-04-07 19:26:01 +00:00
Thomas Krijnen 608c7d9841 Don't rely on exceptions for testing whether a Python attribute names a valid (inverse) IFC attribute 2015-04-07 15:49:38 +00:00
Thomas Krijnen 955190b517 Add support for reading and writing BINARY attributes. Rename members of the IfcUtil::ArgumentType enumeration. 2015-04-07 15:06:56 +00:00
Thomas Krijnen 462425f61d Update README 2015-03-22 20:06:04 +00:00
Thomas Krijnen 0a0f44b674 Reduce link time for MSVC release builds. Patch by ch0kee. 2015-03-22 19:52:29 +00:00
Thomas Krijnen 9f9a0ea3dc Update generated code for IFC4 2015-03-20 20:58:05 +00:00
Thomas Krijnen a28b5517e8 Fix compilation with gcc. Thanks Ivano. 2015-03-13 10:40:31 +00:00
Thomas Krijnen df1805921b Create writable argument copies when duplicating entity instances 2015-03-12 17:54:52 +00:00
Thomas Krijnen 5ea13970c8 Instantiate xml_writer_settings based on boost version. Thanks Liam. 2015-03-06 15:49:46 +00:00
Thomas Krijnen aad6c77d00 Skip IfcSweptDiskSolid.InnerRadii under IfcGeometricRepresentationContext.Precision. Thanks Stefan. 2015-03-03 19:18:51 +00:00
Thomas Krijnen 9bbbc6e7d9 Extend Python's dir() function on entity instances with attribute and inverse attribute names of entities 2015-02-27 13:41:33 +00:00
Thomas Krijnen d41dbc386e DISABLE_TRIANGULATION for serializers that operate on Open Cascade's BRep format 2015-02-23 22:01:21 +00:00
Thomas Krijnen 9cd0a76f84 Update bl_info structure in blender addon 2015-02-23 19:13:47 +00:00
Thomas Krijnen dada40735b #include <xlocale.h> header on OS X 2015-02-20 22:02:22 +00:00
Thomas Krijnen 2ce89c8b22 Properly read the CONVERT_BACK_UNITS setting for serialized elements 2015-02-20 18:06:52 +00:00
Thomas Krijnen 0552c336df Correct omitted initialization list item from IfcGeom::IteratorSettings 2015-02-20 17:16:01 +00:00
Thomas Krijnen 349e7ddaa7 USE_WORLD_COORDS by default when USE_PYTHON_OPENCASCADE is set. 2015-02-20 16:03:20 +00:00
Thomas Krijnen f20ae8e25e create a setting to produce pythonOCC shapes for ifcopenshell.geom.iterator and -create_shape() 2015-02-19 21:45:17 +00:00
Thomas Krijnen 8f853ac5af Initialize the attributes of IfcLateBoundEntity to NULL upon construction.
Make sure IfcWritableEntity does not return null pointers, since getArgumentCount() is unreliable for instances being created from keyword arguments in Python.
2015-02-19 20:20:47 +00:00
Thomas Krijnen 6822e84849 Initialize IfcGeomIterator so that no entities are skipped by default 2015-02-19 20:17:53 +00:00
Thomas Krijnen 73266ea216 transfer ownership from Python to C++ when adding an instance to a file 2015-02-19 18:11:09 +00:00
Thomas Krijnen b0ccf69870 Don't add inverse references to the entity being added itself. 2015-02-19 14:42:19 +00:00
Thomas Krijnen 573655e5ef Add the possibility to bundle binary modules for different architectures with the python-ifcopenshell module 2015-02-19 13:37:37 +00:00
Thomas Krijnen 2a7135f347 Correct visibility of IfcBaseType methods. Thanks Ian. 2015-02-19 10:53:41 +00:00
Thomas Krijnen a57a305e9d Correctly cast writable enumeration attributes to string, as reported in: https://sourceforge.net/p/ifcopenshell/discussion/1782717/thread/53b70ea0 2015-02-17 22:14:09 +00:00
Thomas Krijnen e6ff1126ad Catch errors in entity traversal while adding a new entity. In particular for late bound instances having unset attributes. 2015-02-17 22:02:06 +00:00
Thomas Krijnen 6c8a60db6e Fixes related to r312: gcc refuses to erase a const_iterator 2015-02-17 21:24:18 +00:00
Thomas Krijnen b5c9de8d64 Changes related to r312 2015-02-17 20:36:23 +00:00
Thomas Krijnen 5fe4cfab63 More fixes related to locales 2015-02-17 20:23:21 +00:00
Thomas Krijnen b3e5264aa9 WARNING: more function renames 2015-02-17 20:07:09 +00:00
Thomas Krijnen e3d5b6220d Rename AddEntity to addEntity 2015-02-17 19:55:27 +00:00
Thomas Krijnen 846e881cf4 Update build files 2015-02-17 19:52:18 +00:00
Thomas Krijnen ee87466521 1) Implement a breadth-first traversal of forward references 2) implement entity instance deletion from a file 3) recursively copy entity instances to another file 2015-02-17 19:48:41 +00:00
Thomas Krijnen def1328a91 Some more checks and fixes in the IfcBooleanResult code. Most notably set the result to FirstOperand in case healing the result fails. 2015-02-06 17:14:05 +00:00
Thomas Krijnen a7c0c08725 Remove macro redefinition warning 2015-02-06 15:56:07 +00:00
Thomas Krijnen 63e9b706c1 Add missing #includes for OCC 6.8.0 specific #if 2015-02-06 14:20:33 +00:00
Thomas Krijnen 16d400e192 Stricter template syntax in latest commit 2015-02-06 13:37:50 +00:00
Thomas Krijnen 3801e52bff Add an XML serializer (NB: Not ifcXML / 10303-28) that describes property set data, decomposition relations and SPF header fields 2015-02-06 13:07:50 +00:00
Thomas Krijnen c597404dfe Increase the severity of the 'different schema' message 2015-02-06 12:59:36 +00:00
Thomas Krijnen 47b9ed4482 Add a cast in templated list conversion 2015-02-06 12:58:59 +00:00
Thomas Krijnen d23dee551c #ifdef away the two trailing precision arguments for gp_Trsf::SetValues() when OCC >= 6.8.0 2015-02-06 12:49:53 +00:00
Thomas Krijnen 79817341e0 Ignore entity types earlier in IfcConvert so that representations are not processed in vain 2015-02-05 11:55:25 +00:00
Thomas Krijnen 0124034803 Fix typo in locale code 2015-02-04 15:31:01 +00:00
Thomas Krijnen 2da6f5428d Make real number parsing and serializing locale-independent, as suggested by Ian Clevy. 2015-02-03 13:53:36 +00:00
Thomas Krijnen 5f677baf63 Fixes #30. Thanks to Ian Clevy. 2015-02-03 09:40:17 +00:00
Thomas Krijnen b5f055e54b Fix repr() of ifcopenshell.geom.settings 2015-01-29 11:34:11 +00:00
Thomas Krijnen 4c79f713ed Make sure C++ exceptions do not crash the Python interpreter 2015-01-26 18:11:48 +00:00
Thomas Krijnen b789839e4a Fix errors in serialization 2015-01-25 10:50:12 +00:00
Thomas Krijnen 23d5827229 Zero exit code when printing help and version information in IfcConvert 2015-01-23 16:10:49 +00:00
Thomas Krijnen f0425b16d1 Have a peek at a representation's context in the geometry wrapper as well to determine suitability for processing 2015-01-22 10:39:48 +00:00
Thomas Krijnen e1edda588e Properly test for the optional IfcGeometricRepresentationContext.ContextType being null in IfcGeomIterator.h 2015-01-22 10:38:35 +00:00
Thomas Krijnen 6c7c88d7a5 Python wrapper: enable iteration over all entities, get attribute optionality information 2015-01-21 17:01:22 +00:00
Thomas Krijnen 3503c8c933 Fix typo in wrapper generator 2015-01-20 14:39:52 +00:00
Thomas Krijnen e37b062757 python 2/3 compatibility: from functools import reduce 2015-01-20 13:52:08 +00:00
Thomas Krijnen 97b6f444d1 Use BRepMesh_IncrementalMesh rather than BRepMesh::Mesh. Thanks lorinma. 2015-01-19 16:02:34 +00:00
Thomas Krijnen 418dabaff2 Fix typo 2015-01-18 15:32:50 +00:00
Thomas Krijnen 7b17c2dccd Make header values writable 2015-01-16 16:26:40 +00:00
Thomas Krijnen f6f541ee3b Use BRepMesh_IncrementalMesh rather than BRepMesh::Mesh. Thanks lorinma. 2015-01-16 14:32:50 +00:00
Thomas Krijnen 09168d8910 Don't rely on operator bool() but on bool operator!() for truthiness of boost::optionals. Fixes compilation with boost 1.56+. 2015-01-16 13:24:40 +00:00
Thomas Krijnen e57f20f5f2 Small compilation fix 2015-01-14 09:39:52 +00:00
Thomas Krijnen 511e83c2c6 Shuffle around wrapper statements to fix setting arguments 2015-01-10 23:01:52 +00:00
Thomas Krijnen 8581fed39b Track inverse attributes more correctly
Rename Size() to size() on EntityList and friends
2015-01-10 22:13:52 +00:00
Thomas Krijnen 1d319f7ac4 Compilation fixes and python 2 compatibility. Thanks Yorik. 2015-01-07 10:22:55 +00:00
Thomas Krijnen 9780c047e9 Improvements for precision handling 2015-01-06 14:09:28 +00:00
Thomas Krijnen 1c757c351b Fix compilation of IfcOpenHouse, move IfcGeom::tesselate back directly in IfcGeom namespace 2015-01-06 10:19:24 +00:00
Thomas Krijnen f3c26c372d Parse the spf header and check schema_identifiers against compiled schema 2015-01-05 17:46:23 +00:00
Thomas Krijnen 4d5d749255 Merge developments from the python_wrapper branch into master 2015-01-05 14:11:42 +00:00
Thomas Krijnen 8872affe54 Update CMake build script 2014-12-19 12:37:31 +00:00
Thomas Krijnen 3236218aba Compilation fixes related to previous commit 2014-12-19 12:36:06 +00:00
Thomas Krijnen 2a403e240d *** See: https://sourceforge.net/p/ifcopenshell/discussion/1782718/thread/6bd0f843/ ***
Massive refactor of the IfcGeomObjects module, which is now the IfcGeom::Iterator class.
2014-12-19 12:14:36 +00:00
Thomas Krijnen 3f285ea639 Prevent another exception being thrown upon adding entity instances to a file, as reported by ch0kee 2014-11-27 09:22:58 +00:00
Thomas Krijnen 4c976c8b70 Track the surface style of an IfcBooleanResult 2014-11-26 14:32:54 +00:00
Thomas Krijnen d88d4d5951 Add support for IfcAsymmetricIShapeProfileDef 2014-11-26 14:01:31 +00:00
Thomas Krijnen eb815120dc Take unit information into account when applying precision. Thanks Stefan 2014-11-26 13:08:47 +00:00
Thomas Krijnen 7f8d84a1af Fix omitted return statement in previous commit 2014-11-17 15:32:00 +00:00
Thomas Krijnen 24044fb92a Catch all errors when parsing boost program_options in IfcConvert 2014-11-04 12:45:20 +00:00
Thomas Krijnen cd366bf8c2 Reconstruct the form of the transformation to improve the output of the OpenCascade-based serializers 2014-11-04 12:36:59 +00:00
Thomas Krijnen 96ce5f6b25 Don't compare smart pointers to zero, but convert to bool 2014-11-04 12:02:28 +00:00
Thomas Krijnen 120de2f601 Remove erroneous qualifier 2014-11-02 18:50:12 +00:00
Thomas Krijnen 872dd4e831 Rewrite IfcFile::AddEntity() not to rely on exceptions, as suggested by ch0kee. 2014-11-02 18:36:51 +00:00
Thomas Krijnen 6e44683b5d Add another IfcFacetedBrep test case 2014-07-28 20:12:52 +00:00
Thomas Krijnen e77216d41c More robust processing of IfcPolyline and IfcPolyLoop 2014-07-28 20:03:53 +00:00
Thomas Krijnen cf2e82e8f5 Create a compsolid shape for an extrusion of a IfcCompositeProfileDef and process the opening subtraction individually 2014-07-24 11:22:31 +00:00
Thomas Krijnen 9a1c7af953 Fixes for IfcRectangleHollowProfileDef and filleted profile generation. 2014-07-24 11:14:54 +00:00
Thomas Krijnen 5648b8d8bc Correct an invalid default value for IfcCartesianTransformationOperator3D.Axis3. Thanks Stefan. 2014-07-19 10:30:13 +00:00
Thomas Krijnen 1837b79ac3 Add faceted_brep_csg test case 2014-07-06 14:38:48 +00:00
Thomas Krijnen e6aa449ef8 Accept IfcBooleanResult operands that convert to set of shapes in IfcOpenShell rather than a single shape (i.e IfcShellBasedSurfaceModel, IfcFaceBasedSurfaceModel, IfcFacetedBrep, IfcGeometricSet) 2014-07-06 14:21:56 +00:00
Thomas Krijnen aa1ff90241 Remove a duplicated cartesian point from the closed polyline created by the addBox() function as seen in IfcOpenHouse. Thanks Bernd. 2014-06-28 12:39:40 +00:00
Thomas Krijnen 1c39eba3f7 Fix typo 2014-06-27 12:24:49 +00:00
Thomas Krijnen 92c5bb637b - Check the validity of solids created from sewed shells and potentially revert to a shell or compound of faces
- Flag shape representations, for which no item succeeds, as failed
2014-06-27 12:00:41 +00:00
Thomas Krijnen d45056f9c5 Increase precision for writing floats 2014-06-11 10:24:11 +00:00
Thomas Krijnen 83b6ce9083 Apply the same precision value when merging a compound of faces into a solid just-in-time for subtraction 2014-06-09 12:56:47 +00:00
Thomas Krijnen 81292f1adc Detect cases where Newell's Method returns a zero-length vector and make no attempt to normalize it in order to prevent an exception. In this case the face will be flagged as invalid down the road, because its perimeter doesn't span any area. 2014-06-07 17:49:21 +00:00
Thomas Krijnen 49e4ff31ca Fix header of IfcReinforcingBar.ifc 2014-05-14 09:01:33 +00:00
Thomas Krijnen 7066337449 Update IfcParseExamples 2014-05-12 13:56:41 +00:00
Thomas Krijnen 948d7675f0 - Take better care of inverse cardinalities and respect more CoordinationView agreements in IfcOpenHouse
- Track inverse relationships in an IfcWrite context as well
- Fix for lists of SELECT types
2014-05-05 16:17:28 +00:00
Thomas Krijnen 1b54ba039d - Add support for IFC4 nurbs surfaces (IfcBSplineSurfaceWithKnots and IfcAdvancedFace)
- Remove unnecessary typedefs
2014-05-04 14:42:55 +00:00
Thomas Krijnen e87b8988cd Add Test Files from http://www.buildingsmart-tech.org/ifc/IFC4/final/html/annex/annex-e/ifc/ 2014-04-30 14:14:05 +00:00
Thomas Krijnen bd83259d2b More fixes for parsing files with comments 2014-04-19 09:35:08 +00:00
Thomas Krijnen 604d6b032d Add test file with IfcSweptDiskSolids. Thanks Bernd. 2014-04-17 17:50:19 +00:00
Thomas Krijnen b30fbf73ae Add support for IfcSweptDiskSolid 2014-04-16 16:51:03 +00:00
Thomas Krijnen ed1db3dc68 Process IfcStyledItems directly applied to an IfcFacetedBrep 2014-04-09 10:57:45 +00:00
Thomas Krijnen 68740367a5 Account for unit magnitude in matrix translation part when CONVERT_BACK_UNITS is enabled 2014-04-08 07:28:07 +00:00
Thomas Krijnen 365b5f5d48 Fix product's 4x4 matrix on the IfcGeomServer 2014-04-07 17:59:20 +00:00
Thomas Krijnen b406d1c100 When writing collada files, postfix geometry instance nodes to make them distinct from their geometry library references 2014-04-07 14:01:16 +00:00
Thomas Krijnen 95a1332228 IfcGeomServer, small fixes: refrain from using auto type and restore std::cout rdbuf on exit so implicit flush doesn't segfault 2014-04-06 12:50:51 +00:00
Thomas Krijnen a0d74bdf83 Revamp the 'IfcGeomServer' idea to have an executable rather than a library to interface with. This way IFC processing runs in a separate process from the client application, so that crashes or out of memory issues do not bring down the client application. 2014-04-06 11:16:20 +00:00
Thomas Krijnen 24279776ab Increased verbosity in unsupported entity instances 2014-04-02 15:28:04 +00:00
Thomas Krijnen aebb9469a9 Fixes for parsing files with comments 2014-04-02 15:04:09 +00:00
Thomas Krijnen 0ecaf28e3e Measure conversion time of IfcConvert more faithfully 2014-03-31 14:03:06 +00:00
Thomas Krijnen 3e7c0cfd55 IfcSurfaceCurveSweptAreaSolid improvements 2014-03-31 14:00:02 +00:00
Thomas Krijnen aae576aae2 Take into account face location when serializing shape as tesselated faceset. 2014-03-22 21:13:02 +00:00
Thomas Krijnen 1aab95459b IfcConvert: Handle invalid command line options gracefully and notify user 2014-03-22 13:12:22 +00:00
Thomas Krijnen 80b39c0d22 No longer accept and silently convert invalid REAL tokens to zero 2014-03-22 13:02:21 +00:00
Thomas Krijnen bc801d00ba Handle missing or invalid unit and precision information more gracefully during IfcGeomObject initialization 2014-03-22 12:56:08 +00:00
Thomas Krijnen 54ecdb8295 For .obj conversion terminate lines with "\n" rather than std::endl causing a significant speed increase due to longer intermittently flushing the stream 2014-03-22 11:12:50 +00:00
Thomas Krijnen 71ea636206 Add support for IfcBooleanResult, IfcBlock, IfcRectangularPyramid, IfcRightCircularCylinder, IfcRightCircularCone, IfcSphere, IfcCsgSolid, IfcCurveBoundedPlane, IfcRectangularTrimmedSurface, IfcSurfaceCurveSweptAreaSolid, IfcCylindricalSurface.
Add CSG example.
2014-03-22 10:31:51 +00:00
Thomas Krijnen 2f16bb42ed Add missing header to installation files. Thanks Fred. 2014-03-22 09:22:27 +00:00
Thomas Krijnen 268109875f Update build scripts to include TKOffset 2014-03-19 09:47:24 +00:00
Thomas Krijnen dab6e1d220 Add example file to generate file with IfcCompositeProfileDef and IfcDerivedProfileDef 2014-03-16 13:35:14 +00:00
Thomas Krijnen 220b36b09c Support for IfcCompositeProfileDef and IfcDerivedProfileDef 2014-03-16 13:34:01 +00:00
Thomas Krijnen 4c17d153f4 Add support for IfcGeometricSet IfcRevolvedAreaSolid IfcSurfaceOfLinearExtrusion IfcSurfaceOfRevolution IfcCenterLineProfileDef IfcArbitraryOpenProfileDef 2014-03-15 11:51:23 +00:00
Thomas Krijnen 7597f25db0 Implementations for more parameterized profile definitions 2014-03-08 17:21:39 +00:00
Thomas Krijnen ec2ed06272 Add support for ellipses with SemiAxis2 > SemiAxis1 2014-03-03 19:07:39 +00:00
Thomas Krijnen 05c98de100 Add parameterized profile test files and script to generate them 2014-02-23 11:25:35 +00:00
Thomas Krijnen 17f873b486 First stab at a new express parser to have some more luck with Ifc4 2014-02-17 22:13:55 +00:00
Thomas Krijnen 87259c0cab Bump version numbers 2014-01-12 11:03:50 +00:00
Thomas Krijnen 5615c70952 IfcBlender: Assign material ids to mesh polygons rather than to derived tessellation data which is not persistent 2014-01-05 09:50:30 +00:00
Thomas Krijnen 11b877f925 Update IfcJni for updated IfcGeomObjects interface 2014-01-03 14:08:25 +00:00
Thomas Krijnen 60963acd3f Ability to use OpenCOLLADA when building from CMake 2014-01-02 15:52:20 +00:00
Thomas Krijnen 7748a6ef0f Change some auto keywords into fully qualified type names to make it easier on some of the older compilers 2014-01-02 13:57:34 +00:00
Thomas Krijnen c47a43caf7 IfcGeomObjects: No longer implicitly turn off the availability of triangulated data when USE_BREP_DATA is set. Use DISABLE_TRIANGULATION to explicitly disable the generation of triangulated data to gain performance when only OCC brep data is needed. 2014-01-02 13:33:54 +00:00
Thomas Krijnen 3fa934a056 Fix from https://github.com/yorikvanhavre/IfcOpenShell/commit/1cd23609369d4f6165648a55c39ad268af9cae33 2014-01-01 11:14:39 +00:00
Thomas Krijnen 2bd37fd088 IfcConvert: Unit names and magnitudes + cosmetic fixes 2013-12-31 14:10:38 +00:00
Thomas Krijnen 6b2dc3683a IfcConvert: Propagate all settings from the command line to the IfcGeomObjects kernel 2013-12-27 09:39:20 +00:00
Thomas Krijnen 8653e59403 Cosmetic changes to IfcConvert 2013-12-27 09:37:51 +00:00
Thomas Krijnen 586ad14013 #28 USE_BREP_DATA setting does not respect CONVERT_BACK_UNITS setting 2013-12-27 09:36:14 +00:00
Thomas Krijnen 3c2cf1bb08 Fix for Collada export of transparency and material libraries 2013-12-27 09:33:57 +00:00
Thomas Krijnen 71b173a494 IfcOpenHouse: Don't use a single opening element to create multiple openings 2013-12-13 10:41:22 +00:00
Jang Myeongho 06958a02a4 Fix cmake install scripts.
- fix renamed file: "IfcShapeList.h" -> "IfcRepresentationShapeItem.h"
 - IfcImport target object file.
2013-12-11 03:17:05 +00:00
Thomas Krijnen 30804b4232 Support for surface styles, Multi/Sub-Object materials and material indices in the 3ds max importer 2013-12-08 09:45:14 +00:00
Thomas Krijnen 0f088f02b3 Improvements to Wavefront OBJ serialization, patch by Ivano Ras 2013-11-27 09:13:18 +00:00
Thomas Krijnen 9577778573 Fix for gcc thanks to Ivano Ras 2013-11-25 21:20:07 +00:00
Thomas Krijnen bffb19a92f Use the precision from the IfcGeometricRepresentationContext to dictate OCC modeler tolerances 2013-11-24 15:44:27 +00:00
Thomas Krijnen 0f53a877c7 Add file to test case execution 2013-11-24 14:51:04 +00:00
Thomas Krijnen bbf80bedaa Make .dae support in IfcConvert using OpenCOLLADA optional 2013-11-22 08:23:11 +00:00
Thomas Krijnen eb433ff8e2 Link to Boost.Program_options library from CMake 2013-11-22 08:04:32 +00:00
Thomas Krijnen 03beb42d2e Cosmetic changes 2013-08-12 00:26:15 +00:00
Thomas Krijnen 714bf5eb8d Add revit2014_multiple_bounded_halfspaces.ifc test file 2013-08-11 21:43:18 +00:00
Thomas Krijnen b4059cc340 Tweak processing of IfcBooleanClippingResult and IfcPolygonalBoundedHalfSpace 2013-08-09 05:13:02 +00:00
Thomas Krijnen 27962701b9 Use boost::variant for writable arguments in the IFC serializer 2013-08-04 04:49:08 +00:00
Thomas Krijnen 14a3f80c59 Correct a regression in matrix multiplication order 2013-07-20 22:12:40 +00:00
Thomas Krijnen 063f498066 Additional compatibility for std::tr1::array 2013-07-20 22:00:12 +00:00
Thomas Krijnen 2e0e5862f6 Fix for empty material list in the ColladaSerializer 2013-07-20 21:43:08 +00:00
Thomas Krijnen d6693ff931 Representation surface style initialization fix submitted by ckimmig 2013-07-20 21:41:26 +00:00
Thomas Krijnen 17ebefa158 Fix a bug in the processing of an IfcTrimmedCurve with an IfcLine as a basis constructed from an IfcVector with non-unit length. 2013-06-10 15:47:41 +00:00
Thomas Krijnen 12a0571bf4 Prefix array with tr1 to accomodate older compilers 2013-05-13 07:12:42 +00:00
Thomas Krijnen 1d1fd49608 Added missing files 2013-05-13 06:40:30 +00:00
Thomas Krijnen 259cfa895e Support for styled items in the Blender addon and make use of material indices 2013-05-11 17:14:47 +00:00
Thomas Krijnen 3f048efc79 Add an adapter for IfcGeom::SurfaceStyle so that IfcGeomObjects (and most notably the Python wrapper) need not to be aware of boost::optional
Expose shading and rendering styles to the Python wrapper as well
2013-05-11 15:26:35 +00:00
Thomas Krijnen dccbccfa06 A limited attempt at some const correctness in the IfcGeomObjects interface 2013-05-11 10:03:20 +00:00
Thomas Krijnen 80bc1b5dab [Work in progress] Start adding support for IfcSurfaceStyleShading and -Rendering 2013-05-05 08:49:25 +00:00
Thomas Krijnen 5d4ff0b54a First push of a more all-round geometrical file conversion utility 2013-03-24 10:48:39 +00:00
Thomas Krijnen 852cb7d8c4 Fix 3ds max API version detection 2013-01-13 12:01:20 +00:00
Thomas Krijnen 24b03330ef Update version numbers 2013-01-01 15:11:04 +00:00
Thomas Krijnen e4749147d6 Better Unicode handling in the 3ds max importer
Don't initiate progress handler until valid file is opened
2013-01-01 15:10:14 +00:00
Thomas Krijnen 4f26622e03 Do revert to unknown plane angle unit state after guessing when creating an IfcCompositeCurve 2012-12-31 15:48:04 +00:00
Thomas Krijnen 71b5cd12a8 - Getting ready for Blender 2.65 and Python 3.3.0 with universal Unicode according to PEP 393
- Allow opening of non-latin filenames on Windows, by using the non-standard _wfopen(), meaning that the IfcSpfStream no longer relies on a std::istream but a FILE* descriptor
2012-12-31 11:47:46 +00:00
Thomas Krijnen 6064ab0fa4 Disable building the QT Viewer from CMake 2012-12-18 12:18:52 +00:00
Thomas Krijnen 48e61cdcea Address an incompatibility in IfcOpenHouse.cpp introduced within OCCT 6.5.2 2012-12-18 12:17:35 +00:00
Thomas Krijnen a33fc19ed6 Add the LGPL license text supplement to the repository 2012-11-22 18:13:26 +00:00
Thomas Krijnen 578dce4a47 Provide more contextual information in the IFC SPF file header 2012-11-17 15:19:38 +00:00
Thomas Krijnen f1322996f0 Fixed a bug writing IFC files using ICU 2012-11-17 15:18:52 +00:00
Thomas Krijnen 2353c25fb8 - Handle explicit attributes re-declared as derived in a subtype
- Update IfcOpenHouse to import correctly in Autodesk Autocad Architecture 2013
2012-11-10 09:36:34 +00:00
Thomas Krijnen e56281a72e - Correctly format REALs according to ISO 10303-21 instead of C++ std::stream double formatting
- Add the IfcHierarchyHelper to assist in the creation of IFC files
- Add the IfcOpenHouse example for writing topological geometry and tessellated Open Cascade shapes to IFC
2012-11-04 16:26:33 +00:00
Thomas Krijnen db98906643 Add Boost as a required dependency in the CMake build file 2012-11-04 11:04:55 +00:00
Thomas Krijnen e729795da2 Add an option to disable the subtraction of IfcOpeningElements from relating building elements to the IfcGeomObject settings 2012-10-19 08:20:43 +00:00
Thomas Krijnen 8b11a1baf7 Correctly escape apostrophes in strings on write using the IfcCharacterEncoder 2012-10-09 19:54:35 +00:00
Thomas Krijnen 2f500aa098 IfcGeom: Use the 'wire creation tolerance' on point projection for trimmed curves
Fall back to trimming by parameter if possible and point projection fails
2012-09-16 12:49:55 +00:00
Thomas Krijnen 0814c16f06 Fix compilation errors of IfcCharacterEncoder in case ICU is not available 2012-09-16 12:45:44 +00:00
Thomas Krijnen cb6884b48e Encode characters outside the valid range for IFC SPF files and escape backslashes when writing IFC files 2012-09-09 11:55:53 +00:00
947 changed files with 759248 additions and 158390 deletions
+8
View File
@@ -0,0 +1,8 @@
c14f5eeca042232025797990396232e4feab53e7
d6881e833da0b6278313870d37d42ca6ece8686a
892be5444c5bd01a601c99243ac8d3e7b2f0e779
d169a964dd7e9ab5c98b35a82bcbc76dc6229a7a
4a6ec11f6f84a3d1fed2ee9b2f85d783ac3daa9d
2c9d6a47f4d24a923069775206bf734feeb14830
8f1743ed64a2a52c201a1ef5e312b4d3a7a922cf
ad7f030344c405e10cfa7d5cf06d82c121eeb825
+3
View File
@@ -0,0 +1,3 @@
# These are supported funding model platforms
github: [aothms]
@@ -0,0 +1,66 @@
name: Publish-blenderbim-multiplatform
on:
push:
paths:
- 'src/blenderbim/**'
- '.github/workflows/ci-blenderbim-matrix.yml'
env:
major: 0
minor: 0
name: blenderbim
jobs:
activate:
runs-on: ubuntu-latest
if: |
github.repository == 'IfcOpenShell/IfcOpenShell'
steps:
- name: Set env
run: echo ok go
build:
name: ${{ matrix.config.name }}-${{ matrix.pyver }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
pyver: [py37, py39]
config:
- {
name: "Windows Build",
short_name: win,
}
- {
name: "Linux Build",
short_name: linux
}
- {
name: "MacOS Build",
short_name: macos
}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2 # https://github.com/actions/setup-python
with:
python-version: '3.7.7' # Version range or exact version of a Python version to use, using SemVer's version range syntax
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
- run: echo ${{ env.DATE }}
- name: Get current date
id: date
run: echo "::set-output name=date::$(date +'%y%m%d')"
- name: Compile
run: |
cp -r src/blenderbim src/blenderbim_${{ matrix.config.short_name }}_${{ matrix.pyver }} &&
cd src/blenderbim_${{ matrix.config.short_name }}_${{ matrix.pyver }} &&
make dist PLATFORM=${{ matrix.config.short_name }} PYVERSION=${{ matrix.pyver }}
- name: Upload Zip file to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: src/blenderbim_${{ matrix.config.short_name }}_${{ matrix.pyver }}/dist/blender28-bim-${{steps.date.outputs.date}}-${{ matrix.pyver }}-${{ matrix.config.short_name }}.zip
asset_name: blender28-bim-${{steps.date.outputs.date}}-${{ matrix.pyver }}-${{ matrix.config.short_name }}.zip
tag: "blenderbim-${{steps.date.outputs.date}}"
overwrite: true
body: "Daily developer testing build blenderbim-${{steps.date.outputs.date}}"
+107
View File
@@ -0,0 +1,107 @@
name: CI
on:
push:
jobs:
activate:
runs-on: ubuntu-latest
if: |
github.repository == 'IfcOpenShell/IfcOpenShell' &&
!startsWith(github.event.head_commit.message, 'Release ') &&
!contains(github.event.head_commit.message, 'ci skip')
steps:
- run: echo ok go
build:
runs-on: ubuntu-20.04
needs: activate
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: |
sudo apt update
sudo apt-get install --no-install-recommends \
git cmake gcc g++ libboost1.67-all-dev python3-all-dev swig libpcre3-dev libxml2-dev \
liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev liboce-visualization-dev liboce-ocaf-lite-dev
-
name: ccache
uses: hendrikmuhs/ccache-action@v1
-
name: Build ifcopenshell
run: |
mkdir build && cd build
cmake \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_INSTALL_PREFIX=$PWD/install/ \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=/usr \
-DCMAKE_SYSTEM_PREFIX_PATH=/usr \
-DBUILD_PACKAGE=On \
-DOCC_INCLUDE_DIR=/usr/include/oce \
-DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
-DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \
-DPYTHON_INCLUDE_DIR:PATH=/usr/include/python3.8 \
-DPYTHON_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libpython3.8.so \
-DCOLLADA_SUPPORT=Off \
-DLIBXML2_INCLUDE_DIR=/usr/include/libxml2 \
-DLIBXML2_LIBRARIES=/usr/lib/x86_64-linux-gnu/libxml2.so \
../cmake
make -j $(nproc)
make install
-
name: Package
run: |
make package
working-directory: build
- name: Upload
uses: actions/upload-artifact@v2
with:
# Artifact name
name: ifcos-artifacts
# Directory containing files to upload
path: build/assets/Ifc*
deliver:
runs-on: ubuntu-20.04
needs: build
name: Docker Build, Tag, Push
steps:
- uses: actions/checkout@v2
with:
lfs: true
- name: Download
uses: actions/download-artifact@v2
with:
# Artifact name
name: ifcos-artifacts
path: artifacts/
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Login to Dockerhub
uses: docker/login-action@v1
with:
username: aecgeeks
password: ${{ secrets.DOCKER_HUB_TOKEN }}
-
name: Build container image
uses: docker/build-push-action@v2
with:
context: artifacts
repository: aecgeeks/ifcopenshell
tags: aecgeeks/ifcopenshell:latest
file: ./Dockerfile
push: true
+96
View File
@@ -0,0 +1,96 @@
name: Release
on:
push:
tags:
- 'v[0-9].[0-9].[0-9]*'
jobs:
activate:
if: github.repository == 'IfcOpenShell/IfcOpenShell'
runs-on: ubuntu-latest
steps:
- run: echo ok go
build:
needs: activate
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v2
with:
lfs: true
-
name: Update ubuntu
run: |
sudo apt update
sudo apt-get install git cmake gcc g++ libboost1.67-all-dev python3-all-dev swig libpcre3-dev libxml2-dev
sudo apt-get install liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev liboce-visualization-dev liboce-ocaf-lite-dev
- name: Build
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CHANGELOG_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
mkdir build && cd build
cmake \
-DCMAKE_INSTALL_PREFIX=$PWD/install/ \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=/usr \
-DCMAKE_SYSTEM_PREFIX_PATH=/usr \
-DBUILD_PACKAGE=On \
-DOCC_INCLUDE_DIR=/usr/include/oce \
-DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
-DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \
-DPYTHON_INCLUDE_DIR:PATH=/usr/include/python3.8 \
-DPYTHON_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libpython3.8.so \
-DCOLLADA_SUPPORT=Off \
-DLIBXML2_INCLUDE_DIR=/usr/include/libxml2 \
-DLIBXML2_LIBRARIES=/usr/lib/x86_64-linux-gnu/libxml2.so \
../cmake
make -j $(nproc)
make install
- name: Package
id: package
run: |
make package
echo ::set-output name=tgz::$( ls assets/*.tar.gz | head -n 1 | xargs basename )
echo ::set-output name=deb::$( ls assets/*.deb | head -n 1 | xargs basename )
working-directory: build
env:
CHANGELOG_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Release
id: release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: true
body: |
Changes to this release
- add github actions support #1306
- add boost depends to ifcopenshell deb packaging
- <add more changes here>
See more details in the documentation
# body_path: build/CHANGELOG.md
- name: Upload TGZ
id: upload-tgz
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
asset_path: build/assets/${{ steps.package.outputs.tgz }}
asset_name: ${{ steps.package.outputs.tgz }}
asset_content_type: application/x-gzip
- name: Upload DEB
id: upload-deb
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
asset_path: build/assets/${{ steps.package.outputs.deb }}
asset_name: ${{ steps.package.outputs.deb }}
asset_content_type: application/vnd.debian.binary-package
+34
View File
@@ -0,0 +1,34 @@
# Dependency and build folders created by the build scripts
/_build-vs2017-x64/
/_deps-vs2017-x64-installed/
/_deps/
/deps*/
/build*/
/install*/
/win/BuildDepsCache*.txt
# IfcExpressParser residue
/src/ifcexpressparser/express_parser.py
# General Python residue
__pycache__
*.py.bak
# Visual Studio Code files
.vscode
# PyCharm files
.idea
#Virtual Env Files
Pipfile
Pipfile.lock
# Docs
/docs/output
/docs/rst_files
/docs/doxygen
/src/ifcblenderexport/docs/_build
# gettext binary translation files
*.mo
# Vim
*.swp
+7
View File
@@ -0,0 +1,7 @@
[submodule "test/input"]
path = test/input
url = https://github.com/IfcOpenShell/files
ignore = dirty
[submodule "src/ifcopenshell-python/ifcopenshell/mvd"]
path = src/ifcopenshell-python/ifcopenshell/mvd
url = https://github.com/opensourceBIM/python-mvdxml/
+73
View File
@@ -0,0 +1,73 @@
language: cpp
compiler: gcc
cache: ccache
os: linux
dist: focal
addons:
apt:
update: true
packages:
- libboost-date-time-dev
- libboost-filesystem-dev
- libboost-iostreams-dev
- libboost-program-options-dev
- libboost-regex-dev
- libboost-system-dev
- libboost-thread-dev
- libocct-data-exchange-dev
- libocct-foundation-dev
- libocct-modeling-algorithms-dev
- libocct-modeling-data-dev
- libxml2-dev
- nlohmann-json3-dev
- opencollada-dev
- python3-all-dev
- swig
before_script:
- if [ $TRAVIS_OS_NAME == "linux" ]; then ccache -z; fi
script:
- pwd
- mkdir build && cd build
- |
cmake \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DOCC_INCLUDE_DIR=/usr/include/opencascade \
-DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
-DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \
-DPYTHON_INCLUDE_DIR:PATH=/usr/include/python3.8 \
-DPYTHON_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libpython3.8.so \
-DGLTF_SUPPORT=On \
-DJSON_INCLUDE_DIR=/usr/include \
../cmake
# TODO: Drop sudo
- sudo make -j $(nproc) install
- cd ../test
- /usr/bin/python tests.py
- cd input
- /usr/local/bin/IfcConvert -yv acad2010_walls.ifc acad2010_walls.glb
# - gltf_validator acad2010_walls.glb
- /usr/bin/python -c "from io import open; import ifcopenshell; f = ifcopenshell.open('encoding.ifc'); assert list(map(ord, f[1][0])) == [39, 97, 39, 32, 49, 109, 179, 32, 8804, 32, 53, 109, 179, 32, 8805, 32, 49, 48, 109, 179]"
- |
(for i in *.ifc; do \
echo $i | tee -a log; \
timeout 1m /usr/local/bin/IfcConvert -yv "$i" "$i.dae" --validate >> log 2>&1; \
echo $i $? >> statuses; \
done) || true
- echo Failed
- grep -v 0$ statuses
- grep -v 0$ statuses | wc -l
- echo Succeeded
- grep 0$ statuses
- grep 0$ statuses | wc -l
after_script:
- if [ $TRAVIS_OS_NAME == "linux" ]; then ccache -s; fi
+165
View File
@@ -0,0 +1,165 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
+37
View File
@@ -0,0 +1,37 @@
# -*- mode: Dockerfile -*-
FROM ubuntu:focal
ARG CHANNEL
ENV CHANNEL=${CHANNEL:-latest}
RUN apt-get update \
&& apt-get install -y \
vim \
ssh \
sudo \
wget \
software-properties-common ;\
rm -rf /var/lib/apt/lists/*
RUN useradd --user-group --create-home --shell /bin/bash IfcOpenShell ;\
echo "IfcOpenShell ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
ENV DEBIAN_FRONTEND=noninteractive
RUN echo "deb http://archive.ubuntu.com/ubuntu focal-proposed main restricted" | tee -a /etc/apt/sources.list; \
echo "deb http://archive.ubuntu.com/ubuntu focal-proposed universe" | tee -a /etc/apt/sources.list; \
echo "deb http://archive.ubuntu.com/ubuntu focal-proposed multiverse" | tee -a /etc/apt/sources.list; \
apt-get -qq update; \
apt-get -y install tzdata dos2unix rsync; \
apt-get -y install python3 libxml2 liboce-foundation11 liboce-modeling11 liboce-ocaf11 liboce-visualization11 \
liboce-ocaf-lite11 libpython3.8 libboost-system1.67.0 libboost-program-options1.67.0 \
libboost-regex1.67.0 libboost-thread1.67.0 libboost-date-time1.67.0; \
rm -rf /var/lib/apt/lists/* ;
COPY . /home/IfcOpenShell/
RUN ls -lrtR /home/IfcOpenShell
RUN dpkg -i /home/IfcOpenShell/*.deb
USER IfcOpenShell
-65
View File
@@ -1,65 +0,0 @@
IfcOpenShell
============
open source (LGPL) software library for working with the IFC file format
http://IfcOpenShell.org
Compiling on Windows
====================
Users are advised to use the Visual Studio .sln file in the win/ folder.
For Windows users a prebuilt Open CASCADE version is available from the
http://opencascade.org website. Download and install this version and
provide the paths to the Open CASCADE header and library files to MS
Visual Studio C++.
For building the Autodesk 3ds Max plugin, the 3ds Max SDK needs to be
installed as well as 3ds Max itself. Please provide the include and
library paths to Visual Studio.
For building the IfcPython wrapper, SWIG needs to be installed. Please
download the latest swigwin version from http://www.swig.org/download.html.
After extracting the .zip file, please add the extracted folder to the PATH
environment variable. Python needs to be installed, please provide the
include and library paths to Visual Studio.
Compiling on *nix
====================
Users are advised to build IfcOpenShell using the cmake file provided in
the cmake/ folder. There might be an Open CASCADE package in your operating
system's software repository. If not, you will need to compile Open
CASCADE yourself. See http://opencascade.org.
For building the IfcPython wrapper, SWIG and Python development are
required.
To build IfcOpenShell please take the following steps:
$ cd /path/to/IfcOpenShell/cmake
$ mkdir build
$ cd build
Optionally:
$ OCC_INCLUDE_PATH="/path/to/OpenCASCADE/include"
$ OCC_LIBRARY_PATH="/path/to/OpenCASCADE/lib"
$ export OCC_INCLUDE_PATH
$ export OCC_LIBRARY_PATH
$ cmake ../
$ make
If all worked out correctly you can now use IfcOpenShell. For example:
$ wget ftp://ftp.dds.no/pub/ifc/Munkerud/Munkerud_hus6_BE.zip
$ unzip Munkerud_hus6_BE.zip
$ ./IfcObj Munkerud_hus6_BE.ifc
$ less Munkerud_hus6_BE.obj
Or:
$ wget ftp://ftp.dds.no/pub/ifc/Munkerud/Munkerud_hus6_BE.zip
$ unzip Munkerud_hus6_BE.zip
$ python
>>> import IfcImport
>>> IfcImport.Init('Munkerud_hus6_BE.ifc')
>>> geom = IfcImport.Get()
>>> geom.name
>>> for v in geom.mesh.verts: v
+228
View File
@@ -0,0 +1,228 @@
IfcOpenShell
============
IfcOpenShell is an open source ([LGPL]) software library for working with the Industry Foundation Classes ([IFC])
file format. Currently supported IFC releases are [IFC2x3 TC1] and [IFC4 Add2 TC1].
For more information, see
* [http://ifcopenshell.org](http://ifcopenshell.org)
* [http://academy.ifcopenshell.org](http://academy.ifcopenshell.org)
[![Build Status](https://travis-ci.org/IfcOpenShell/IfcOpenShell.svg?branch=v0.6.0)](https://travis-ci.org/IfcOpenShell/IfcOpenShell)
Prerequisites
-------------
* Git
* CMake (2.6 or newer)
* Windows: [Visual Studio] 2008 or newer with C++ toolset (or [Visual C++ Build Tools]) or [MSYS2] + MinGW
* *nix: GCC 4.7 or newer, or Clang (any version)
Dependencies
-------------
* [Boost](http://www.boost.org/)
* [Open Cascade](https://dev.opencascade.org/) - *optional*, but required for building IfcGeom
([official](https://dev.opencascade.org/release), "OCCT", or [community edition](https://github.com/tpaviot/oce), "OCE")
For converting IFC representation items into BRep solids and tesselated meshes
* [OpenCOLLADA](https://github.com/khronosGroup/OpenCOLLADA/) - *optional*
For IfcConvert to be able to write tessellated Collada (.dae) files
* [SWIG](http://www.swig.org/) and [Python](https://www.python.org/) - *optional*
For building the IfcOpenShell Python interface and the Blender add-on
* [3ds Max SDK](http://www.autodesk.com/products/3ds-max/free-trial) - *optional*
For building the 3ds Max plug-in.
All recent versions of 3ds Max (2014 and newer) are 64-bit only, so a 64-bit installation is assumed.
Building IfcOpenShell
---------------------
**Note:** The path where the source code is cloned to can contain spaces but non-ASCII characters are very likely to cause problems with the build.
### Compiling on Windows
The preferred way to fetch and build this project's dependencies is to use the build scripts
in win/ folder. **See [win/readme.md] for more information**.
#### Using Visual Studio
Instructions in a nutshell (**assuming Visual Studio 2015 x64 environment variables set**):
> cd IfcOpenShell\win
> build-deps.cmd
> run-cmake.bat
NB: `build-deps.cmd` need to be ran from the directory containing it, i.e. the `./win` folder.
You can now open and build the solution file in Visual Studio:
> ..\build-vs2015-x64\IfcOpenShell.sln
As the scripts default to using the `RelWithDebInfo` configuration, and a freshly created solution by CMake defaults
to `Debug`, make sure to switch the used build configuration. Build the `INSTALL` project (right-click -> Project
Only) to deploy the headers and binaries into a single location if wanted/needed.
Alternatively, one can use the utility batch file(s) to build and install the project easily from the command-line
(installing a project will build it also, if required):
> install-ifcopenshell.bat
#### Using MSYS2 + MinGW
Start the MSYS2 Shell and then:
$ cd IfcOpenShell/win
$ ./build-deps.sh
$ ./run-cmake.sh
$ ./install-ifcopenshell.sh
#### Using Bash on Ubuntu on Windows
Start Bash on Ubuntu on Windows and follow the instructions below. Compiling on Ubuntu 14.04.4 LTS using GCC 4.8.4
or Clang 3.5 has been confirmed to work.
### Compiling on *nix
The following instructions are for Ubuntu, modify as required for other operating systems. [nix/build-all.py] script
can be experimented with and studied for pointers for other operating systems, but note that this script is not currently
meant to be used for a typical IfcOpenShell workspace setup.
Note: where `make -j` is written, add a number roughly equal to the amount of CPU cores + 1.
**1)** Install most of the prerequisites and dependencies:
$ sudo apt-get install git cmake gcc g++ libboost-all-dev
**2a)** Either use an OCE package from your operating system's software repository
$ sudo apt-get install liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev liboce-visualization-dev liboce-ocaf-lite-dev
**2b)** or (if not available, or the latest code is wanted) compile OCE yourself (note that the build takes a long time):
$ sudo apt-get install libftgl-dev libtbb2 libtbb-dev libgl1-mesa-dev libfreetype6-dev
$ git clone https://github.com/tpaviot/oce.git
$ cd oce
$ mkdir build && cd build
$ cmake ..
$ make -j
$ sudo make install
**2c)** or obtain and compile OCCT from https://dev.opencascade.org/release
**3)** For building IfcConvert with COLLADA (.dae) support (on by default), OpenCOLLADA is needed:
$ sudo apt-get install libpcre3-dev libxml2-dev
$ git clone https://github.com/KhronosGroup/OpenCOLLADA.git
$ cd OpenCOLLADA
Using a known good revision, but HEAD should work too:
$ git checkout 064a60b65c2c31b94f013820856bc84fb1937cc6
$ mkdir build && cd build
$ cmake ..
$ make -j
$ sudo make install
**4)** For building the IfcPython wrapper (on by default), SWIG and Python development are needed, if not already available:
$ sudo apt-get install python-all-dev swig
**5)** To build IfcOpenShell please take the following steps. Alternatively use environment variables for setting the
dependencies' paths. `OCC_INCLUDE_DIR` might be needed to set also. `OPENCOLLADA_INCLUDE_DIR` and `OPENCOLLADA_LIBRARY_DIR`
(and potentially `PCRE_LIBRARY_DIR`) are needed if building with COLLADA support. (`-DCOLLADA_SUPPORT=0` disables it).
$ cd /path/to/IfcOpenShell
$ mkdir build && cd build
$ cmake ../cmake -DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu/ \
-DOPENCOLLADA_INCLUDE_DIR="/usr/local/include/opencollada" \
-DOPENCOLLADA_LIBRARY_DIR="/usr/local/lib/opencollada" \
-DPCRE_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu/
$ make -j
If all worked out correctly you can now use IfcOpenShell. See the examples below.
**6)** Install the project if wanted:
$ sudo make install
Installing IfcOpenShell with Conda
----------------------------------
Another option for building and installing IfcOpenShell is to use the popular
[Anaconda Python Distribution](https://www.anaconda.com/download).
The requirements are spread across a number of channels.
You can add these channels to your configuration, or specify them all on the command line:
$ conda install -c conda-forge -c oce -c dlr-sc -c ifcopenshell ifcopenshell
Usage examples
--------------
**Invoking IfcConvert from the command line**
$ wget ftp://ftp.dds.no/pub/ifc/Munkerud/Munkerud_hus6_BE.zip
$ unzip Munkerud_hus6_BE.zip
$ ./IfcConvert Munkerud_hus6_BE.ifc
$ less Munkerud_hus6_BE.obj
**Using the IfcOpenShell Python interface**
$ wget -O duplex.zip https://portal.nibs.org/files/wl/?id=4DsTgHFQAcOXzFetxbpRCECPbbfUqpgo
$ unzip duplex.zip
$ python
>>> import ifcopenshell
>>> f = ifcopenshell.open("Duplex_A_20110907_optimized.ifc")
>>>
>>> # Accessing entity instances by type:
>>> f.by_type("ifcwall")[:2]
[#91=IfcWallStandardCase('2O2Fr$t4X7Zf8NOew3FL9r',#1,'Basic Wall:Interior - Partition (92mm Stud):144586',$,'Basic Wall:Interior - Partition (92mm Stud):128360',#5198,#18806,'144586'), #92=IfcWallStandardCase('2O2Fr$t4X7Zf8NOew3FLIE',#1,'Basic Wall:Interior - Partition (92mm Stud):143921',$,'Basic Wall:Interior - Partition (92mm Stud):128360',#5206,#18805,'143921')]
>>> wall = _[0]
>>> len(wall) # number of EXPRESS attributes
8
>>>
>>> # Accessing EXPRESS attributes by name:
>>> wall.GlobalId
'2O2Fr$t4X7Zf8NOew3FL9r'
>>> wall.Name = "My wall"
>>> wall.NonExistingAttr
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".\ifcopenshell.py", line 14, in __getattr__
except: raise AttributeError("entity instance of type '%s' has no attribute'%s'"%(self.wrapped_data.is_a(), name)) from None
AttributeError: entity instance of type 'IfcWallStandardCase' has no attribute 'NonExistingAttr'
>>> wall.GlobalId = 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".\ifcopenshell.py", line 26, in __setattr__
self[self.wrapped_data.get_argument_index(key)] = value
File ".\ifcopenshell.py", line 30, in __setitem__
self.wrapped_data.set_argument(idx, entity_instance.map_value(value))
File ".\ifc_wrapper.py", line 118, in <lambda>
set_argument = lambda self,x,y: self._set_argument(x) if y is None else self
._set_argument(x,y)
File ".\ifc_wrapper.py", line 114, in _set_argument
def _set_argument(self, *args): return _ifc_wrapper.entity_instance__set_argument(self, *args)
RuntimeError: INT is not a valid type for 'GlobalId'
>>> # Creating new entity instances
>>> f.createIfcCartesianPoint(Coordinates=(1.0,1.5,2.0))
#27530=IfcCartesianPoint((1.,1.5,2.))
>>>
>>> # Working with GlobalId attributes:
>>> import uuid
>>> ifcopenshell.guid.compress(uuid.uuid1().hex)
'3x4C8Q_6qHuv$P$FYkANRX'
>>> new_guid = _
>>> owner_hist = f.by_type("IfcOwnerHistory")[0]
>>> new_wall = f.createIfcWallStandardCase(new_guid, owner_hist, None, None, Tag='my_tag')
>>> new_wall.ObjectType = ''
>>> new_wall.ObjectPlacement = new_wall.Representation = None
>>>
>>> # Accessing entity instances by instance id or GlobalId:
>>> f[92]
#92=IfcWallStandardCase('2O2Fr$t4X7Zf8NOew3FLIE',#1,'Basic Wall:Interior - Partition (92mm Stud):143921',$,'Basic Wall:Interior - Partition (92mm Stud):128360',#5206,#18805,'143921')
>>> f['2O2Fr$t4X7Zf8NOew3FLIE']
#92=IfcWallStandardCase('2O2Fr$t4X7Zf8NOew3FLIE',#1,'Basic Wall:Interior - Partition (92mm Stud):143921',$,'Basic Wall:Interior - Partition (92mm Stud):128360',#5206,#18805,'143921')
>>>
>>> # Writing IFC-SPF files to disk:
>>> f.write("out.ifc")
[LGPL]: https://github.com/IfcOpenShell/IfcOpenShell/tree/master/COPYING "LGPL"
[IFC]: https://technical.buildingsmart.org/standards/ifc/ "IFC"
[IFC2x3 TC1]: https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/ "IFC2x3 TC1"
[IFC4 Add2 TC1]: https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/ "IFC4 Add2 TC1"
[Visual Studio]: https://www.visualstudio.com/ "Visual Studio"
[Visual C++ Build Tools]: http://landinghub.visualstudio.com/visual-cpp-build-tools "Visual C++ Build Tools"
[MSYS2]: https://msys2.github.io/ "MSYS2"
[win/readme.md]: https://github.com/IfcOpenShell/IfcOpenShell/tree/master/win/readme.md "win/readme.md"
[nix/build-all.py]: https://github.com/IfcOpenShell/IfcOpenShell/tree/master/nix/build-all.py "nix/build-all.py"
+784 -142
View File
@@ -1,168 +1,810 @@
cmake_minimum_required (VERSION 2.6)
project (IfcOpenShell)
################################################################################
# #
# This file is part of IfcOpenShell. #
# #
# IfcOpenShell is free software: you can redistribute it and/or modify #
# it under the terms of the Lesser GNU General Public License as published by #
# the Free Software Foundation, either version 3.0 of the License, or #
# (at your option) any later version. #
# #
# IfcOpenShell is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# Lesser GNU General Public License for more details. #
# #
# You should have received a copy of the Lesser GNU General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
# #
################################################################################
# Find Open CASCADE header files
IF("$ENV{OCC_INCLUDE_DIR}" STREQUAL "")
SET(OCC_INCLUDE_DIR "/usr/include/opencascade/" CACHE FILEPATH "Open CASCADE header files")
MESSAGE(STATUS "Looking for opencascade include files in: ${OCC_INCLUDE_DIR}")
MESSAGE(STATUS "Use OCC_INCLUDE_DIR to specify another directory")
cmake_minimum_required(VERSION 3.1.3)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON) # not necessary, but encouraged
project (IfcOpenShell VERSION 0.6.0)
# use extra version to make pre-release using eg semver
set( EXTRA_VERSION "-alpha.3")
foreach(max_year RANGE 2014 2030)
set(max_sdk "$ENV{ADSK_3DSMAX_SDK_${max_year}}")
if (NOT "${max_sdk}" STREQUAL "")
MESSAGE(STATUS "Autodesk 3ds Max SDK found at ${max_sdk}")
set(HAS_MAX TRUE)
endif()
endforeach()
OPTION(COLLADA_SUPPORT "Build IfcConvert with COLLADA support (requires OpenCOLLADA)." ON)
OPTION(IFCXML_SUPPORT "Build IfcParse with ifcXML support (requires libxml2)." ON)
OPTION(ENABLE_BUILD_OPTIMIZATIONS "Enable certain compiler and linker optimizations on RelWithDebInfo and Release builds." OFF)
OPTION(IFCCONVERT_DOUBLE_PRECISION "IfcConvert: Use double precision floating-point numbers." ON)
OPTION(BUILD_PACKAGE "" OFF)
OPTION(BUILD_IFCGEOM "Build IfcGeom." ON)
OPTION(BUILD_DOCUMENTATION "Build IfcOpenShell Documentation." OFF)
OPTION(BUILD_IFCPYTHON "Build IfcPython." ON)
OPTION(BUILD_EXAMPLES "Build example applications." ON)
OPTION(BUILD_GEOMSERVER "Build IfcGeomServer executable." ON)
OPTION(BUILD_CONVERT "Build IfcConvert executable." ON)
OPTION(USE_VLD "Use Visual Leak Detector for debugging memory leaks, MSVC-only." OFF)
OPTION(USE_MMAP "Adds a command line options to parse IFC files from memory mapped files using Boost.Iostreams" OFF)
OPTION(BUILD_SHARED_LIBS "Build IfcParse and IfcGeom as shared libs (SO/DLL)." OFF)
if (${HAS_MAX})
OPTION(BUILD_IFCMAX "Build IfcMax, a 3ds Max plug-in, Windows-only." ON)
endif()
if (${BUILD_CONVERT})
OPTION(GLTF_SUPPORT "Build IfcConvert with glTF support (requires json.hpp)." OFF)
endif()
OPTION(USERSPACE_PYTHON_PREFIX "Installs IfcPython for the current user only instead of system-wide." OFF)
# TODO QtViewer is deprecated ATM as it uses the 0.4 API
# OPTION(BUILD_QTVIEWER "Build IfcOpenShell Qt GUI Viewer (requires Qt 4 framework)." OFF)
include(GNUInstallDirs)
if((BUILD_CONVERT OR BUILD_GEOMSERVER OR BUILD_IFCPYTHON) AND (NOT BUILD_IFCGEOM))
message(STATUS "'IfcGeom' is required with current outputs")
set(BUILD_IFCGEOM ON)
endif()
# Specify where to install files
IF(NOT BINDIR)
set(BINDIR bin)
ENDIF()
IF(NOT IS_ABSOLUTE ${BINDIR})
set(BINDIR ${CMAKE_INSTALL_BINDIR})
ENDIF()
MESSAGE(STATUS "BINDIR: ${BINDIR}")
IF(NOT INCLUDEDIR)
set(INCLUDEDIR include)
ENDIF()
IF(NOT IS_ABSOLUTE ${INCLUDEDIR})
set(INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR})
ENDIF()
MESSAGE(STATUS "INCLUDEDIR: ${INCLUDEDIR}")
IF(NOT LIBDIR)
set(LIBDIR lib)
ENDIF()
IF(NOT IS_ABSOLUTE ${LIBDIR})
set(LIBDIR ${CMAKE_INSTALL_LIBDIR})
ENDIF()
MESSAGE(STATUS "LIBDIR: ${LIBDIR}")
set(IFCOPENSHELL_LIBRARY_DIR "") # for *nix rpaths
if (BUILD_SHARED_LIBS)
add_definitions(-DIFC_SHARED_BUILD)
if (MSVC)
message(WARNING "Building DLLs against the static VC run-time. This is not recommended if the DLLs are to be redistributed.")
# C4521: 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'
# There will be couple hundreds of these so suppress them away, https://msdn.microsoft.com/en-us/library/esew7y1w.aspx
add_definitions(-wd4251)
endif()
set(IFCOPENSHELL_LIBRARY_DIR "${LIBDIR}")
endif()
# Create cache entries if absent for environment variables
MACRO(UNIFY_ENVVARS_AND_CACHE VAR)
IF ((NOT DEFINED ${VAR}) AND (NOT "$ENV{${VAR}}" STREQUAL ""))
SET(${VAR} "$ENV{${VAR}}" CACHE STRING "${VAR}" FORCE)
ENDIF()
ENDMACRO()
UNIFY_ENVVARS_AND_CACHE(OCC_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(OCC_LIBRARY_DIR)
UNIFY_ENVVARS_AND_CACHE(OPENCOLLADA_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(OPENCOLLADA_LIBRARY_DIR)
UNIFY_ENVVARS_AND_CACHE(LIBXML2_INCLUDE_DIR)
UNIFY_ENVVARS_AND_CACHE(LIBXML2_LIBRARIES)
UNIFY_ENVVARS_AND_CACHE(PCRE_LIBRARY_DIR)
UNIFY_ENVVARS_AND_CACHE(PYTHON_EXECUTABLE)
if (GLTF_SUPPORT AND BUILD_CONVERT)
UNIFY_ENVVARS_AND_CACHE(JSON_INCLUDE_DIR)
FIND_FILE(json_hpp "json.hpp" ${JSON_INCLUDE_DIR}/nlohmann)
IF(json_hpp)
MESSAGE(STATUS "JSON for Modern C++ header file found")
ELSE()
SET(OCC_INCLUDE_DIR $ENV{OCC_INCLUDE_DIR} CACHE FILEPATH "Open CASCADE header files")
MESSAGE(STATUS "Looking for opencascade include files in: ${OCC_INCLUDE_DIR}")
MESSAGE(FATAL_ERROR "Unable to find JSON for Modern C++ header file, aborting")
ENDIF()
add_definitions(-DWITH_GLTF)
endif()
FIND_FILE(gp_Pnt_hxx "gp_Pnt.hxx" ${OCC_INCLUDE_DIR} /usr/inc /usr/local/inc /usr/local/include/oce)
IF(gp_Pnt_hxx)
MESSAGE(STATUS "Header files found")
# Set INSTALL_RPATH for target
MACRO(SET_INSTALL_RPATHS _target _paths)
SET(${_target}_rpaths "")
FOREACH(_path ${_paths})
LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${_path}" isSystemDir)
IF("${isSystemDir}" STREQUAL "-1")
LIST(APPEND ${_target}_rpaths ${_path})
ENDIF()
ENDFOREACH()
MESSAGE(STATUS "Set INSTALL_RPATH for ${_target}: ${${_target}_rpaths}")
SET_TARGET_PROPERTIES(${_target} PROPERTIES INSTALL_RPATH "${${_target}_rpaths}")
ENDMACRO()
# Find Boost: On win32 the (hardcoded) default is to use static libraries and
# runtime, when doing running conda-build we pick what conda prepared for us.
IF(WIN32 AND ("$ENV{CONDA_BUILD}" STREQUAL ""))
SET(Boost_USE_STATIC_LIBS ON)
SET(Boost_USE_STATIC_RUNTIME ON)
SET(Boost_USE_MULTITHREADED ON)
# Disable Boost's autolinking as the libraries to be linked to are supplied
# already by CMake, and wrong libraries would be asked for when code is
# compiled with a toolset different from default.
if(MSVC)
ADD_DEFINITIONS(-DBOOST_ALL_NO_LIB)
# Necessary for boost version >= 1.67
SET(BCRYPT_LIBRARIES "bcrypt.lib")
ENDIF()
ELSE()
MESSAGE(FATAL_ERROR "Unable to find header files, aborting")
# Disable Boost's autolinking as the libraries to be linked to are supplied
# already by CMake, and it's going to conflict if there are multiple, as is
# the case in conda-forge's libboost feedstock.
ADD_DEFINITIONS(-DBOOST_ALL_NO_LIB)
IF(WIN32)
# Necessary for boost version >= 1.67
SET(BCRYPT_LIBRARIES "bcrypt.lib")
ENDIF()
ENDIF()
# Find Open CASCADE library files
IF("$ENV{OCC_LIBRARY_DIR}" STREQUAL "")
SET(OCC_LIBRARY_DIR "/usr/lib/" CACHE FILEPATH "Open CASCADE library files")
MESSAGE(STATUS "Looking for opencascade library files in: ${OCC_LIBRARY_DIR}")
MESSAGE(STATUS "Use OCC_LIBRARY_DIR to specify another directory")
ELSE()
SET(OCC_LIBRARY_DIR $ENV{OCC_LIBRARY_DIR} CACHE FILEPATH "Open CASCADE library files")
MESSAGE(STATUS "Looking for opencascade library files in: ${OCC_LIBRARY_DIR}")
ENDIF()
set(BOOST_COMPONENTS system program_options regex thread date_time)
if(USE_MMAP)
if(MSVC)
# filesystem is necessary for the utf-16 wpath
set(BOOST_COMPONENTS ${BOOST_COMPONENTS} iostreams filesystem)
else()
set(BOOST_COMPONENTS ${BOOST_COMPONENTS} iostreams)
endif()
add_definitions(-DUSE_MMAP)
endif()
FIND_LIBRARY(libTKernel "TKernel" ${OCC_LIBRARY_DIR} /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64)
IF(libTKernel)
MESSAGE(STATUS "Library files found")
ELSE()
MESSAGE(FATAL_ERROR "Unable to find library files, aborting")
ENDIF()
if (IFCXML_SUPPORT)
find_package(LibXml2 REQUIRED)
add_definitions(-DWITH_IFCXML)
endif()
IF("$ENV{ICU_INCLUDE_DIR}" STREQUAL "")
MESSAGE(STATUS "No ICU include directory specified")
ElSE()
SET(ICU_INCLUDE_DIR CACHE FILEPATH "ICU header files")
ENDIF()
FIND_PACKAGE(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS})
MESSAGE(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}")
MESSAGE(STATUS "Boost libraries found in ${Boost_LIBRARY_DIRS}")
IF("$ENV{ICU_LIBRARY_DIR}" STREQUAL "")
MESSAGE(STATUS "No ICU library directory specified")
ElSE()
SET(ICU_LIBRARY_DIR CACHE FILEPATH "ICU library files")
ENDIF()
# Usage:
# set(SOME_LIRARIES foo bar)
# add_debug_variants(SOME_LIRARIES "${SOME_LIRARIES}" d)
# "foo bar" -> "optimized foo debug food optimized bar debug bard"
# or
# set(SOME_LIRARIES path/foo.lib)
# add_debug_variants(SOME_LIRARIES "${SOME_LIRARIES}" "d")
# "path/foo.lib" -> "optimized path/foo.lib debug path/food.lib"
# TODO Could be refined: take the library file extension as a parameter and
# make sure the lib variable ends with not just contains it.
function(add_debug_variants NAME LIBRARIES POSTFIX)
set(LIBRARIES_STR "${LIBRARIES}")
set(LIBRARIES "")
# the result, "optimized <lib> debug <lib>", needs to be a list instead of a string
foreach(lib ${LIBRARIES_STR})
list(APPEND LIBRARIES optimized)
if ("${lib}" MATCHES ".lib")
string(REPLACE ".lib" "" lib ${lib})
list(APPEND LIBRARIES ${lib}.lib)
else()
list(APPEND LIBRARIES ${lib})
endif()
FIND_LIBRARY(icu "icuuc" /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64 ${ICU_LIBRARY_DIR})
list(APPEND LIBRARIES debug)
if ("${lib}" MATCHES ".lib")
string(REPLACE ".lib" "" lib ${lib})
list(APPEND LIBRARIES ${lib}${POSTFIX}.lib)
else()
list(APPEND LIBRARIES ${lib}${POSTFIX})
endif()
endforeach()
set(${NAME} ${LIBRARIES} PARENT_SCOPE)
endfunction()
IF(icu)
MESSAGE(STATUS "ICU libraries found")
ADD_DEFINITIONS(-DHAVE_ICU)
ELSE()
MESSAGE(STATUS "Unable to find ICU library files, continuing")
ENDIF()
INCLUDE(CheckIncludeFileCXX)
MACRO(CHECK_ADD_OCE_OCC_DEF INCLUDE)
STRING(REPLACE . _ STR ${INCLUDE})
STRING(TOUPPER ${STR} STR)
CHECK_INCLUDE_FILE_CXX("${INCLUDE}" FOUND_${STR})
IF(FOUND_${STR})
ADD_DEFINITIONS(-DOCE_HAVE_${STR})
ADD_DEFINITIONS(-DHAVE_${STR})
ENDIF(FOUND_${STR})
ENDMACRO(CHECK_ADD_OCE_OCC_DEF)
CHECK_ADD_OCE_OCC_DEF(limits)
CHECK_ADD_OCE_OCC_DEF(climits)
CHECK_ADD_OCE_OCC_DEF(limits.h)
CHECK_ADD_OCE_OCC_DEF(fstream)
CHECK_ADD_OCE_OCC_DEF(fstream.h)
CHECK_ADD_OCE_OCC_DEF(iomanip)
CHECK_ADD_OCE_OCC_DEF(iomanip.h)
CHECK_ADD_OCE_OCC_DEF(iostream)
CHECK_ADD_OCE_OCC_DEF(iostream.h)
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE "Release")
ENDIF(NOT CMAKE_BUILD_TYPE)
if(BUILD_IFCGEOM)
IF(MSVC)
ADD_DEFINITIONS(-D_UNICODE)
ElSE(MSVC)
ADD_DEFINITIONS(-fPIC -Wno-non-virtual-dtor)
ENDIF(MSVC)
INCLUDE_DIRECTORIES(${OCC_INCLUDE_DIR} /usr/inc /usr/local/inc /usr/local/include/oce ${ICU_INCLUDE_DIR})
ADD_LIBRARY(IfcParse STATIC
../src/ifcparse/Ifc2x3.cpp
../src/ifcparse/IfcUtil.cpp
../src/ifcparse/IfcParse.cpp
../src/ifcparse/IfcCharacterDecoder.cpp
../src/ifcparse/IfcWrite.cpp
../src/ifcparse/IfcGuidHelper.cpp
)
ADD_LIBRARY(IfcGeom STATIC
../src/ifcgeom/IfcGeomCurves.cpp
../src/ifcgeom/IfcGeomFaces.cpp
../src/ifcgeom/IfcGeomFunctions.cpp
../src/ifcgeom/IfcGeomHelpers.cpp
../src/ifcgeom/IfcGeomObjects.cpp
../src/ifcgeom/IfcGeomShapes.cpp
../src/ifcgeom/IfcGeomWires.cpp
../src/ifcgeom/IfcRegister.cpp
)
IF(icu)
TARGET_LINK_LIBRARIES(IfcParse icuuc)
add_debug_variants(LIBXML2_LIBRARIES "${LIBXML2_LIBRARIES}" d)
ENDIF()
TARGET_LINK_LIBRARIES(IfcGeom IfcParse)
# Open CASCADE
IF("${OCC_INCLUDE_DIR}" STREQUAL "")
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx
[PATHS
/usr/include/occt
/usr/include/oce
/usr/include/opencascade
]
REQUIRED
)
IF(OCC_INCLUDE_DIR)
MESSAGE(STATUS "Found Open CASCADE include files in: ${OCC_INCLUDE_DIR}")
ELSE()
MESSAGE(FATAL_ERROR "Unable to find Open CASCADE include directory, specify OCC_INCLUDE_DIR manually.")
ENDIF()
ELSE()
SET(OCC_INCLUDE_DIR ${OCC_INCLUDE_DIR} CACHE FILEPATH "Open CASCADE header files")
MESSAGE(STATUS "Looking for Open CASCADE include files in: ${OCC_INCLUDE_DIR}")
ENDIF()
LINK_DIRECTORIES (${IfcOpenShell_BINARY_DIR} ${OCC_LIBRARY_DIR} /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64 ${ICU_LIBRARY_DIR})
SET(OPENCASCADE_LIBRARY_NAMES
TKernel TKMath TKBRep TKGeomBase TKGeomAlgo TKG3d TKG2d TKShHealing TKTopAlgo TKMesh TKPrim TKBool TKBO
TKFillet TKSTEP TKSTEPBase TKSTEPAttr TKXSBase TKSTEP209 TKIGES TKOffset TKHLR
)
ADD_EXECUTABLE(IfcObj ../src/ifcobj/IfcObj.cpp)
IF("${OCC_LIBRARY_DIR}" STREQUAL "")
find_library(OCC_LIBRARY TKernel
[PATHS
/usr/lib
]
REQUIRED
)
IF(OCC_LIBRARY)
GET_FILENAME_COMPONENT(OCC_LIBRARY_DIR ${OCC_LIBRARY} PATH)
MESSAGE(STATUS "Found Open CASCADE library files in: ${OCC_LIBRARY_DIR}")
ELSE()
MESSAGE(FATAL_ERROR "Unable find Open CASCADE library directory, specify OCC_LIBRARY_DIR manually.")
ENDIF()
ELSE()
SET(OCC_LIBRARY_DIR ${OCC_LIBRARY_DIR} CACHE FILEPATH "Open CASCADE library files")
MESSAGE(STATUS "Looking for Open CASCADE library files in: ${OCC_LIBRARY_DIR}")
ENDIF()
TARGET_LINK_LIBRARIES (IfcObj IfcParse IfcGeom TKernel TKMath TKBRep TKGeomBase TKGeomAlgo TKG3d TKG2d TKShHealing TKTopAlgo TKMesh TKPrim TKBool TKBO TKFillet)
FIND_LIBRARY(libTKernel NAMES TKernel TKerneld PATHS ${OCC_LIBRARY_DIR} NO_DEFAULT_PATH)
IF(libTKernel)
MESSAGE(STATUS "Required Open Cascade Library files found")
ELSE()
MESSAGE(FATAL_ERROR "Unable to find Open Cascade library files, aborting")
ENDIF()
# Build python wrapper using separate CMakeLists.txt
ADD_SUBDIRECTORY(../src/ifcwrap ifcwrap)
# Use the found libTKernel as a template for all other OCC libraries
# TODO Extract this into macro/function
foreach(lib ${OPENCASCADE_LIBRARY_NAMES})
# Make sure we'll handle the Windows/MSVC debug postfix convention too.
string(REPLACE TKerneld "${lib}" lib_path "${libTKernel}")
string(REPLACE TKernel "${lib}" lib_path "${lib_path}")
list(APPEND OPENCASCADE_LIBRARIES "${lib_path}")
endforeach()
# Build IfcParseExamples using separate CMakeLists.txt
ADD_SUBDIRECTORY(../src/examples examples)
if(MSVC)
add_definitions(-DHAVE_NO_DLL)
add_debug_variants(OPENCASCADE_LIBRARIES "${OPENCASCADE_LIBRARIES}" d)
endif()
if (WIN32)
# OCC might require linking to Winsock depending on the version and build configuration
list(APPEND OPENCASCADE_LIBRARIES ws2_32.lib)
endif()
ADD_SUBDIRECTORY(../src/qtviewer qtviewer)
# Make sure cross-referenced symbols between static OCC libraries get
# resolved. Also add thread and rt libraries.
get_filename_component(libTKernelExt ${libTKernel} EXT)
if("${libTKernelExt}" STREQUAL ".a")
set(OCCT_STATIC ON)
endif()
if(OCCT_STATIC)
find_package(Threads)
# OPENCASCADE_LIBRARIES repeated three times below in order to fix cyclic dependencies - use --start-group ... --end-group instead?
set(OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
if (NOT APPLE AND NOT WIN32)
set(OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES} "rt")
endif()
if (NOT WIN32)
set(OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES} "dl")
endif()
endif()
endif(BUILD_IFCGEOM)
IF(COLLADA_SUPPORT AND BUILD_CONVERT)
# Find OpenCOLLADA
IF("${OPENCOLLADA_INCLUDE_DIR}" STREQUAL "")
MESSAGE(STATUS "No OpenCOLLADA include directory specified")
SET(OPENCOLLADA_INCLUDE_DIR "/usr/include/opencollada" CACHE FILEPATH "OpenCOLLADA header files")
ELSE()
SET(OPENCOLLADA_INCLUDE_DIR "${OPENCOLLADA_INCLUDE_DIR}" CACHE FILEPATH "OpenCOLLADA header files")
ENDIF()
IF("${OPENCOLLADA_LIBRARY_DIR}" STREQUAL "")
MESSAGE(STATUS "No OpenCOLLADA library directory specified")
FIND_LIBRARY(OPENCOLLADA_FRAMEWORK_LIB NAMES OpenCOLLADAFramework
PATHS /usr/lib64/opencollada /usr/lib/opencollada /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib)
GET_FILENAME_COMPONENT(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_FRAMEWORK_LIB} PATH)
ENDIF()
FIND_LIBRARY(OpenCOLLADAFramework NAMES OpenCOLLADAFramework OpenCOLLADAFrameworkd PATHS ${OPENCOLLADA_LIBRARY_DIR} NO_DEFAULT_PATH)
if (OpenCOLLADAFramework)
message(STATUS "OpenCOLLADA library files found")
else()
message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA libraries. "
"Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed.")
endif()
SET(OPENCOLLADA_LIBRARY_DIR "${OPENCOLLADA_LIBRARY_DIR}" CACHE FILEPATH "OpenCOLLADA library files")
SET(OPENCOLLADA_INCLUDE_DIRS "${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils" "${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter")
FIND_FILE(COLLADASWStreamWriter_h "COLLADASWStreamWriter.h" ${OPENCOLLADA_INCLUDE_DIRS})
IF(COLLADASWStreamWriter_h)
MESSAGE(STATUS "OpenCOLLADA header files found")
ADD_DEFINITIONS(-DWITH_OPENCOLLADA)
SET(OPENCOLLADA_LIBRARY_NAMES
GeneratedSaxParser MathMLSolver OpenCOLLADABaseUtils OpenCOLLADAFramework OpenCOLLADASaxFrameworkLoader
OpenCOLLADAStreamWriter UTF buffer ftoa
)
# Use the found OpenCOLLADAFramework as a template for all other OpenCOLLADA libraries
foreach(lib ${OPENCOLLADA_LIBRARY_NAMES})
# Make sure we'll handle the Windows/MSVC debug postfix convention too.
string(REPLACE OpenCOLLADAFrameworkd "${lib}" lib_path "${OpenCOLLADAFramework}")
string(REPLACE OpenCOLLADAFramework "${lib}" lib_path "${lib_path}")
list(APPEND OPENCOLLADA_LIBRARIES "${lib_path}")
endforeach()
if("${PCRE_LIBRARY_DIR}" STREQUAL "")
if(WIN32)
find_library(pcre_library NAMES pcre pcred PATHS ${OPENCOLLADA_LIBRARY_DIR} NO_DEFAULT_PATH)
else()
find_library(pcre_library NAMES pcre PATHS ${OPENCOLLADA_LIBRARY_DIR})
endif()
GET_FILENAME_COMPONENT(PCRE_LIBRARY_DIR ${pcre_library} PATH)
else()
find_library(pcre_library NAMES pcre pcred PATHS ${PCRE_LIBRARY_DIR} NO_DEFAULT_PATH)
endif()
if (pcre_library)
SET(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_LIBRARY_DIR} ${PCRE_LIBRARY_DIR})
if (MSVC)
# Add release lib regardless whether release or debug found. Debug version will be appended below.
list(APPEND OPENCOLLADA_LIBRARIES "${PCRE_LIBRARY_DIR}/pcre.lib")
else()
list(APPEND OPENCOLLADA_LIBRARIES "${pcre_library}")
endif()
else()
message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find PCRE. "
"Disable COLLADA_SUPPORT or fix PCRE_LIBRARY_DIR path to proceed.")
endif()
IF(MSVC)
add_debug_variants(OPENCOLLADA_LIBRARIES "${OPENCOLLADA_LIBRARIES}" d)
ENDIF()
ELSE()
message(FATAL_ERROR "COLLADA_SUPPORT enabled, but unable to find OpenCOLLADA headers. "
"Disable COLLADA_SUPPORT or fix OpenCOLLADA paths to proceed.")
ENDIF()
ENDIF()
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE "Release")
ENDIF()
if(ENABLE_BUILD_OPTIMIZATIONS)
if(MSVC)
# NOTE: RelWithDebInfo and Release use O2 (= /Ox /Gl /Gy/ = Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy) by default,
# with the exception with RelWithDebInfo has /Ob1 instead. /Ob2 has been observed to improve the performance
# of IfcConvert significantly.
# TODO Setting of /GL and /LTCG don't seem to apply for static libraries (IfcGeom, IfcParse)
# C++
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Ob2 /GL")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
# Linker
# /OPT:REF enables also /OPT:ICF and disables INCREMENTAL
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG /OPT:REF")
# /OPT:NOICF is recommended when /DEBUG is used (http://msdn.microsoft.com/en-us/library/xe4t6fc1.aspx)
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:NOICF")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG /OPT:REF")
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:NOICF")
else()
# GCC-like: Release should use O3 but RelWithDebInfo 02 so enforce 03. Anything other useful that could be added here?
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} -O3")
endif()
endif()
IF(MSVC)
# Enable solution folders (free VS versions prior to 2012 don't support solution folders)
if (MSVC_VERSION GREATER 1600)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
endif()
IF(USE_VLD)
ADD_DEFINITIONS(-DUSE_VLD)
ENDIF()
# Enforce Unicode for CRT and Win32 API calls
ADD_DEFINITIONS(-D_UNICODE -DUNICODE)
# Disable warnings about unsafe C functions; we could use the safe C99 & C11 versions if we have no need for supporting old compilers.
ADD_DEFINITIONS(-D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS)
ADD_DEFINITIONS(-bigobj) # required for building the big ifcXXX.objs, https://msdn.microsoft.com/en-us/library/ms173499.aspx
# Bump up the warning level from the default 3 to 4.
ADD_DEFINITIONS(-W4)
IF(MSVC_VERSION GREATER 1800) # > 2013
# Disable overeager and false positives causing C4458 ("declaration of 'indentifier' hides class member"), at least for now.
ADD_DEFINITIONS(-wd4458)
ENDIF()
# Enforce standards-conformance on VS > 2015, older Boost versions fail to compile with this
if (MSVC_VERSION GREATER 1900 AND (Boost_MAJOR_VERSION GREATER 1 OR Boost_MINOR_VERSION GREATER 66))
add_definitions(-permissive-)
endif()
# Link against the static VC runtime
# TODO Make this configurable
IF("$ENV{CONDA_BUILD}" STREQUAL "")
FOREACH(flag CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
IF(${flag} MATCHES "/MD")
STRING(REGEX REPLACE "/MD" "/MT" ${flag} "${${flag}}")
ENDIF()
IF(${flag} MATCHES "/MDd")
STRING(REGEX REPLACE "/MDd" "/MTd" ${flag} "${${flag}}")
ENDIF()
ENDFOREACH()
ENDIF()
ElSE()
add_definitions(-Wall -Wextra)
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_definitions(-Wno-tautological-constant-out-of-range-compare)
else()
add_definitions(-Wno-maybe-uninitialized)
endif()
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 9.0))
# OpenCascade spews a lot of deprecated-copy warnings
add_definitions(-Wno-deprecated-copy)
endif()
# -fPIC is not relevant on Windows and creates pointless warnings
if (UNIX)
add_definitions(-fPIC)
endif()
ENDIF()
if (IFCCONVERT_DOUBLE_PRECISION)
SET(CONVERT_PRECISION "-DIFCCONVERT_DOUBLE_PRECISION")
endif()
INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS}
${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR}
)
function(files_for_ifc_version IFC_VERSION RESULT_NAME)
set(IFC_PARSE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcparse)
set(${RESULT_NAME}
${IFC_PARSE_DIR}/Ifc${IFC_VERSION}.h
${IFC_PARSE_DIR}/Ifc${IFC_VERSION}enum.h
${IFC_PARSE_DIR}/Ifc${IFC_VERSION}.cpp
PARENT_SCOPE
)
endfunction()
set(SCHEMA_VERSIONS "2x3" "4" "4x1" "4x2" "4x3_rc1" "4x3_rc2")
foreach(s ${SCHEMA_VERSIONS})
add_definitions(-DHAS_SCHEMA_${s})
endforeach()
if(COMPILE_SCHEMA)
# @todo, this appears to be untested at the moment
find_package(PythonInterp)
IF(NOT PYTHONINTERP_FOUND)
MESSAGE(FATAL_ERROR "A Python interpreter is necessary when COMPILE_SCHEMA is enabled. Disable COMPILE_SCHEMA or fix Python paths to proceed.")
ENDIF()
set(IFC_RELEASE_NOT_USED ${SCHEMA_VERSIONS})
# Install pyparsing if necessary
execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip freeze OUTPUT_VARIABLE PYTHON_PACKAGE_LIST)
if ("${PYTHON_PACKAGE_LIST}" STREQUAL "")
execute_process(COMMAND pip freeze OUTPUT_VARIABLE PYTHON_PACKAGE_LIST)
if ("${PYTHON_PACKAGE_LIST}" STREQUAL "")
message(WARNING "Failed to find pip. Pip is required to automatically install pyparsing")
endif()
endif()
string(FIND "${PYTHON_PACKAGE_LIST}" pyparsing PYPARSING_FOUND)
if ("${PYPARSING_FOUND}" STREQUAL "-1")
message(STATUS "Installing pyparsing")
execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip "install" --user pyparsing RESULT_VARIABLE SUCCESS)
if (NOT "${SUCCESS}" STREQUAL "0")
execute_process(COMMAND pip "install" --user pyparsing RESULT_VARIABLE SUCCESS)
if (NOT "${SUCCESS}" STREQUAL "0")
message(WARNING "Failed to automatically install pyparsing. Please install manually")
endif()
endif()
else()
message(STATUS "Python interpreter with pyparsing found")
endif()
# Bootstrap the parser
message(STATUS "Compiling schema, this will take a while...")
execute_process(COMMAND ${PYTHON_EXECUTABLE} bootstrap.py express.bnf
WORKING_DIRECTORY ../src/ifcexpressparser
OUTPUT_FILE express_parser.py
RESULT_VARIABLE SUCCESS)
if (NOT "${SUCCESS}" STREQUAL "0")
MESSAGE(FATAL_ERROR "Failed to bootstrap parser. Make sure pyparsing is installed")
endif()
# Generate code
execute_process(COMMAND ${PYTHON_EXECUTABLE} ../ifcexpressparser/express_parser.py ../../${COMPILE_SCHEMA}
WORKING_DIRECTORY ../src/ifcparse
OUTPUT_VARIABLE COMPILED_SCHEMA_NAME)
# Prevent the schema that had just been compiled from being excluded
foreach(s ${SCHEMA_VERSIONS})
if("${COMPILED_SCHEMA_NAME}" STREQUAL "${s}")
list(REMOVE_ITEM IFC_RELEASE_NOT_USED "${s}")
endif()
endforeach()
endif()
# Boost >= 1.58 requires BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE to build on some Linux distros.
if(NOT Boost_VERSION LESS 105800)
add_definitions(-DBOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE)
endif()
set(IFCOPENSHELL_LIBRARIES IfcParse)
if (BUILD_IFCGEOM)
foreach(s ${SCHEMA_VERSIONS})
set(IFCGEOM_SCHEMA_LIBRARIES ${IFCGEOM_SCHEMA_LIBRARIES} IfcGeom_ifc${s})
endforeach()
set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} IfcGeom ${IFCGEOM_SCHEMA_LIBRARIES} IfcGeom ${IFCGEOM_SCHEMA_LIBRARIES})
endif()
if (BUILD_CONVERT)
foreach(s ${SCHEMA_VERSIONS})
set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} Serializers_ifc${s})
endforeach()
set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} Serializers ${SERIALIZER_SCHEMA_LIBRARIES})
endif()
# IfcParse
file(GLOB IFCPARSE_H_FILES_ALL ../src/ifcparse/*.h)
file(GLOB IFCPARSE_CPP_FILES_ALL ../src/ifcparse/*.cpp)
foreach(s ${IFCPARSE_H_FILES_ALL})
get_filename_component(p "${s}" NAME)
if (NOT "${p}" MATCHES "[0-9]")
list(APPEND IFCPARSE_H_FILES "${s}")
endif()
endforeach()
foreach(s ${IFCPARSE_CPP_FILES_ALL})
get_filename_component(p "${s}" NAME)
if (NOT "${p}" MATCHES "[0-9]")
list(APPEND IFCPARSE_CPP_FILES "${s}")
endif()
endforeach()
foreach(s ${SCHEMA_VERSIONS})
list(APPEND IFCPARSE_H_FILES
../src/ifcparse/Ifc${s}.h
../src/ifcparse/Ifc${s}-definitions.h
)
list(APPEND IFCPARSE_CPP_FILES
../src/ifcparse/Ifc${s}.cpp
../src/ifcparse/Ifc${s}-schema.cpp
)
endforeach()
set(IFCPARSE_FILES ${IFCPARSE_CPP_FILES} ${IFCPARSE_H_FILES})
add_library(IfcParse ${IFCPARSE_FILES})
set_target_properties(IfcParse PROPERTIES COMPILE_FLAGS -DIFC_PARSE_EXPORTS VERSION "0.6.0" SOVERSION "0.6")
TARGET_LINK_LIBRARIES(IfcParse ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} ${LIBXML2_LIBRARIES})
if (BUILD_IFCGEOM)
# IfcGeom
file(GLOB IFCGEOM_H_FILES ../src/ifcgeom/*.h)
file(GLOB IFCGEOM_CPP_FILES ../src/ifcgeom/*.cpp)
set(IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES})
foreach(s ${SCHEMA_VERSIONS})
add_library(IfcGeom_ifc${s} STATIC ${IFCGEOM_FILES})
set_target_properties(IfcGeom_ifc${s} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${s}")
TARGET_LINK_LIBRARIES(IfcGeom_ifc${s} IfcParse ${OPENCASCADE_LIBRARIES})
endforeach()
# IfcGeom (schema agnostic)
file(GLOB SCHEMA_AGNOSTIC_H_FILES ../src/ifcgeom_schema_agnostic/*.h)
file(GLOB SCHEMA_AGNOSTIC_CPP_FILES ../src/ifcgeom_schema_agnostic/*.cpp)
set(SCHEMA_AGNOSTIC_FILES ${SCHEMA_AGNOSTIC_H_FILES} ${SCHEMA_AGNOSTIC_CPP_FILES})
add_library(IfcGeom ${SCHEMA_AGNOSTIC_FILES})
set_target_properties(IfcGeom PROPERTIES COMPILE_FLAGS -DIFC_GEOM_EXPORTS VERSION "0.6.0" SOVERSION "0.6")
if (UNIX)
find_package(Threads)
endif()
TARGET_LINK_LIBRARIES(IfcGeom ${IFCGEOM_SCHEMA_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
endif(BUILD_IFCGEOM)
if (BUILD_CONVERT)
# Serializers
file(GLOB SERIALIZERS_H_FILES ../src/serializers/*.h)
file(GLOB SERIALIZERS_CPP_FILES ../src/serializers/*.cpp)
set(SERIALIZERS_FILES ${SERIALIZERS_H_FILES} ${SERIALIZERS_CPP_FILES})
file(GLOB SERIALIZERS_S_H_FILES ../src/serializers/schema_dependent/*.h)
file(GLOB SERIALIZERS_S_CPP_FILES ../src/serializers/schema_dependent/*.cpp)
set(SERIALIZERS_S_FILES ${SERIALIZERS_S_H_FILES} ${SERIALIZERS_S_CPP_FILES})
foreach(s ${SCHEMA_VERSIONS})
add_library(Serializers_ifc${s} STATIC ${SERIALIZERS_S_FILES})
set_target_properties(Serializers_ifc${s} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${s} ${CONVERT_PRECISION}")
TARGET_LINK_LIBRARIES(Serializers_ifc${s} IfcGeom ${OPENCASCADE_LIBRARIES})
endforeach()
add_library(Serializers ${SERIALIZERS_FILES})
set_target_properties(Serializers PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS ${CONVERT_PRECISION}" VERSION "0.6.0" SOVERSION "0.6")
TARGET_LINK_LIBRARIES(Serializers ${SERIALIZER_SCHEMA_LIBRARIES})
# IfcConvert
file(GLOB IFCCONVERT_CPP_FILES ../src/ifcconvert/*.cpp)
file(GLOB IFCCONVERT_H_FILES ../src/ifcconvert/*.h)
set(IFCCONVERT_FILES ${IFCCONVERT_CPP_FILES} ${IFCCONVERT_H_FILES})
ADD_EXECUTABLE(IfcConvert ${IFCCONVERT_FILES})
set_target_properties(IfcConvert PROPERTIES COMPILE_FLAGS "${CONVERT_PRECISION}")
TARGET_LINK_LIBRARIES(IfcConvert ${IFCOPENSHELL_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${OPENCOLLADA_LIBRARIES})
if ((NOT WIN32) AND BUILD_SHARED_LIBS)
# Only set RPATHs when building shared libraries (i.e. IfcParse and
# IfcGeom are dynamically linked). Not necessarily a perfect solution
# but probably a good indication of whether RPATHs are necessary.
SET_INSTALL_RPATHS(IfcConvert "${IFCOPENSHELL_LIBRARY_DIR};${OCC_LIBRARY_DIR};${Boost_LIBRARY_DIRS};${OPENCOLLADA_LIBRARY_DIR}")
endif()
INSTALL(TARGETS IfcConvert
ARCHIVE DESTINATION ${LIBDIR}
LIBRARY DESTINATION ${LIBDIR}
RUNTIME DESTINATION ${BINDIR}
)
endif(BUILD_CONVERT)
# IfcGeomServer
if(BUILD_GEOMSERVER)
file(GLOB CPP_FILES ../src/ifcgeomserver/*.cpp)
file(GLOB H_FILES ../src/ifcgeomserver/*.h)
set(SOURCE_FILES ${CPP_FILES} ${H_FILES})
ADD_EXECUTABLE(IfcGeomServer ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(IfcGeomServer ${IFCOPENSHELL_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES})
if ((NOT WIN32) AND BUILD_SHARED_LIBS)
SET_INSTALL_RPATHS(IfcGeomServer "${IFCOPENSHELL_LIBRARY_DIR};${OCC_LIBRARY_DIR};${Boost_LIBRARY_DIRS}")
endif()
INSTALL(TARGETS IfcGeomServer
ARCHIVE DESTINATION ${LIBDIR}
LIBRARY DESTINATION ${LIBDIR}
RUNTIME DESTINATION ${BINDIR}
)
endif()
# Documentation
IF(BUILD_DOCUMENTATION)
set(CMAKE_MODULE_PATH "../docs/cmake")
ADD_SUBDIRECTORY(../docs docs)
ENDIF()
IF(BUILD_IFCPYTHON)
ADD_SUBDIRECTORY(../src/ifcwrap ifcwrap)
ENDIF()
IF(BUILD_EXAMPLES)
ADD_SUBDIRECTORY(../src/examples examples)
ENDIF()
IF(BUILD_IFCMAX)
ADD_SUBDIRECTORY(../src/ifcmax ifcmax)
ENDIF()
# CMake installation targets
SET(include_files_geom
../src/ifcgeom/IfcGeom.h
../src/ifcgeom/IfcGeomObjects.h
../src/ifcgeom/IfcRegister.h
../src/ifcgeom/IfcRegisterConvertCurve.h
../src/ifcgeom/IfcRegisterConvertFace.h
../src/ifcgeom/IfcRegisterConvertShape.h
../src/ifcgeom/IfcRegisterConvertShapes.h
../src/ifcgeom/IfcRegisterConvertWire.h
../src/ifcgeom/IfcRegisterCreateCache.h
../src/ifcgeom/IfcRegisterDef.h
../src/ifcgeom/IfcRegisterGeomHeader.h
../src/ifcgeom/IfcRegisterIsShapeCollection.h
../src/ifcgeom/IfcRegisterPurgeCache.h
../src/ifcgeom/IfcRegisterUndef.h
../src/ifcgeom/IfcShapeList.h
INSTALL(FILES ${IFCPARSE_H_FILES}
DESTINATION ${INCLUDEDIR}/ifcparse
)
SET(include_files_parse
../src/ifcparse/Ifc2x3.h
../src/ifcparse/Ifc2x3enum.h
../src/ifcparse/IfcCharacterDecoder.h
../src/ifcparse/IfcException.h
../src/ifcparse/IfcFile.h
../src/ifcparse/IfcParse.h
../src/ifcparse/IfcUtil.h
../src/ifcparse/SharedPointer.h
../src/ifcparse/IfcWrite.h
../src/ifcparse/IfcWritableEntity.h
INSTALL(TARGETS IfcParse
ARCHIVE DESTINATION ${LIBDIR}
LIBRARY DESTINATION ${LIBDIR}
RUNTIME DESTINATION ${BINDIR}
)
INSTALL(FILES ${include_files_geom} DESTINATION include/ifcgeom)
INSTALL(FILES ${include_files_parse} DESTINATION include/ifcparse)
INSTALL(TARGETS IfcObj DESTINATION bin)
INSTALL(TARGETS IfcParse IfcGeom DESTINATION lib)
if(BUILD_IFCGEOM)
INSTALL(FILES ${IFCGEOM_H_FILES}
DESTINATION ${INCLUDEDIR}/ifcgeom
)
INSTALL(FILES ${SCHEMA_AGNOSTIC_H_FILES}
DESTINATION ${INCLUDEDIR}/ifcgeom_schema_agnostic
)
INSTALL(TARGETS ${IFCGEOM_SCHEMA_LIBRARIES} IfcGeom
ARCHIVE DESTINATION ${LIBDIR}
LIBRARY DESTINATION ${LIBDIR}
RUNTIME DESTINATION ${BINDIR}
)
endif()
if(BUILD_CONVERT)
INSTALL(TARGETS Serializers ${SERIALIZER_SCHEMA_LIBRARIES}
ARCHIVE DESTINATION ${LIBDIR}
LIBRARY DESTINATION ${LIBDIR}
RUNTIME DESTINATION ${BINDIR}
)
INSTALL(FILES ${SERIALIZERS_FILES}
DESTINATION ${INCLUDEDIR}/serializers/
)
INSTALL(FILES ${SERIALIZERS_S_FILES}
DESTINATION ${INCLUDEDIR}/serializers/schema_dependent
)
endif()
list(APPEND CPACK_SOURCE_IGNORE_FILES
.git
.gitignore
)
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${EXTRA_VERSION}")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}${EXTRA_VERSION}")
SET(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${EXTRA_VERSION}-${CMAKE_SYSTEM_NAME}")
set(CPACK_PACKAGE_DIRECTORY "${PROJECT_BINARY_DIR}/assets")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "IfcOpenShell")
set(CPACK_PACKAGE_DESCRIPTION "IfcOpenShell.")
set(CPACK_PACKAGE_VENDOR "Cemosis")
set(CPACK_PACKAGE_CONTACT "Christophe Prud'homme <christophe.prudhomme@cemosis.fr>")
set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
set(CPACK_GENERATOR "TGZ;DEB")
set(CPACK_SOURCE_GENERATOR "TGZ")
FOREACH(COMPONENT IN ITEMS ${BOOST_COMPONENTS})
string(REPLACE "_" "-" COMP ${COMPONENT})
set(BOOST_DEPS "${BOOST_DEPS}, libboost-${COMP}1.67.0")
endforeach(COMPONENT)
set(CPACK_DEBIAN_PACKAGE_NAME "${PROJECT_NAME}")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_PACKAGE_CONTACT}")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "python3, libxml2, liboce-foundation11, liboce-modeling11, liboce-ocaf11, liboce-visualization11, liboce-ocaf-lite11, libpython3.8 ${BOOST_DEPS}")
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION_SUMMARY "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}")
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
set(CPACK_DEBIAN_PACKAGE_SECTION "science")
set(CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}${EXTRA_VERSION}")
set(CPACK_DEBIAN_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}")
#set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/cmake/debian/postinst")
include(CPack)
+29
View File
@@ -0,0 +1,29 @@
mkdir build && cd build
REM Remove dot from PY_VER for use in library name
REM From https://github.com/tpaviot/pythonocc-core/blob/master/ci/conda/bld.bat
set MY_PY_VER=%PY_VER:.=%
cmake -G "NMake Makefiles" ^
-DCMAKE_INSTALL_PREFIX="%LIBRARY_PREFIX%" ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_PREFIX_PATH="%LIBRARY_PREFIX%" ^
-DCMAKE_SYSTEM_PREFIX_PATH="%LIBRARY_PREFIX%" ^
-DPYTHON_EXECUTABLE="%PYTHON%" ^
-DPYTHON_INCLUDE_DIR="%PREFIX%"/include ^
-DPYTHON_LIBRARY="%PREFIX%"/libs/python%MY_PY_VER%.lib ^
-DBOOST_LIBRARYDIR="%LIBRARY_PREFIX%\lib" ^
-DBOOST_INCLUDEDIR="%LIBRARY_PREFIX%\include" ^
-DOCC_INCLUDE_DIR="%LIBRARY_PREFIX%\include\oce" ^
-DOCC_LIBRARY_DIR="%LIBRARY_PREFIX%\lib" ^
-DCOLLADA_SUPPORT=Off ^
-DBUILD_EXAMPLES=Off ^
-DBUILD_GEOMSERVER=Off ^
-DBUILD_CONVERT=Off ^
../cmake
if errorlevel 1 exit 1
cmake --build . --target INSTALL --config Release
if errorlevel 1 exit 1
+34
View File
@@ -0,0 +1,34 @@
# From https://github.com/tpaviot/pythonocc-core/blob/master/ci/conda/build.sh
if [ "$PY3K" == "1" ]; then
MY_PY_VER="${PY_VER}m"
else
MY_PY_VER="${PY_VER}"
fi
if [ `uname` == Darwin ]; then
PY_LIB="libpython${MY_PY_VER}.dylib"
export CFLAGS="$CFLAGS -Wl,-flat_namespace,-undefined,suppress"
export CXXFLAGS="$CXXFLAGS -Wl,-flat_namespace,-undefined,suppress"
export LDFLAGS="$LDFLAGS -Wl,-flat_namespace,-undefined,suppress"
else
PY_LIB="libpython${MY_PY_VER}.so"
fi
mkdir build && cd build
cmake \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=$PREFIX \
-DCMAKE_SYSTEM_PREFIX_PATH=$PREFIX \
-DOCC_INCLUDE_DIR=$PREFIX/include/oce \
-DOCC_LIBRARY_DIR=$PREFIX/lib \
-DPYTHON_EXECUTABLE:FILEPATH=$PYTHON \
-DPYTHON_INCLUDE_DIR:PATH=$PREFIX/include/python$MY_PY_VER \
-DPYTHON_LIBRARY:FILEPATH=$PREFIX/lib/${PY_LIB} \
-DCOLLADA_SUPPORT=Off \
../cmake
make -j$CPU_COUNT _ifcopenshell_wrapper
cd ifcwrap
make install/local
+36
View File
@@ -0,0 +1,36 @@
package:
name: ifcopenshell
version: "0.6.0a1"
source:
git_rev: "v0.6.0a1"
git_url: https://github.com/IfcOpenShell/IfcOpenShell
build:
number: 0
features:
- vc9 # [win and py27]
- vc10 # [win and py34]
- vc14 # [win and py35]
- vc14 # [win and py36]
requirements:
build:
- gcc # [osx]
- make
- python
- oce ==0.18.3
- cmake
- swig >=3.0.9
- libboost
- icu
run:
- libgcc # [osx]
- python
- oce ==0.18.3
- libboost
- icu
about:
home: http://ifcopenshell.org
license: LGPL
+40
View File
@@ -0,0 +1,40 @@
#Look for an executable called sphinx-build
find_program(SPHINX_EXECUTABLE
NAMES sphinx-build
DOC "Path to sphinx-build executable")
include(FindPackageHandleStandardArgs)
#Handle standard arguments to find_package like REQUIRED and QUIET
find_package_handle_standard_args(Sphinx
"Failed to find sphinx-build executable"
SPHINX_EXECUTABLE)
find_package(Doxygen REQUIRED)
#find_package(Sphinx REQUIRED)
set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR})
set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/docs/sphinx)
MESSAGE(STATUS "SPHINX BUILD ${CMAKE_CURRENT_BINARY_DIR}")
file(MAKE_DIRECTORY ./output/doxygen)
if (DOXYGEN_FOUND)
add_custom_target(Sphinx ALL
COMMAND
${SPHINX_EXECUTABLE} -v -T -b html
${SPHINX_SOURCE} ${CMAKE_CURRENT_SOURCE_DIR}/output
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output
COMMENT "Generating documentation with Sphinx")
# add_custom_target(ifcopenshell_python_docs ALL
# COMMAND make html
# WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcblenderexport/docs
# OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcblenderexport/docs
# COMMENT "Generating documentation with Sphinx")
else (DOXYGEN_FOUND)
message("Doxygen need to be installed to generate the doxygen documentation")
endif (DOXYGEN_FOUND)
+2531
View File
File diff suppressed because it is too large Load Diff
+11
View File
@@ -0,0 +1,11 @@
#Look for an executable called sphinx-build
find_program(SPHINX_EXECUTABLE
NAMES sphinx-build
DOC "Path to sphinx-build executable")
include(FindPackageHandleStandardArgs)
#Handle standard arguments to find_package like REQUIRED and QUIET
find_package_handle_standard_args(Sphinx
"Failed to find sphinx-build executable"
SPHINX_EXECUTABLE)
+11
View File
@@ -0,0 +1,11 @@
#Look for an executable called sphinx-build
find_program(SPHINX_EXECUTABLE
NAMES sphinx-build
DOC "Path to sphinx-build executable")
include(FindPackageHandleStandardArgs)
#Handle standard arguments to find_package like REQUIRED and QUIET
find_package_handle_standard_args(Sphinx
"Failed to find sphinx-build executable"
SPHINX_EXECUTABLE)
+37
View File
@@ -0,0 +1,37 @@
import textwrap
# The `extensions` list should already be in here from `sphinx-quickstart`
extensions = [
# there may be others here already, e.g. 'sphinx.ext.mathjax'
'breathe',
'exhale',
'sphinx.ext.intersphinx'
]
project = 'IfcOpenShell'
copyright = '2020, IfcOpenShell'
author = ''
# Setup the breathe extension
breathe_projects = {
"My Project": "./output/doxygen/xml"
}
breathe_default_project = "My Project"
# Setup the exhale extension
exhale_args = {
# These arguments are required
"containmentFolder": "./rst_files",
"rootFileName": "library_root.rst",
"rootFileTitle": "IfcOpenShell C++",
"doxygenStripFromPath": "..",
# Suggested optional arguments
"createTreeView": True,
# TIP: if using the sphinx-bootstrap-theme, you need
# "treeViewIsBootstrap": True,
"exhaleExecutesDoxygen": True,
# "exhaleDoxygenStdin": "INPUT = ../src/serializers/ ../src/ifcgeom",
"exhaleUseDoxyfile": True
}
cpp_id_attributes = ['IFC_PARSE_API', 'IFC_GEOM_API']
+10
View File
@@ -0,0 +1,10 @@
IfcOpenShell
============
.. toctree::
:maxdepth: 3
rst_files/library_root
* `ifcopenshell-python documentation <python/html/index.html>`_
+39
View File
@@ -0,0 +1,39 @@
# This program requires doxygen, sphinx, breathe and exhale.
import os
import sys
import shutil
import subprocess
import multiprocessing
# some extra check to see if we can find sphinx in pypy bin dir
sphinx_build = os.path.join(os.path.dirname(sys.executable), 'sphinx-build')
if not os.path.exists(sphinx_build):
sphinx_build = "sphinx-build"
# else:
# os.environ['PATH'] = os.pathsep + os.path.dirname(sys.executable)
# not used, -j caused issues in my sphinx install
j = str(multiprocessing.cpu_count())
if not os.path.isdir("./output/doxygen/xml"):
os.makedirs("output/doxygen/xml")
subprocess.check_call([sphinx_build, "-b", "html", ".", "output"])
if sys.platform == "linux" or sys.platform == "linux2":
if os.path.isdir("output/python"):
shutil.rmtree("output/python")
if not os.path.exists(os.path.join("../src/ifcblenderexport/docs", "contents.rst")):
subprocess.check_call(["ln", "index.rst", "contents.rst"], cwd="../src/ifcblenderexport/docs")
subprocess.check_call(["sed", "-i", "s/html_theme/# html_theme/g", "conf.py"], cwd="../src/ifcblenderexport/docs")
subprocess.check_call(["make", "html"], cwd="../src/ifcblenderexport/docs")
subprocess.check_call(["git", "checkout", "conf.py"], cwd="../src/ifcblenderexport/docs")
shutil.move("../src/ifcblenderexport/docs/_build", "./output")
os.rename("./output/_build", "./output/python")
elif sys.platform == "win32" or sys.platform == "win64":
subprocess.check_call(["make.bat", "html"])
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

+240
View File
@@ -0,0 +1,240 @@
APPLY_DEFAULT_MATERIALS
-----------------------
Given the command invocation:
Duplex_A_20110907_optimized.ifc d.dae -yv --include attribute GlobalId 3bXiCStxP6Fgxdej$yc50U
You will find log messages along the lines of
[Warning] {3bXiCStxP6Fgxdej$yc50U} No material and surface styles for:
#333=IfcCovering('3bXiCStxP6Fgxdej$yc50U',#1,'Compound Ceiling:Gypsum Board:187483',$,'Compound Ceiling:Gypsum Board',#17840,#17052,'187483',.CEILING.)
This means that there is no IfcStyledItem associated to the representation items and that the element does not have an IfcMaterial association with IfcMaterialRepresentation from which we can derive a style (colour) for the element.
The interactive session below shows how with this setting enabled you will get a default generated material from the IFC element entity type and material indices of 0 pointing to that. With this setting disabled the material index would be -1 to indicate a missing style. Note that there is one material index for every triangle in the list of `shp.geometry.faces`.
>>> import ifcopenshell, ifcopenshell.geom
>>> f = ifcopenshell.open("Duplex_A_20110907_optimized.ifc")
>>> s = ifcopenshell.geom.settings()
>>> c = f["3bXiCStxP6Fgxdej$yc50U"]
>>>
>>> shp = ifcopenshell.geom.create_shape(s, c)
>>> shp.geometry.material_ids
(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)
>>> [(m.name, m.diffuse) for m in shp.geometry.materials]
[]
>>>
>>> s.set(s.APPLY_DEFAULT_MATERIALS, True)
>>> shp = ifcopenshell.geom.create_shape(s, c)
>>> shp.geometry.material_ids
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> [(m.name, m.diffuse) for m in shp.geometry.materials]
[('IfcCovering', (0.7, 0.7, 0.7))]
This is enabled by default for the IfcConvert serializers as they will not gracefully handle -1 material indices and allows users to quickly assign colours based on entity types in their modelling applications.
APPLY_LAYERSETS
---------------
This setting is available in IfcConvert as `--enable-layerset-slicing`.
For IfcWall and IfcSlab elements, takes the associated IfcMaterialLayerSet and builds a set of surfaces to segment the building element geometry.
Note that enabling this settings is computationally intensive as it involves 3D Boolean operations.
Duplex_A_20110907_optimized.ifc d1.dae -yv --include attribute GlobalId 2O2Fr$t4X7Zf8NOew3FNr2
![Image of d1.dae](images/settings-1.png)
Duplex_A_20110907_optimized.ifc d2.dae --enable-layerset-slicing -yv --include attribute GlobalId 2O2Fr$t4X7Zf8NOew3FNr2
![Image of d2.dae](images/settings-2.png)
BUILDING_LOCAL_PLACEMENT
------------------------
This setting is available in IfcConvert using `--building-local-placement`.
In the typical IfcSite > IfcBuilding > IfcBuildingStorey > ... hierarchy of elements, don't incorporate the ObjectPlacement of the IfcBuilding and above in the placement of elements in the output. This is useful when there is a large offset in this placement that reduces precision in further processing.
CONVERT_BACK_UNITS
------------------
This setting is available in IfcConvert using `--convert-back-units`.
Internally IfcOpenShell uses meters as the global length unit to do calculations. This setting restores the coordinate positions after conversion by multiplying the factor of the IfcUnit with UnitType=LENGTHUNIT into the output geometry coordinate values.
DISABLE_OPENING_SUBTRACTIONS
----------------------------
This setting is available in IfcConvert using `--disable-opening-subtraction`.
As in most viewer applications, IfcOpeningElement geometry is subtracted from their host elements. This setting disables this behavior.
Duplex_A_20110907_optimized.ifc d1.dae -yv --include attribute GlobalId 2O2Fr$t4X7Zf8NOew3FNr2
![Image of d1.dae](images/settings-1.png)
Duplex_A_20110907_optimized.ifc d3.dae --disable-opening-subtraction -yv --include attribute GlobalId 2O2Fr$t4X7Zf8NOew3FNr2
![Image of d3.dae](images/settings-3.png)
Note that disabling this settings will reduce processing time and improve robustness as it involves 3D Boolean operations.
DISABLE_TRIANGULATION
---------------------
To be used in conjunction with `USE_BREP_DATA`. Do not apply the triangulation and - when `USE_BREP_DATA` is set - return a OpenCASCADE serialized TopoDS_Shape from `create_shape()` and `iterator`.
>>> import ifcopenshell, ifcopenshell.geom
>>> s = ifcopenshell.geom.settings()
>>> s.set(s.DISABLE_TRIANGULATION, True)
>>> s.set(s.USE_BREP_DATA, True)
>>> f = ifcopenshell.open("Duplex_A_20110907_optimized.ifc")
>>> c = f["3bXiCStxP6Fgxdej$yc50U"]
>>> shp = ifcopenshell.geom.create_shape(s, c)
>>> print(shp.geometry.brep_data)
CASCADE Topology V1, (c) Matra-Datavision
Locations 0
Curve2ds 0
Curves 12
1 4.6750000000000034 -8.0749999999999904 2.657 -2.0455514041918775e-15 -1 0
1 4.6750000000000034 -8.0749999999999904 2.657 1 -3.435893306383461e-15 0
1 6.2260000000000044 -8.0749999999999957 2.657 -2.0455514041918724e-15 -1 0
1 6.226 -10.246000000000031 2.657 -1 6.8717866127669219e-15 0
...
EDGE_ARROWS
-----------
When `INCLUDE_CURVES` is true and geometric elements include curves (such as the wall axis), add arrow heads to the edges to indicate direction of the curve.
Duplex_A_20110907_optimized.ifc d4.dae --model --plan --edge-arrows -yv --include attribute GlobalId 2O2Fr$t4X7Zf8NOew3FNr2
![Image of d4.dae](images/settings-4.png)
EXCLUDE_SOLIDS_AND_SURFACES
---------------------------
Exclude faces, shells and solids from geometrical output. Implied when using `--plan` without `--model` in IfcConvert.
FASTER_BOOLEANS
---------------
NOTE: Only applicable when using OCCT 6.9 and earlier.
This setting is available in IfcConvert using `--merge-boolean-operands`.
Fuse the collection of all boolean operands into a single union before applying the boolean subtraction, as opposed to doing individual subtractions. This likely improves performance. From OCCT 7.0 onwards the boolean operations with multiple arguments is used.
GENERATE_UVS
------------
This setting is available in IfcConvert using `--generate-uvs`.
Applies a box projection on the generated geometry for the element to obtain UV coordinates. This is purely generated, it does not involve texture coordinates stored in the IFC model.
Duplex_A_20110907_optimized.ifc d5.dae --generate-uvs -yv --include attribute GlobalId 2O2Fr$t4X7Zf8NOew3FNr2
![Image of d5.dae with a UV grid applied in Blender](images/settings-5.png)
INCLUDE_CURVES
--------------
This setting is available in IfcConvert using `--plan`.
Include edge and wire geometries in the geometric output.
LAYERSET_FIRST
--------------
This setting is available in IfcConvert using `--layerset-first`.
When not using APPLY_LAYERSETS, take the first material layer from the set to use as the material for the overall element.
NO_NORMALS
----------
This setting is available in IfcConvert using `--no-normals`.
Do not emit normals on geometric output
SEARCH_FLOOR
------------
Note: Only applicable to Collada .DAE output when used from IfcConvert.
This setting is available in IfcConvert using `--use-element-hierarchy`.
Include the spatial hierarchy in the elements.
SEW_SHELLS
----------
This setting is available in IfcConvert using `--orient-shells`.
Re-orient or sew connected face sets to have a consistent outwards orientation.
SITE_LOCAL_PLACEMENT
--------------------
This setting is available in IfcConvert using `--site-local-placement`.
See `BUILDING_LOCAL_PLACEMENT`, but exclude also the ObjectPlacement of the IfcSite.
USE_BREP_DATA
-------------
See `DISABLE_TRIANGULATION`.
USE_PYTHON_OPENCASCADE
----------------------
Note: Only available when an import of `OCC.Core.BRepTools` or `OCC.BRepTools` succeeds.
This implies `USE_WORLD_COORDS` `USE_BREP_DATA` and `DISABLE_TRIANGULATION`. The serialized TopoDS_Shape of `USE_BREP_DATA` is deserialized by Python OpenCASCADE.
USE_WORLD_COORDS
----------------
Apply the ObjectPlacement of the building elements to the geometric output. This is implied when using the Wavefront .OBJ output in IfcConvert. Note that this also eliminates the possibility for geometric elements to point to the same interpreted geometry result.
VALIDATE_QUANTITIES
-------------------
This setting is available in IfcConvert using `--validate`.
Running IfcConvert with `--validate` will set a non-zero exit code when ever a log message with severity equal or greater than ERROR has been emitted.
Currently for internal use only. For every building element geometry converted, looks for an associated quantity set where the OwnerHistory's organization name is IfcOpenShell. And looks for the quantities "Total Surface Area", "Volume", "Shape Validation Properties.Surface Genus" and validates these according to the interpreted geometry definition. Emit Logger::Error when calculated values are outside of the tolerance range for the value stored in the model.
WELD_VERTICES
-------------
Note: In Python, this setting is *on* by default.
Note: This setting only affects triangulated output.
This setting is available in IfcConvert using `--weld-vertices`.
Discards normals and joins vertices solely based on position. This is useful when output is to be modified in a modeling application.
>>> import ifcopenshell, ifcopenshell.geom
>>> s = ifcopenshell.geom.settings()
>>> s.set(s.WELD_VERTICES, False)
>>> f = ifcopenshell.open("Duplex_A_20110907_optimized.ifc")
>>> c = f["3bXiCStxP6Fgxdej$yc50U"]
>>> shp = ifcopenshell.geom.create_shape(s, c)
>>> shp.geometry.verts
(4.675000000000003, -8.07499999999999, 2.657, 4.674999999999999, -10.24600000000002, 2.657, 6.226000000000004, -8.074999999999996, 2.657, 6.226, -10.24600000000003, 2.657, 4.675000000000003, -8.07499999999999, 2.6, 4.674999999999999, -10.24600000000002, 2.6, 6.226000000000004, -8.074999999999996, 2.6, 6.226, -10.24600000000003, 2.6, 4.674999999999999, -10.24600000000002, 2.657, 4.674999999999999, -10.24600000000002, 2.6, 4.675000000000003, -8.07499999999999, 2.657, 4.675000000000003, -8.07499999999999, 2.6, 6.226, -10.24600000000003, 2.657, 4.674999999999999, -10.24600000000002, 2.657, 6.226, -10.24600000000003, 2.6, 4.674999999999999, -10.24600000000002, 2.6, 6.226000000000004, -8.074999999999996, 2.657, 6.226, -10.24600000000003, 2.657, 6.226000000000004, -8.074999999999996, 2.6, 6.226, -10.24600000000003, 2.6, 4.675000000000003, -8.07499999999999, 2.657, 4.675000000000003, -8.07499999999999, 2.6, 6.226000000000004, -8.074999999999996, 2.657, 6.226000000000004, -8.074999999999996, 2.6)
>>> shp.geometry.normals
(3.059754518198021e-17, 0.0, -1.0, 3.059754518198021e-17, 0.0, -1.0, 3.059754518198021e-17, 0.0, -1.0, 3.059754518198021e-17, 0.0, -1.0, 2.110175529791737e-16, 0.0, -1.0, 2.110175529791737e-16, 0.0, -1.0, 2.110175529791737e-16, 0.0, -1.0, 2.110175529791737e-16, 0.0, -1.0, -1.0, 1.79434333701042e-15, 0.0, -1.0, 1.79434333701042e-15, 0.0, -1.0, 1.79434333701042e-15, 0.0, -1.0, 1.79434333701042e-15, 0.0, 6.8717866127669046e-15, 1.0, 0.0, 6.8717866127669046e-15, 1.0, 0.0, 6.8717866127669046e-15, 1.0, 0.0, 6.8717866127669046e-15, 1.0, 0.0, -1.0, 1.79434333701042e-15, 0.0, -1.0, 1.79434333701042e-15, 0.0, -1.0, 1.79434333701042e-15, 0.0, -1.0, 1.79434333701042e-15, 0.0, 3.4358933063834523e-15, 1.0, 0.0, 3.4358933063834523e-15, 1.0, 0.0, 3.4358933063834523e-15, 1.0, 0.0, 3.4358933063834523e-15, 1.0, 0.0)
>>>
>>> s.set(s.WELD_VERTICES, True)
>>> shp = ifcopenshell.geom.create_shape(s, c)
>>> shp.geometry.verts
(4.675000000000003, -8.07499999999999, 2.657, 4.674999999999999, -10.24600000000002, 2.657, 6.226000000000004, -8.074999999999996, 2.657, 6.226, -10.24600000000003, 2.657, 4.675000000000003, -8.07499999999999, 2.6, 4.674999999999999, -10.24600000000002, 2.6, 6.226000000000004, -8.074999999999996, 2.6, 6.226, -10.24600000000003, 2.6)
>>> shp.geometry.normals
()
+10
View File
@@ -0,0 +1,10 @@
IfcOpenShell
============
.. toctree::
:maxdepth: 3
rst_files/library_root
* `ifcopenshell-python documentation <python/html/index.html>`_
+784
View File
@@ -0,0 +1,784 @@
#!/usr/bin/python
###############################################################################
# #
# This file is part of IfcOpenShell. #
# #
# IfcOpenShell is free software: you can redistribute it and/or modify #
# it under the terms of the Lesser GNU General Public License as published by #
# the Free Software Foundation, either version 3.0 of the License, or #
# (at your option) any later version. #
# #
# IfcOpenShell is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# Lesser GNU General Public License for more details. #
# #
# You should have received a copy of the Lesser GNU General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
# #
###############################################################################
###############################################################################
# #
# This script builds IfcOpenShell and its dependencies #
# #
# Prerequisites for this script to function correctly: #
# * cmake * git * bzip2 * tar * c(++) compilers * yacc * autoconf #
# #
# if building with USE_OCCT additionally: #
# * freetype * glx.h #
# #
# if building with OCCT 7.4.0 additionally: #
# * libfontconfig1-dev #
# #
# if building with -shared #
# * libgl1-mesa-dev libxext-dev libxmu-dev libxmu-headers libxi-dev #
# #
# for python37 to install correctly additionally: #
# * libffi(-dev[el]) #
# #
# on debian 7.8 these can be obtained with: #
# $ apt-get install git gcc g++ autoconf bison bzip2 cmake #
# libfreetype6-dev mesa-common-dev libffi-dev libfontconfig1-dev #
# #
# on ubuntu 14.04: #
# $ apt-get install git gcc g++ autoconf bison make cmake #
# libfreetype6-dev mesa-common-dev libffi-dev libfontconfig1-dev #
# #
# on OS X El Capitan with homebrew: #
# $ brew install git bison autoconf automake freetype libffi cmake #
# #
###############################################################################
from __future__ import print_function
import logging
import os
import sys
import subprocess as sp
import shutil
import time
import tarfile
import multiprocessing
PYTHON_MAJOR = sys.version_info[0]
if PYTHON_MAJOR >= 3:
from urllib.request import urlretrieve
else:
# Not Python 3 - today, it is most likely to be Python 2
# But note that this might need an update when Python 4
# might be around one day
from urllib import urlretrieve
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
logger.addHandler(ch)
PROJECT_NAME="IfcOpenShell"
PYTHON_VERSIONS=["2.7.16", "3.2.6", "3.3.6", "3.4.6", "3.5.3", "3.6.2", "3.7.3", "3.8.6", "3.9.1"]
JSON_VERSION="v3.6.1"
OCE_VERSION="0.18"
# OCCT_VERSION="7.1.0"
# OCCT_HASH="89aebde"
# OCCT_VERSION="7.2.0"
# OCCT_HASH="88af392"
OCCT_VERSION="7.3.0p3"
BOOST_VERSION="1.71.0"
#PCRE_VERSION="8.39"
PCRE_VERSION="8.41"
#LIBXML2_VERSION="2.9.3"
LIBXML2_VERSION="2.9.9"
SWIG_VERSION="3.0.12"
#SWIG_VERSION="4.0.0"
#OPENCOLLADA_VERSION="v1.6.63"
OPENCOLLADA_VERSION="v1.6.68"
# binaries
cp="cp"
bash="bash"
uname="uname"
git="git"
bunzip2="bunzip2"
tar="tar"
cc="cc"
cplusplus="c++"
autoconf="autoconf"
automake="automake"
yacc="yacc"
make="make"
date = "date"
curl="curl"
wget="wget"
strip="strip"
# Helper function for coloured printing
NO_COLOR="\033[0m" # <ref>http://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux</ref>
BLACK_ON_WHITE="\033[0;30;107m"
RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
MAGENTA="\033[35m"
def cecho(message, color=NO_COLOR):
"""Logs message `message` in color `color`."""
logger.info("%s%s\033[0m" % (color, message))
def which(cmd):
for path in os.environ["PATH"].split(":"):
if os.path.exists(path) and cmd in os.listdir(path):
return cmd
return None
def get_os():
ret_value = sp.check_output([uname, "-s"]).strip()
return ret_value
def to_pystring(x):
""" Python 2 & 3 compatibility function for strings handling
(to solve TypeError "Can't mix strings and bytes in path components" for Python 3).
Reference https://github.com/hugsy/gef/issues/382 """
res = str(x, encoding="utf-8") if PYTHON_MAJOR == 3 else x
substs = [("\n","\\n"), ("\r","\\r"), ("\t","\\t"), ("\v","\\v"), ("\b","\\b"), ]
for x,y in substs: res = res.replace(x,y)
return res
# Set defaults for missing empty environment variables
USE_OCCT = os.environ.get("USE_OCCT", "true").lower() == "true"
TOOLSET = None
if get_os() == "Darwin":
# C++11 features used in OCCT 7+ need a more recent stdlib
TOOLSET = "10.9" if USE_OCCT else "10.6"
# python 3.4 doesn't seem to build anymore on recent versions of clang
if get_os() == "Darwin":
try:
PYTHON_VERSIONS.remove("3.4.6")
except ValueError as e:
pass
try:
IFCOS_NUM_BUILD_PROCS = os.environ["IFCOS_NUM_BUILD_PROCS"]
except KeyError:
IFCOS_NUM_BUILD_PROCS=multiprocessing.cpu_count() + 1
try:
TARGET_ARCH = os.environ["TARGET_ARCH"]
except KeyError:
TARGET_ARCH = sp.check_output([uname, "-m"]).strip()
CMAKE_DIR=os.path.realpath(os.path.join("..", "cmake"))
try:
DEPS_DIR = os.environ["DEPS_DIR"]
except KeyError:
path = [b"..", b"build", sp.check_output(uname).strip(), TARGET_ARCH]
if TOOLSET:
path.append(TOOLSET)
DEPS_DIR = to_pystring(os.path.realpath(os.path.join(*path)))
if not os.path.exists(DEPS_DIR):
os.makedirs(DEPS_DIR)
try:
BUILD_CFG=os.environ["BUILD_CFG"]
except KeyError:
BUILD_CFG="RelWithDebInfo"
# Print build configuration information
cecho ("""This script fetches and builds %s and its dependencies
""" % (PROJECT_NAME,), BLACK_ON_WHITE)
cecho("""Script configuration:
""", GREEN)
cecho("""* Target Architecture = %s""" % (TARGET_ARCH,), MAGENTA)
cecho(" - Whether 32-bit (i686) or 64-bit (x86_64) will be built.")
cecho("""* USE_OCCT = %r""" % (USE_OCCT,), MAGENTA)
if USE_OCCT:
cecho(" - Compiling against official Open Cascade")
else:
cecho(" - Compiling against Open Cascade Community Edition")
cecho("* Dependency Directory = %s" % (DEPS_DIR,), MAGENTA)
cecho(" - The directory where %s dependencies are installed." % (PROJECT_NAME,))
cecho("* Build Config Type = %s" % (BUILD_CFG,), MAGENTA)
cecho(""" - The used build configuration type for the dependencies.
Defaults to RelWithDebInfo if not specified.""")
if BUILD_CFG == "MinSizeRel":
cecho(" WARNING: MinSizeRel build can suffer from a significant performance loss.", RED)
cecho("* IFCOS_NUM_BUILD_PROCS = %s" % (IFCOS_NUM_BUILD_PROCS,), MAGENTA)
cecho(""" - How many compiler processes may be run in parallel.
""")
dependency_tree = {
'IfcParse': ('boost', 'libxml2'),
'IfcGeom': ('IfcParse', 'occ'),
'IfcConvert': ('IfcGeom', 'OpenCOLLADA', 'json'),
'OpenCOLLADA': ('libxml2', 'pcre'),
'IfcGeomServer': ('IfcGeom',),
'IfcOpenShell-Python': ('python', 'swig', 'IfcGeom'),
'swig': ('pcre',),
'boost': (),
'libxml2': (),
'python': (),
'occ': (),
'pcre': (),
'json': ()
}
def v(dep):
yield dep
for d in dependency_tree[dep]:
for x in v(d):
yield x
tgts = [s for s in sys.argv[1:] if not s.startswith("-")]
flags = set(s for s in sys.argv[1:] if s.startswith("-"))
BUILD_STATIC = not "-shared" in flags
ENABLE_FLAG = "--enable-static" if BUILD_STATIC else "--enable-shared"
DISABLE_FLAG = "--disable-shared" if BUILD_STATIC else "--disable-static"
LINK_TYPE = "static" if BUILD_STATIC else "shared"
LINK_TYPE_UCFIRST = LINK_TYPE[0].upper() + LINK_TYPE[1:]
LIBRARY_EXT = "a" if BUILD_STATIC else "so"
PIC = "-fPIC" if BUILD_STATIC else ""
if len(tgts):
targets = set(sum((list(v(target)) for target in tgts), []))
else:
targets = set(dependency_tree.keys())
print("Building:", *sorted(targets, key=lambda t: len(list(v(t)))))
# Check that required tools are in PATH
for cmd in [git, bunzip2, tar, cc, cplusplus, autoconf, automake, yacc, make, "patch", "cmake"]:
if which(cmd) is None:
raise ValueError("Required tool '%s' not installed or not added to PATH" % (cmd,))
# identifiers for the download tool (could be less memory consuming as ints, but are more verbose as strings)
download_tool_default = download_tool_py = "py"
download_tool_git = "git"
# Create log directory and file
log_dir = os.path.join(DEPS_DIR, "logs")
if not os.path.exists(log_dir):
os.makedirs(log_dir)
LOG_FILE="%s.log" % (os.path.join(log_dir, to_pystring(sp.check_output([date, "+%Y%m%d"]).strip())),)
if not os.path.exists(LOG_FILE):
open(LOG_FILE, "w").close()
logger.info("using command log file '%s'" % (LOG_FILE,))
def run(cmds, cwd=None):
"""
Wraps `subprocess.Popen.communicate()` and logs the command being executed,
sets up logging `stderr` to `LOG_FILE` (in append mode) and returns stdout
with leading and trailing whitespace removed.
"""
logger.debug("running command %r in directory %r" % (" ".join(cmds), cwd))
log_file_handle = open(LOG_FILE, "ab")
proc = sp.Popen(cmds, cwd=cwd, stdout=sp.PIPE, stderr=sp.PIPE)
stdout, stderr = proc.communicate()
log_file_handle.write(stdout)
log_file_handle.write(stderr)
log_file_handle.close()
logger.debug("command returned %r" % proc.returncode)
if proc.returncode != 0:
print("-" * 70)
print(stderr)
print("-" * 70)
raise Exception("Command `%s` returned exit code %d" % (" ".join(cmds), proc.returncode))
return stdout.strip()
BOOST_VERSION_UNDERSCORE=BOOST_VERSION.replace(".", "_")
OCE_LOCATION="https://github.com/tpaviot/oce/archive/OCE-%s.tar.gz" % (OCE_VERSION,)
BOOST_LOCATION="https://boostorg.jfrog.io/artifactory/main/release/%s/source/" % (BOOST_VERSION,)
# Helper functions
def run_autoconf(arg1, configure_args, cwd):
configure_path = os.path.realpath(os.path.join(cwd, "..", "configure"))
if not os.path.exists(configure_path):
run([bash, "./autogen.sh"], cwd=os.path.realpath(os.path.join(cwd, ".."))) # only run autogen.sh in the directory it is located and use cwd to achieve that in order to not mess up things
# Using `sh` over `bash` fixes issues with building swig
run(["/bin/sh", "../configure"]+configure_args+["--prefix=%s" % (os.path.realpath("%s/install/%s" % (DEPS_DIR, arg1)),)], cwd=cwd)
def run_cmake(arg1, cmake_args, cmake_dir=None, cwd=None):
if cmake_dir is None:
P=".."
else:
P=cmake_dir
run(["cmake", P]+cmake_args+["-DCMAKE_BUILD_TYPE=%s" % (BUILD_CFG,)], cwd=cwd)
def git_clone_or_pull_repository(clone_url, target_dir, revision=None):
"""Lazily clones the `git` repository denoted by `clone_url` into
the `target_dir` or pulls latest changes if the `target_dir` exists (naively assumes
that a working clone exists there) and optionally checks out a revision
`revision` after cloning or in the existing clone if `revision` is not
`None`."""
if not os.path.exists(target_dir):
logger.info("cloning '%s' into '%s'" % (clone_url, target_dir))
run([git, "clone", "--recursive", clone_url, target_dir])
else:
logger.info("directory '%s' already cloned. Pulling latest changes." % (target_dir,))
# detect whether we are on a branch and pull
if run([git, "rev-parse", "--abbrev-ref", "HEAD"], cwd=target_dir) != "HEAD":
run([git, "pull", clone_url], cwd=target_dir)
if revision != None:
run([git, "checkout", revision], cwd=target_dir)
def build_dependency(name, mode, build_tool_args, download_url, download_name, download_tool=download_tool_default, revision=None, patch=None, additional_files={}, no_append_name=False):
"""Handles building of dependencies with different tools (which are
distinguished with the `mode` argument. `build_tool_args` is expected to be
a list which is necessary in order to not mess up quoting of compiler and
linker flags."""
check_dir = os.path.join(DEPS_DIR, "install", name)
if os.path.exists(check_dir):
logger.info( "Found existing %s, skipping" % (name,))
return
build_dir = os.path.join(DEPS_DIR, "build")
if not os.path.exists(build_dir):
os.makedirs(build_dir)
logger.info("\rFetching %s... " % (name,))
if download_tool == download_tool_py:
if no_append_name:
url = download_url
else:
url = os.path.join(download_url, download_name)
download_path = os.path.join(build_dir, download_name)
if not os.path.exists(download_path):
urlretrieve(url, os.path.join(build_dir, download_path))
else:
logger.info("Download '%s' already exists, assuming it's an undamaged download and that it has been extracted if possible, skipping" % (download_path,))
elif download_tool == download_tool_git:
logger.info("\rChecking %s... " % (name,))
git_clone_or_pull_repository(download_url, target_dir=os.path.join(build_dir, download_name), revision=revision)
else:
raise ValueError("download tool '%s' is not supported" % (download_tool,))
download_dir = os.path.join(build_dir, download_name)
if os.path.isdir(download_dir):
extract_dir_name=download_name
extract_dir = os.path.join(build_dir, extract_dir_name)
else:
download_tarfile_path = os.path.join(build_dir, download_name)
if download_name.endswith(".tar.gz") or download_name.endswith(".tgz"):
compr = "gz"
elif download_name.endswith(".tar.bz2"):
compr = "bz2"
else:
raise RuntimeError("fix source for new download type")
download_tarfile = tarfile.open(name=download_tarfile_path, mode="r:%s" % (compr,))
extract_dir_name= os.path.commonprefix(download_tarfile.getnames()) # tarfile seriously doesn't have a function to retrieve the root directory more easily
#run([tar, "--exclude=\"*/*\"", "-tf", download_name], cwd=build_dir).strip() no longer works
if extract_dir_name is None:
extract_dir_name= run([bash, "-c", "tar -tf %s 2> /dev/null | head -n 1 | cut -f1 -d /" % (download_name,)], cwd=build_dir)
extract_dir = os.path.join(build_dir, extract_dir_name)
if not os.path.exists(extract_dir):
run([tar, "-xf", download_name], cwd=build_dir)
for path, url in additional_files.items():
if not os.path.exists(path):
urlretrieve(url, os.path.join(extract_dir, path))
if patch is not None:
patch_abs = os.path.abspath(os.path.join(os.path.dirname(__file__), patch))
if os.path.exists(patch_abs):
try: run(["patch", "-p1", "--batch", "--forward", "-i", patch_abs], cwd=extract_dir)
except Exception as e:
# Assert that the patch has already been applied
run(["patch", "-p1", "--batch", "--reverse", "--dry-run", "-i", patch_abs], cwd=extract_dir)
if mode != "bjam":
extract_build_dir = os.path.join(extract_dir, "build")
if os.path.exists(extract_build_dir):
shutil.rmtree(extract_build_dir)
os.makedirs(extract_build_dir)
logger.info("\rConfiguring %s..." % (name,))
if mode == "autoconf":
run_autoconf(name, build_tool_args, cwd=extract_build_dir)
elif mode == "cmake":
run_cmake(name, build_tool_args, cwd=extract_build_dir)
else:
raise ValueError()
logger.info("\rBuilding %s... " % (name,))
run([make, "-j%s" % (IFCOS_NUM_BUILD_PROCS,), "VERBOSE=1"], cwd=extract_build_dir)
logger.info( "\rInstalling %s... " % (name,))
run([make, "install"], cwd=extract_build_dir)
logger.info( "\rInstalled %s \n" % (name,))
else:
logger.info( "\rConfiguring %s..." % (name,))
run([bash, "./bootstrap.sh"], cwd=extract_dir)
logger.info("\rBuilding %s... " % (name,))
run(["./b2", "-j%s" % (IFCOS_NUM_BUILD_PROCS,)]+build_tool_args, cwd=extract_dir)
logger.info("\rInstalling %s... " % (name,))
shutil.copytree(os.path.join(extract_dir, "boost"), os.path.join(DEPS_DIR, "install", "boost-%s" % BOOST_VERSION, "boost"))
logger.info("\rInstalled %s \n" % (name,))
cecho("Collecting dependencies:", GREEN)
# Set compiler flags for 32bit builds on 64bit system
# TODO: This is untested
ADDITIONAL_ARGS=[]
BOOST_ADDRESS_MODEL=[]
if TARGET_ARCH == "i686" and run([uname, "-m"]).strip() == "x86_64":
if get_os() == "Darwin":
ADDITIONAL_ARGS=["-m32", "-arch i386"]
else:
ADDITIONAL_ARGS=["-m32"]
BOOST_ADDRESS_MODEL=["architecture=x86", "address-model=32"]
if get_os() == "Darwin":
ADDITIONAL_ARGS=["-mmacosx-version-min=%s" % TOOLSET]+ADDITIONAL_ARGS
# If the linker supports GC sections, set it up to reduce binary file size
# -fPIC is required for the shared libraries to work
CXXFLAGS=os.environ.get("CXXFLAGS", "")
CFLAGS=os.environ.get("CFLAGS", "")
LDFLAGS=os.environ.get("LDFLAGS", "")
if sp.call([bash, "-c", "ld --gc-sections 2>&1 | grep -- --gc-sections &> /dev/null"]) != 0:
CXXFLAGS_MINIMAL="%s %s %s" % (CXXFLAGS, PIC, str.join(" ", ADDITIONAL_ARGS))
CFLAGS_MINIMAL="%s %s %s" % (CFLAGS, PIC, str.join(" ", ADDITIONAL_ARGS))
if BUILD_STATIC:
CXXFLAGS="%s %s -fdata-sections -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden %s" % (CXXFLAGS, PIC, str.join(" ", ADDITIONAL_ARGS))
CFLAGS="%s %s -fdata-sections -ffunction-sections -fvisibility=hidden %s"% (CFLAGS, PIC, str.join(" ", ADDITIONAL_ARGS))
else:
CXXFLAGS=CXXFLAGS_MINIMAL
CFLAGS=CFLAGS_MINIMAL
LDFLAGS="%s -Wl,--gc-sections %s" % (LDFLAGS, str.join(" ", ADDITIONAL_ARGS))
else:
CXXFLAGS_MINIMAL="%s %s %s" % (CXXFLAGS, PIC, str.join(" ", ADDITIONAL_ARGS))
CFLAGS_MINIMAL="%s %s %s" % (CFLAGS, PIC, str.join(" ", ADDITIONAL_ARGS))
if BUILD_STATIC:
CXXFLAGS="%s %s -fvisibility=hidden -fvisibility-inlines-hidden %s" % (CXXFLAGS, PIC, str.join(" ", ADDITIONAL_ARGS))
CFLAGS="%s %s -fvisibility=hidden -fvisibility-inlines-hidden %s" % (CFLAGS, PIC, str.join(" ", ADDITIONAL_ARGS))
else:
CXXFLAGS=CXXFLAGS_MINIMAL
CFLAGS=CFLAGS_MINIMAL
LDFLAGS="%s %s" % (LDFLAGS, str.join(" ", ADDITIONAL_ARGS))
os.environ["CXXFLAGS"] = CXXFLAGS
os.environ["CFLAGS"] = CFLAGS
os.environ["LDFLAGS"] = LDFLAGS
# Some dependencies need a more recent CMake version than most distros provide
# @tfk: this is no longer needed
# build_dependency(name="cmake-%s" % (CMAKE_VERSION,), mode="autoconf", build_tool_args=[], download_url="https://cmake.org/files/v%s" % (CMAKE_VERSION_2,), download_name="cmake-%s.tar.gz" % (CMAKE_VERSION,))
if "json" in targets:
json_url = "https://github.com/nlohmann/json/releases/download/{JSON_VERSION}/json.hpp".format(**locals())
json_install_path = "{DEPS_DIR}/install/json/nlohmann/json.hpp".format(**locals())
if not os.path.exists(os.path.dirname(json_install_path)):
os.makedirs(os.path.dirname(json_install_path))
if not os.path.exists(json_install_path):
urlretrieve(json_url, json_install_path)
if "pcre" in targets:
build_dependency(
name="pcre-{PCRE_VERSION}".format(**locals()),
mode="autoconf",
build_tool_args=[DISABLE_FLAG],
download_url="https://downloads.sourceforge.net/project/pcre/pcre/{PCRE_VERSION}/".format(**locals()),
download_name="pcre-{PCRE_VERSION}.tar.bz2".format(**locals())
)
# An issue exists with swig-1.3 and python >= 3.2
# Therefore, build a recent copy from source
if "swig" in targets:
build_dependency(
name="swig",
mode="autoconf",
build_tool_args=["--disable-ccache", "--with-pcre-prefix={DEPS_DIR}/install/pcre-{PCRE_VERSION}".format(**locals())],
download_url="https://github.com/swig/swig.git",
download_name="swig",
download_tool=download_tool_git,
revision="rel-{SWIG_VERSION}".format(**locals())
)
if USE_OCCT and "occ" in targets:
build_dependency(
name="occt-{OCCT_VERSION}".format(**locals()),
mode="cmake",
build_tool_args=[
"-DINSTALL_DIR={DEPS_DIR}/install/occt-{OCCT_VERSION}".format(**locals()),
"-DBUILD_LIBRARY_TYPE={LINK_TYPE_UCFIRST}".format(**locals()),
"-DBUILD_MODULE_Draw=0",
"-DBUILD_RELEASE_DISABLE_EXCEPTIONS=Off"
],
download_url = "https://git.dev.opencascade.org/repos/occt.git",
download_name = "occt",
download_tool=download_tool_git,
patch=None if OCCT_VERSION >= "7.4" else "./patches/occt/enable-exception-handling.patch",
revision="V" + OCCT_VERSION.replace('.', '_')
)
elif "occ" in targets:
build_dependency(
name="oce-{OCE_VERSION}".format(**locals()),
mode="cmake",
build_tool_args=[
"-DOCE_DISABLE_TKSERVICE_FONT=ON",
"-DOCE_TESTING=OFF",
"-DOCE_BUILD_SHARED_LIB=OFF",
"-DOCE_DISABLE_X11=ON",
"-DOCE_VISUALISATION=OFF",
"-DOCE_OCAF=OFF",
"-DOCE_INSTALL_PREFIX={DEPS_DIR}/install/oce-{OCE_VERSION}".format(**locals())
],
download_url="https://github.com/tpaviot/oce/archive/",
download_name="OCE-{OCE_VERSION}.tar.gz".format(**locals())
)
if "libxml2" in targets:
build_dependency(
"libxml2-{LIBXML2_VERSION}".format(**locals()),
"autoconf",
build_tool_args=[
"--without-python",
ENABLE_FLAG,
DISABLE_FLAG,
"--without-zlib",
"--without-iconv",
"--without-lzma"
],
download_url="ftp://xmlsoft.org/libxml2/",
download_name="libxml2-{LIBXML2_VERSION}.tar.gz".format(**locals())
)
if "OpenCOLLADA" in targets:
build_dependency(
"OpenCOLLADA",
"cmake",
build_tool_args=[
"-DLIBXML2_INCLUDE_DIR={DEPS_DIR}/install/libxml2-{LIBXML2_VERSION}/include/libxml2".format(**locals()),
"-DLIBXML2_LIBRARIES={DEPS_DIR}/install/libxml2-{LIBXML2_VERSION}/lib/libxml2.{LIBRARY_EXT}".format(**locals()),
"-DPCRE_INCLUDE_DIR={DEPS_DIR}/install/pcre-{PCRE_VERSION}/include".format(**locals()),
"-DPCRE_PCREPOSIX_LIBRARY={DEPS_DIR}/install/pcre-{PCRE_VERSION}/lib/libpcreposix.{LIBRARY_EXT}".format(**locals()),
"-DPCRE_PCRE_LIBRARY={DEPS_DIR}/install/pcre-{PCRE_VERSION}/lib/libpcre.{LIBRARY_EXT}".format(**locals()),
"-DCMAKE_INSTALL_PREFIX={DEPS_DIR}/install/OpenCOLLADA/".format(**locals())
],
download_url="https://github.com/KhronosGroup/OpenCOLLADA.git",
download_name="OpenCOLLADA",
download_tool=download_tool_git,
patch="./patches/opencollada/pr622_and_disable_subdirs.patch",
revision=OPENCOLLADA_VERSION
)
if "python" in targets:
# Python should not be built with -fvisibility=hidden, from experience that introduces segfaults
OLD_CXX_FLAGS=os.environ["CXXFLAGS"]
OLD_C_FLAGS=os.environ["CFLAGS"]
os.environ["CXXFLAGS"]=CXXFLAGS_MINIMAL
os.environ["CFLAGS"]=CFLAGS_MINIMAL
# On OSX a dynamic python library is built or it would not be compatible
# with the system python because of some threading initialization
PYTHON_CONFIGURE_ARGS=[]
if get_os() == "Darwin":
PYTHON_CONFIGURE_ARGS=["--disable-static", "--enable-shared"]
def get_python_unicode_confs(py_ver):
if py_ver < "3.3":
return [("--enable-unicode=ucs2",""), ("--enable-unicode=ucs4","u")]
else: return [("","")]
def PYTHON_VERSION_CONFS():
for v in PYTHON_VERSIONS:
for unicode_conf, abi_tag in get_python_unicode_confs(v):
yield v, unicode_conf, abi_tag
for PYTHON_VERSION, unicode_conf, abi_tag in PYTHON_VERSION_CONFS():
try:
build_dependency(
"python-{PYTHON_VERSION}{abi_tag}".format(**locals()),
"autoconf",
PYTHON_CONFIGURE_ARGS + [unicode_conf],
"http://www.python.org/ftp/python/{PYTHON_VERSION}/".format(**locals()),
"Python-{PYTHON_VERSION}.tgz".format(**locals())
)
except Exception as e:
pyver2 = PYTHON_VERSION[:PYTHON_VERSION.rfind('.')]
if os.path.exists("{DEPS_DIR}/install/python-{PYTHON_VERSION}{abi_tag}/bin/python{pyver2}".format(**locals())):
print("Installation partially failed")
else: raise e
os.environ["CXXFLAGS"]=OLD_CXX_FLAGS
os.environ["CFLAGS"]=OLD_C_FLAGS
if "boost" in targets:
str_concat = lambda prefix: lambda postfix: "" if postfix.strip() == "" else "=".join((prefix, postfix.strip()))
build_dependency(
"boost-{BOOST_VERSION}".format(**locals()),
mode="bjam",
build_tool_args=[
"--stagedir={DEPS_DIR}/install/boost-{BOOST_VERSION}".format(**locals()),
"--with-system",
"--with-program_options",
"--with-regex",
"--with-thread",
"--with-date_time",
"--with-iostreams",
"link={LINK_TYPE}".format(**locals())
] + \
BOOST_ADDRESS_MODEL + \
list(map(str_concat("cxxflags"), CXXFLAGS.strip().split(' '))) + \
list(map(str_concat("linkflags"), LDFLAGS.strip().split(' '))) + \
["stage", "-s", "NO_BZIP2=1"],
download_url=BOOST_LOCATION,
download_name="boost_{BOOST_VERSION_UNDERSCORE}.tar.bz2".format(**locals())
)
cecho("Building IfcOpenShell:", GREEN)
IFCOS_DIR=os.path.join(DEPS_DIR, "build", "ifcopenshell")
if os.path.exists(IFCOS_DIR):
shutil.rmtree(IFCOS_DIR)
os.makedirs(IFCOS_DIR)
executables_dir = os.path.join(IFCOS_DIR, "executables")
if not os.path.exists(executables_dir):
os.makedirs(executables_dir)
logger.info("\rConfiguring executables...")
OFF_ON = ["OFF", "ON"]
cmake_args=[
"-DUSE_MMAP=" "OFF",
"-DBUILD_EXAMPLES=" "OFF",
"-DBUILD_IFCPYTHON=" "OFF",
"-DBUILD_SHARED_LIBS=" +OFF_ON[not BUILD_STATIC],
"-DBUILD_IFCGEOM=" +OFF_ON["IfcGeom" in targets],
"-DBUILD_GEOMSERVER=" +OFF_ON["IfcGeomServer" in targets],
"-DBUILD_CONVERT=" +OFF_ON["IfcConvert" in targets],
"-DCMAKE_INSTALL_PREFIX=" "{DEPS_DIR}/install/ifcopenshell".format(**locals()),
"-DBOOST_ROOT=" "{DEPS_DIR}/install/boost-{BOOST_VERSION}".format(**locals()),
"-DGLTF_SUPPORT=" "ON",
"-DJSON_INCLUDE_DIR=" "{DEPS_DIR}/install/json".format(**locals()),
"-DBoost_NO_BOOST_CMAKE=" "On"
]
if "occ" in targets and USE_OCCT:
occ_include_dir = "{DEPS_DIR}/install/occt-{OCCT_VERSION}/include/opencascade".format(**locals())
occ_library_dir = "{DEPS_DIR}/install/occt-{OCCT_VERSION}/lib".format(**locals())
cmake_args.extend([
"-DOCC_INCLUDE_DIR=" +occ_include_dir,
"-DOCC_LIBRARY_DIR=" +occ_library_dir
])
elif "occ" in targets:
occ_include_dir = "{DEPS_DIR}/install/oce-{OCE_VERSION}/include/oce".format(**locals())
occ_library_dir = "{DEPS_DIR}/install/oce-{OCE_VERSION}/lib"
cmake_args.extend([
"-DOCC_INCLUDE_DIR=" +occ_include_dir,
"-DOCC_LIBRARY_DIR=" +occ_library_dir
])
if "OpenCOLLADA" in targets:
cmake_args.extend([
"-DOPENCOLLADA_INCLUDE_DIR=" "{DEPS_DIR}/install/OpenCOLLADA/include/opencollada".format(**locals()),
"-DOPENCOLLADA_LIBRARY_DIR=" "{DEPS_DIR}/install/OpenCOLLADA/lib/opencollada".format(**locals())
])
if "pcre" in targets:
cmake_args.append(
"-DPCRE_LIBRARY_DIR=" "{DEPS_DIR}/install/pcre-{PCRE_VERSION}/lib".format(**locals())
)
if "libxml2" in targets:
cmake_args.extend([
"-DLIBXML2_INCLUDE_DIR=" "{DEPS_DIR}/install/libxml2-{LIBXML2_VERSION}/include/libxml2".format(**locals()),
"-DLIBXML2_LIBRARIES=" "{DEPS_DIR}/install/libxml2-{LIBXML2_VERSION}/lib/libxml2.{LIBRARY_EXT}".format(**locals())
])
run_cmake("", cmake_args, cmake_dir=CMAKE_DIR, cwd=executables_dir)
logger.info("\rBuilding executables... ")
run([make, "-j{IFCOS_NUM_BUILD_PROCS}".format(**locals())], cwd=executables_dir)
run([make, "install/strip" if BUILD_CFG == "Release" else "install"], cwd=executables_dir)
if "IfcOpenShell-Python" in targets:
# On OSX the actual Python library is not linked against.
ADDITIONAL_ARGS=""
if get_os() == "Darwin":
ADDITIONAL_ARGS="-Wl,-flat_namespace,-undefined,suppress"
os.environ["CXXFLAGS"]="%s %s" % (CXXFLAGS_MINIMAL, ADDITIONAL_ARGS)
os.environ["CFLAGS"]="%s %s" % (CFLAGS_MINIMAL, ADDITIONAL_ARGS)
os.environ["LDFLAGS"]="%s %s" % (LDFLAGS, ADDITIONAL_ARGS)
for PYTHON_VERSION, _, TAG in PYTHON_VERSION_CONFS():
logger.info("\rConfiguring python {PYTHON_VERSION}{TAG} wrapper...".format(**locals()))
# python_dir = os.path.join(IFCOS_DIR, "python-{PYTHON_VERSION}{TAG}".format(**locals()))
python_dir = os.path.join(IFCOS_DIR, "pythonwrapper")
if not os.path.exists(python_dir):
os.makedirs(python_dir)
cache_path = os.path.join(python_dir, "CMakeCache.txt")
if os.path.exists(cache_path):
os.unlink(cache_path)
PYTHON_LIBRARY=run([bash, "-c", "ls {DEPS_DIR}/install/python-{PYTHON_VERSION}{TAG}/lib/libpython*.*".format(**locals())])
PYTHON_INCLUDE=run([bash, "-c", "ls -d {DEPS_DIR}/install/python-{PYTHON_VERSION}{TAG}/include/python*".format(**locals())])
PYTHON_EXECUTABLE=os.path.join(DEPS_DIR, "install", "python-{PYTHON_VERSION}{TAG}".format(**locals()), "bin", "python{PYTHON_VERSION[0]}".format(**locals()))
os.environ["PYTHON_LIBRARY_BASENAME"]=os.path.basename(PYTHON_LIBRARY)
run_cmake("",
cmake_args=[
"-DBUILD_SHARED_LIBS=" "OFF" if BUILD_STATIC else "ON",
"-DBOOST_ROOT=" "{DEPS_DIR}/install/boost-{BOOST_VERSION}".format(**locals()),
"-DOCC_INCLUDE_DIR=" +occ_include_dir,
"-DOCC_LIBRARY_DIR=" +occ_library_dir,
"-DPYTHON_LIBRARY=" +PYTHON_LIBRARY,
"-DPYTHON_EXECUTABLE=" +PYTHON_EXECUTABLE,
"-DPYTHON_INCLUDE_DIR=" +PYTHON_INCLUDE,
"-DSWIG_EXECUTABLE=" "{DEPS_DIR}/install/swig/bin/swig".format(**locals()),
"-DCMAKE_INSTALL_PREFIX=" "{DEPS_DIR}/install/ifcopenshell/tmp".format(**locals()),
"-DLIBXML2_INCLUDE_DIR=" "{DEPS_DIR}/install/libxml2-{LIBXML2_VERSION}/include/libxml2".format(**locals()),
"-DLIBXML2_LIBRARIES=" "{DEPS_DIR}/install/libxml2-{LIBXML2_VERSION}/lib/libxml2.{LIBRARY_EXT}".format(**locals()),
"-DCOLLADA_SUPPORT=OFF"
], cmake_dir=CMAKE_DIR, cwd=python_dir)
logger.info("\rBuilding python %s%s wrapper... " % (PYTHON_VERSION, TAG))
run([make, "-j%s" % (IFCOS_NUM_BUILD_PROCS,), "_ifcopenshell_wrapper"], cwd=python_dir)
run([make, "install/local"], cwd=os.path.join(python_dir, "ifcwrap"))
module_dir = os.path.dirname(run([PYTHON_EXECUTABLE, "-c", "from __future__ import print_function; import inspect, ifcopenshell; print(inspect.getfile(ifcopenshell))"]))
if get_os() != "Darwin":
# TODO: This symbol name depends on the Python version?
run([strip, "-s", "-K", "PyInit__ifcopenshell_wrapper", "_ifcopenshell_wrapper.so"], cwd=module_dir)
run([cp, "-R", module_dir, os.path.join(DEPS_DIR, "install", "ifcopenshell", "python-%s%s" % (PYTHON_VERSION, TAG))])
logger.info("\rBuilt IfcOpenShell...\n\n")
+32
View File
@@ -0,0 +1,32 @@
http://git.dev.opencascade.org/gitweb/?p=occt.git;a=commitdiff;h=0ab4e621833f4eae945a3762c9a29ee12e2eec53#patch1
diff --git a/src/HLRBRep/HLRBRep_InternalAlgo.cxx b/src/HLRBRep/HLRBRep_InternalAlgo.cxx
index ca885ca..c13cb06 100644 (file)
--- a/src/HLRBRep/HLRBRep_InternalAlgo.cxx
+++ b/src/HLRBRep/HLRBRep_InternalAlgo.cxx
@@ -165,7 +165,7 @@ void HLRBRep_InternalAlgo::Update ()
SB.Bounds(v1,v2,e1,e2,f1,f2);
for (Standard_Integer e = e1; e <= e2; e++) {
- HLRBRep_EdgeData ed = aEDataArray.ChangeValue(e);
+ HLRBRep_EdgeData& ed = aEDataArray.ChangeValue(e);
HLRAlgo::DecodeMinMax(ed.MinMax(), TheMin, TheMax);
if (FirstTime) {
FirstTime = Standard_False;
@@ -307,7 +307,7 @@ void HLRBRep_InternalAlgo::InitEdgeStatus ()
Standard_Integer nf = myDS->NbFaces();
for (Standard_Integer e = 1; e <= ne; e++) {
- HLRBRep_EdgeData ed = aEDataArray.ChangeValue(e);
+ HLRBRep_EdgeData& ed = aEDataArray.ChangeValue(e);
if (ed.Selected()) ed.Status().ShowAll();
}
// for (Standard_Integer f = 1; f <= nf; f++) {
@@ -368,7 +368,7 @@ void HLRBRep_InternalAlgo::Select ()
Standard_Integer nf = myDS->NbFaces();
for (Standard_Integer e = 1; e <= ne; e++) {
- HLRBRep_EdgeData ed = aEDataArray.ChangeValue(e);
+ HLRBRep_EdgeData& ed = aEDataArray.ChangeValue(e);
ed.Selected(Standard_True);
}
@@ -0,0 +1,17 @@
Description: Enable exception handling
Upstream defaults to no exception handling for performance reasons,
but in OCCT's role as a shared library it's better for Debian to
enable it.
Author: Kurt Kremitzki <kkremitzki@gmail.com>
Last-Update: 2018-06-10
--- a/adm/cmake/occt_defs_flags.cmake
+++ b/adm/cmake/occt_defs_flags.cmake
@@ -138,5 +138,5 @@
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
endif()
-set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNo_Exception")
-set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNo_Exception")
+#set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNo_Exception")
+#set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNo_Exception")
@@ -0,0 +1,29 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 95abbe21..293c951c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -284,10 +284,10 @@ add_subdirectory(COLLADASaxFrameworkLoader)
add_subdirectory(COLLADAStreamWriter)
# building COLLADAValidator app
-add_subdirectory(COLLADAValidator)
+# add_subdirectory(COLLADAValidator)
# DAE validator app
-add_subdirectory(DAEValidator)
+# add_subdirectory(DAEValidator)
# Library export
install(EXPORT LibraryExport DESTINATION ${OPENCOLLADA_INST_CMAKECONFIG} FILE OpenCOLLADATargets.cmake)
diff --git a/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp b/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp
index 1f9a3eef..dd6f5c59 100644
--- a/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp
+++ b/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp
@@ -10,6 +10,7 @@
#include "GeneratedSaxParserUtils.h"
#include <math.h>
+#include <cmath>
#include <memory>
#include <string.h>
#include <limits>
+22
View File
@@ -0,0 +1,22 @@
From a0deb4ce8b43cf3c8b8c0a4225c6be5296446dbd Mon Sep 17 00:00:00 2001
From: Adam Eri <adam.eri@blackmirror.media>
Date: Tue, 3 Sep 2019 23:30:20 +0200
Subject: [PATCH] Resolves compile error on macOS
Resolves "no member named 'isnan' in namespace 'std'" on macOS
---
GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp b/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp
index 1f9a3eef..dd6f5c59 100644
--- a/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp
+++ b/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp
@@ -10,6 +10,7 @@
#include "GeneratedSaxParserUtils.h"
#include <math.h>
+#include <cmath>
#include <memory>
#include <string.h>
#include <limits>
+2
View File
@@ -0,0 +1,2 @@
[tool.black]
line-length = 120
+64
View File
@@ -0,0 +1,64 @@
# ****************************************************************************
# line endings
# to suppress line ending changes in github, add ?w=1 at link end of a diff
# for more information see
# FreeCAD source code src/Mod/.gitattributes
# FreeCAD forum topic https://forum.freecadweb.org/viewtopic.php?f=17&t=41117
# FreeCAD pull request https://github.com/FreeCAD/FreeCAD/pull/2752
# get all used file types
# in a directory in a bash use
# find . -type f -name '*.*' | sed 's|.*\.||' | sort -u
# search for a specific file ending
# find . -type f -name '*.ico'
# normalize the line endings of the following files
*.cpp text
*.css text
*.csv text
*.feature text
*.gitattributes text
*.gitignore text
*.gitkeep
*.h text
*.html text
*.ifc text
*.json text
*.md text
*.po text
*.pot text
*.py text
*.txt text
# files not normalized ATM
# bat
# bnf
# blend
# i
# ico
# mo
# mpass
# png
# pth
# pyc
# rst
# svg
# ttf
# xsd
# line endings of all directories will be normalized
# to exclude a directory from being normalized add it here
# example: to exclude dirctory ifcbimtester use the following line without #
# ifcbimtester/** -text
# use git to manually correct the file endings
# git add --renormalize .
+59
View File
@@ -0,0 +1,59 @@
# bcf
A simple Python implementation of BCF. The data model is described in `data.py`.
Manipulation of BCF-XML is available via `bcfxml.py` and manipulation of BCF-API
is available via `bcfapi.py`.
Currently supports BCF version 2.1.
## bcfxml
The `bcfxml` module lets you interact with the BCF-XML standard.
```
from bcf import bcfxml
# Load a project
bcfxml = bcfxml.load("/path/to/file.bcf")
# The project is also stored in the module
# project == bcfxml.project
project=bcfxml.get_project()
print(project.name)
# To edit a project, just modify the object directly
bcfxml.project.name = "New name"
bcfxml.edit_project()
# The BCF file is extracted to this temporary directory
print(bcfxml.filepath)
# Get a dictionary of topics
topics = bcfxml.get_topics()
# Note: topics == bcfxml.topics
for guid, topic in bcfxml.topics.items():
print("Topic guid is", guid)
print("Topic guid is", topic.guid)
print("Topic title is", topic.title)
# Fetch extra data about a topic
header = bcfxml.get_header(guid)
comments = bcfxml.get_comments(guid)
viewpoints = bcfxml.get_viewpoints(guid)
# Note: comments == topic.comments, and so on
for comment_guid, comment in comments.items():
print(comment_guid)
print(comment.comment)
print(comment.author)
# Get a particular topic
topic = bcfxml.get_topic(guid)
# Modify a topic
topic.title = "New title"
bcfxml.edit_topic(topic)
```
View File
+39
View File
@@ -0,0 +1,39 @@
import os.path
import zipfile
import tempfile
from xml.dom import minidom
def load(filepath):
filepath = extract_project(filepath)
if os.path.isfile(os.path.join(filepath, "bcf.version")):
version_path = os.path.join(filepath, "bcf.version")
version_id = get_version(version_path)
if version_id == "2.1":
from bcf.v2.bcfxml import BcfXml
bcfxml = BcfXml()
bcfxml.filepath = filepath
return bcfxml
else:
from bcf.v3.bcfxml import BcfXml
bcfxml = BcfXml()
bcfxml.filepath = filepath
return bcfxml
def get_version(version_path):
xmlparse = minidom.parse(version_path)
version_el = xmlparse.getElementsByTagName("Version")[0]
version = version_el.getAttribute("VersionId")
return version
def extract_project(filepath):
if not filepath:
return
zip_file = zipfile.ZipFile(filepath)
filepath = tempfile.mkdtemp()
zip_file.extractall(filepath)
return filepath
+771
View File
@@ -0,0 +1,771 @@
import os
import uuid
import shutil
import zipfile
import logging
import tempfile
import bcf.v2.data
from datetime import datetime
from xml.dom import minidom
from xmlschema import XMLSchema
from contextlib import contextmanager
from shutil import copyfile
cwd = os.path.dirname(os.path.realpath(__file__))
@contextmanager
def cd(newdir):
prevdir = os.getcwd()
os.chdir(os.path.expanduser(newdir))
try:
yield
finally:
os.chdir(prevdir)
class BcfXml:
def __init__(self):
self.filepath = None
self.logger = logging.getLogger("bcfxml")
self.author = "john@doe.com"
self.project = bcf.v2.data.Project()
self.version = "2.1"
self.topics = {}
def new_project(self):
self.project.project_id = str(uuid.uuid4())
self.project.name = "New Project"
self.topics = {}
if self.filepath:
self.close_project()
self.filepath = tempfile.mkdtemp()
self.edit_project()
self.edit_version()
def get_project(self, filepath=None):
if not filepath:
return self.project
if os.path.isfile(os.path.join(self.filepath, "project.bcfp")):
data = self._read_xml("project.bcfp", "project.xsd")
self.project.extension_schema = data["ExtensionSchema"]
if "Project" in data:
self.project.project_id = data["Project"]["@ProjectId"]
self.project.name = data["Project"].get("Name")
return self.project
def edit_project(self):
self.document = minidom.Document()
root = self._create_element(self.document, "ProjectExtension")
project = self._create_element(root, "Project", {"ProjectId": self.project.project_id})
self._create_element(project, "Name", text=self.project.name)
self._create_element(root, "ExtensionSchema", text="extensions.xsd")
with open(os.path.join(self.filepath, "project.bcfp"), "wb") as f:
f.write(self.document.toprettyxml(encoding="utf-8"))
def save_project(self, filepath):
with cd(self.filepath):
zip_file = zipfile.ZipFile(filepath, "w", zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk("./"):
for file in files:
zip_file.write(os.path.join(root, file))
zip_file.close()
def get_version(self):
data = self._read_xml("bcf.version", "version.xsd")
self.version = data["@VersionId"]
return self.version
def edit_version(self):
self.document = minidom.Document()
root = self._create_element(self.document, "Version", {"VersionId": self.version})
version = self._create_element(root, "DetailedVersion", text=self.version)
with open(os.path.join(self.filepath, "bcf.version"), "wb") as f:
f.write(self.document.toprettyxml(encoding="utf-8"))
def get_topics(self):
self.topics = {}
topics = []
subdirs = []
for (dirpath, dirnames, filenames) in os.walk(self.filepath):
subdirs = dirnames
break
for subdir in subdirs:
try:
uuid.UUID(subdir)
except ValueError:
continue
if not os.path.exists(os.path.join(self.filepath, subdir, "markup.bcf")):
continue
self.topics[subdir] = self.get_topic(subdir)
return self.topics
def get_header(self, guid):
data = self._read_xml(os.path.join(guid, "markup.bcf"), "markup.xsd")
if "Header" not in data:
return
header = bcf.v2.data.Header()
for item in data["Header"]["File"]:
header_file = bcf.v2.data.HeaderFile()
optional_keys = {
"filename": "Filename",
"date": "Date",
"reference": "Reference",
"ifc_project": "@IfcProject",
"ifc_spatial_structure_element": "@IfcSpatialStructureElement",
"is_external": "@isExternal",
}
for key, value in optional_keys.items():
if value in item:
setattr(header_file, key, item[value])
header.files.append(header_file)
self.topics[guid].header = header
return header
def get_topic(self, guid):
if guid in self.topics:
return self.topics[guid]
data = self._read_xml(os.path.join(guid, "markup.bcf"), "markup.xsd")
topic = bcf.v2.data.Topic()
self.topics[guid] = topic
mandatory_keys = {
"guid": "@Guid",
"title": "Title",
"creation_date": "CreationDate",
"creation_author": "CreationAuthor",
}
for key, value in mandatory_keys.items():
setattr(topic, key, data["Topic"][value])
optional_keys = {
"priority": "Priority",
"index": "Index",
"labels": "Labels",
"reference_links": "ReferenceLink",
"modified_date": "ModifiedDate",
"modified_author": "ModifiedAuthor",
"due_date": "DueDate",
"assigned_to": "AssignedTo",
"stage": "Stage",
"description": "Description",
"topic_status": "@TopicStatus",
"topic_type": "@TopicType",
}
for key, value in optional_keys.items():
if value in data["Topic"]:
setattr(topic, key, data["Topic"][value])
if "BimSnippet" in data["Topic"]:
bim_snippet = bcf.v2.data.BimSnippet()
keys = {
"snippet_type": "@SnippetType",
"is_external": "@IsExternal",
"reference": "Reference",
"reference_schema": "ReferenceSchema",
}
for key, value in keys.items():
if value in data["Topic"]["BimSnippet"]:
setattr(bim_snippet, key, data["Topic"]["BimSnippet"][value])
topic.bim_snippet = bim_snippet
if "DocumentReference" in data["Topic"]:
for item in data["Topic"]["DocumentReference"]:
document_reference = bcf.v2.data.DocumentReference()
keys = {
"referenced_document": "ReferencedDocument",
"is_external": "@IsExternal",
"guid": "@Guid",
"description": "Description",
}
for key, value in keys.items():
if value in item:
setattr(document_reference, key, item[value])
topic.document_references.append(document_reference)
if "RelatedTopic" in data["Topic"]:
for item in data["Topic"]["RelatedTopic"]:
related_topic = bcf.v2.data.RelatedTopic()
related_topic.guid = item["@Guid"]
topic.related_topics.append(related_topic)
return topic
def add_topic(self, topic=None):
if topic is None:
topic = bcf.v2.data.Topic()
if not topic.guid:
topic.guid = str(uuid.uuid4())
if not topic.title:
topic.title = "New Topic"
os.mkdir(os.path.join(self.filepath, topic.guid))
self.edit_topic(topic)
return topic
def edit_topic(self, topic):
if not topic.creation_date:
topic.creation_date = datetime.utcnow().isoformat()
topic.creation_author = self.author
else:
topic.modified_date = datetime.utcnow().isoformat()
topic.modified_author = self.author
self.document = minidom.Document()
root = self._create_element(self.document, "Markup")
self.write_header(topic.header, root)
topic_el = self._create_element(
root,
"Topic",
{
"Guid": topic.guid,
"TopicType": topic.topic_type,
"TopicStatus": topic.topic_status,
},
)
for reference_link in topic.reference_links:
self._create_element(topic_el, "ReferenceLink", text=reference_link)
text_map = {
"Title": topic.title,
"Priority": topic.priority,
"Index": topic.index,
}
for key, value in text_map.items():
if value:
self._create_element(topic_el, key, text=value)
for label in topic.labels:
self._create_element(topic_el, "Labels", text=label)
text_map = {
"CreationDate": topic.creation_date,
"CreationAuthor": topic.creation_author,
"ModifiedDate": topic.modified_date,
"ModifiedAuthor": topic.modified_author,
"DueDate": topic.due_date,
"AssignedTo": topic.assigned_to,
"Stage": topic.stage,
"Description": topic.description,
}
for key, value in text_map.items():
if value:
self._create_element(topic_el, key, text=value)
if topic.bim_snippet:
bim_snippet = self._create_element(
topic_el,
"BimSnippet",
{"SnippetType": topic.bim_snippet.snippet_type, "isExternal": topic.bim_snippet.is_external},
)
self._create_element(bim_snippet, "Reference", text=topic.bim_snippet.reference)
self._create_element(bim_snippet, "ReferenceSchema", text=topic.bim_snippet.reference_schema)
for reference in topic.document_references:
reference_el = self._create_element(
topic_el, "DocumentReference", {"Guid": reference.guid, "isExternal": reference.is_external}
)
self._create_element(reference_el, "ReferencedDocument", text=reference.referenced_document)
self._create_element(reference_el, "Description", text=reference.description)
for related_topic in topic.related_topics:
self._create_element(topic_el, "RelatedTopic", {"Guid": related_topic.guid})
self.write_comments(topic.comments, root)
self.write_viewpoints(topic.viewpoints, root, topic)
with open(os.path.join(self.filepath, topic.guid, "markup.bcf"), "wb") as f:
f.write(self.document.toprettyxml(encoding="utf-8"))
def write_header(self, header, root):
if not header or not header.files:
return
header_el = self._create_element(root, "Header")
for f in header.files:
file_el = self._create_element(
header_el,
"File",
{
"IfcProject": f.ifc_project,
"IfcSpatialStructureElement": f.ifc_spatial_structure_element,
"isExternal": f.is_external,
},
)
if f.filename:
self._create_element(file_el, "Filename", text=f.filename)
if f.date:
self._create_element(file_el, "Date", text=f.date)
if f.reference:
self._create_element(file_el, "Reference", text=f.reference)
def write_comments(self, comments, root):
for comment in comments.values():
comment_el = self._create_element(root, "Comment", {"Guid": comment.guid})
text_map = {
"Date": comment.date,
"Author": comment.author,
"Comment": comment.comment,
"ModifiedDate": comment.modified_date,
"ModifiedAuthor": comment.modified_author,
}
for key, value in text_map.items():
if value:
self._create_element(comment_el, key, text=value)
if comment.viewpoint:
self._create_element(comment_el, "Viewpoint", {"Guid": comment.viewpoint.guid})
def add_comment(self, topic, comment=None):
if comment is None:
comment = bcf.v2.data.Comment()
if not comment.guid:
comment.guid = str(uuid.uuid4())
if not comment.comment:
comment.comment = "'Free software' is a matter of liberty, not price. To understand the concept, you should think of 'free' as in 'free speech,' not as in 'free beer'."
topic.comments[comment.guid] = comment
self.edit_comment(comment, topic)
def edit_comment(self, comment, topic):
if not comment.date:
comment.date = datetime.utcnow().isoformat()
comment.author = self.author
else:
comment.modified_date = datetime.utcnow().isoformat()
comment.modified_author = self.author
self.edit_topic(topic)
def delete_comment(self, guid, topic):
if guid in topic.comments:
del topic.comments[guid]
self.edit_topic(topic)
def delete_topic(self, guid):
if guid in self.topics:
del self.topics[guid]
shutil.rmtree(os.path.join(self.filepath, guid))
def write_viewpoints(self, viewpoints, root, topic):
for viewpoint in viewpoints.values():
viewpoint_el = self._create_element(root, "Viewpoints", {"Guid": viewpoint.guid})
text_map = {"Viewpoint": viewpoint.viewpoint, "Snapshot": viewpoint.snapshot, "Index": viewpoint.index}
for key, value in text_map.items():
if value:
self._create_element(viewpoint_el, key, text=value)
self.write_viewpoint(viewpoint, topic)
def write_viewpoint(self, viewpoint, topic):
document = minidom.Document()
root = self._create_element(document, "VisualizationInfo", {"Guid": viewpoint.guid})
self.write_viewpoint_components(viewpoint, root)
self.write_viewpoint_orthogonal_camera(viewpoint, root)
self.write_viewpoint_perspective_camera(viewpoint, root)
self.write_viewpoint_lines(viewpoint, root)
self.write_viewpoint_clipping_planes(viewpoint, root)
self.write_viewpoint_bitmaps(viewpoint, root)
with open(os.path.join(self.filepath, topic.guid, viewpoint.viewpoint), "wb") as f:
f.write(document.toprettyxml(encoding="utf-8"))
def write_viewpoint_components(self, viewpoint, parent):
if not viewpoint.components:
return
components_el = self._create_element(parent, "Components")
if viewpoint.components.view_setup_hints:
view_setup_hints = self._create_element(
components_el,
"ViewSetupHints",
{
"SpacesVisible": viewpoint.components.view_setup_hints.spaces_visible,
"SpaceBoundariesVisible": viewpoint.components.view_setup_hints.space_boundaries_visible,
"OpeningsVisible": viewpoint.components.view_setup_hints.openings_visible,
},
)
if viewpoint.components.selection:
selection_el = self._create_element(components_el, "Selection")
for selection in viewpoint.components.selection:
self.write_component(selection, selection_el)
visibility = self._create_element(
components_el, "Visibility", {"DefaultVisibility": viewpoint.components.visibility.default_visibility}
)
if viewpoint.components.visibility.exceptions:
exceptions_el = self._create_element(visibility, "Exceptions")
for exception in viewpoint.components.visibility.exceptions:
self.write_component(exception, exceptions_el)
if viewpoint.components.coloring:
coloring_el = self._create_element(components_el, "Coloring")
for color in viewpoint.components.coloring:
color_el = self._create_element(coloring_el, "Color", {"Color": color.color})
for component in color.components:
self.write_component(component, color_el)
def write_viewpoint_orthogonal_camera(self, viewpoint, parent):
if not viewpoint.orthogonal_camera:
return
camera = viewpoint.orthogonal_camera
camera_el = self._create_element(parent, "OrthogonalCamera")
camera_view_point = self._create_element(camera_el, "CameraViewPoint")
self.write_vector(camera_view_point, camera.camera_view_point)
camera_direction = self._create_element(camera_el, "CameraDirection")
self.write_vector(camera_direction, camera.camera_direction)
camera_up_vector = self._create_element(camera_el, "CameraUpVector")
self.write_vector(camera_up_vector, camera.camera_up_vector)
self._create_element(camera_el, "ViewToWorldScale", text=camera.view_to_world_scale)
def write_viewpoint_perspective_camera(self, viewpoint, parent):
if not viewpoint.perspective_camera:
return
camera = viewpoint.perspective_camera
camera_el = self._create_element(parent, "PerspectiveCamera")
camera_view_point = self._create_element(camera_el, "CameraViewPoint")
self.write_vector(camera_view_point, camera.camera_view_point)
camera_direction = self._create_element(camera_el, "CameraDirection")
self.write_vector(camera_direction, camera.camera_direction)
camera_up_vector = self._create_element(camera_el, "CameraUpVector")
self.write_vector(camera_up_vector, camera.camera_up_vector)
self._create_element(camera_el, "FieldOfView", text=camera.field_of_view)
def write_viewpoint_lines(self, viewpoint, parent):
if not viewpoint.lines:
return
lines_el = self._create_element(parent, "Lines")
for line in viewpoint.lines:
line_el = self._create_element(lines_el, "Line")
start_point_el = self._create_element(line_el, "StartPoint")
self.write_vector(start_point_el, line.start_point)
end_point_el = self._create_element(line_el, "EndPoint")
self.write_vector(end_point_el, line.end_point)
def write_viewpoint_clipping_planes(self, viewpoint, parent):
if not viewpoint.clipping_planes:
return
planes_el = self._create_element(parent, "ClippingPlanes")
for plane in viewpoint.clipping_planes:
plane_el = self._create_element(planes_el, "ClippingPlane")
location_el = self._create_element(plane_el, "Location")
self.write_vector(location_el, plane.location)
direction_el = self._create_element(plane_el, "Direction")
self.write_vector(direction_el, plane.direction)
def write_viewpoint_bitmaps(self, viewpoint, parent):
if not viewpoint.bitmaps:
return
for bitmap in viewpoint.bitmaps:
bitmap_el = self._create_element(parent, "Bitmap")
text_map = {"Bitmap": bitmap.bitmap_format, "Reference": bitmap.reference}
for key, value in text_map.items():
self._create_element(bitmap_el, key, text=value)
location_el = self._create_element(bitmap_el, "Location")
self.write_vector(location_el, bitmap.location)
normal_el = self._create_element(bitmap_el, "Normal")
self.write_vector(normal_el, bitmap.normal)
up_el = self._create_element(bitmap_el, "Up")
self.write_vector(up_el, bitmap.up)
self._create_element(bitmap_el, "Height", text=bitmap.height)
def write_vector(self, parent, from_obj):
self._create_element(parent, "X", text=from_obj.x)
self._create_element(parent, "Y", text=from_obj.y)
self._create_element(parent, "Z", text=from_obj.z)
def write_component(self, data, parent):
component_el = self._create_element(parent, "Component", {"IfcGuid": data.ifc_guid})
text_map = {"OriginatingSystem": data.originating_system, "AuthoringToolId": data.authoring_tool_id}
for key, value in text_map.items():
if value:
self._create_element(component_el, key, text=value)
def add_viewpoint(self, topic, viewpoint=None):
if not viewpoint:
viewpoint = bcf.v2.data.Viewpoint()
if not viewpoint.guid:
viewpoint.guid = str(uuid.uuid4())
if not viewpoint.viewpoint:
viewpoint.viewpoint = f"{viewpoint.guid}.bcfv"
if viewpoint.snapshot:
topic_filepath = os.path.join(self.filepath, topic.guid)
filepath = os.path.join(topic_filepath, viewpoint.snapshot)
if not os.path.exists(filepath):
filename = viewpoint.guid + os.path.splitext(viewpoint.snapshot)[-1]
copyfile(viewpoint.snapshot, os.path.join(topic_filepath, filename))
viewpoint.snapshot = filename
topic.viewpoints[viewpoint.guid] = viewpoint
self.edit_topic(topic)
def delete_viewpoint(self, guid, topic):
if guid not in topic.viewpoints:
return
viewpoint = topic.viewpoints[guid]
if viewpoint.snapshot:
filepath = os.path.join(self.filepath, topic.guid, viewpoint.snapshot)
if os.path.exists(filepath):
os.remove(filepath)
if viewpoint.viewpoint:
filepath = os.path.join(self.filepath, topic.guid, viewpoint.viewpoint)
if os.path.exists(filepath):
os.remove(filepath)
for bitmap in viewpoint.bitmaps:
if not bitmap.reference:
continue
filepath = os.path.join(self.filepath, topic.guid, bitmap.reference)
if os.path.exists(filepath):
os.remove(filepath)
del topic.viewpoints[guid]
self.edit_topic(topic)
def delete_file(self, topic, index):
if not topic.header:
return
f = topic.header.files.pop(index)
filepath = os.path.join(self.filepath, topic.guid, f.reference)
if not f.is_external and os.path.exists(filepath):
os.remove(filepath)
self.edit_topic(topic)
def delete_bim_snippet(self, topic):
if not topic.bim_snippet:
return
if topic.bim_snippet.reference and not topic.bim_snippet.is_external:
filepath = os.path.join(self.filepath, topic.guid, topic.bim_snippet.reference)
if os.path.exists(filepath):
os.remove(filepath)
topic.bim_snippet = None
self.edit_topic(topic)
def delete_document_reference(self, topic, index):
document_reference = topic.document_references[index]
if document_reference.referenced_document and not document_reference.is_external:
filepath = os.path.join(self.filepath, topic.guid, document_reference.referenced_document)
if os.path.exists(filepath):
os.remove(filepath)
del topic.document_references[index]
self.edit_topic(topic)
def add_document_reference(self, topic, document_reference):
if os.path.exists(document_reference.referenced_document):
topic_filepath = os.path.join(self.filepath, topic.guid)
filename = os.path.basename(document_reference.referenced_document)
copyfile(document_reference.referenced_document, os.path.join(topic_filepath, filename))
document_reference.referenced_document = filename
document_reference.is_external = False
else:
document_reference.is_external = True
if not document_reference.guid:
document_reference.guid = str(uuid.uuid4())
topic.document_references.append(document_reference)
self.edit_topic(topic)
def add_bim_snippet(self, topic, bim_snippet):
if topic.bim_snippet:
self.delete_bim_snippet(topic)
if os.path.exists(bim_snippet.reference):
topic_filepath = os.path.join(self.filepath, topic.guid)
filename = os.path.basename(bim_snippet.reference)
copyfile(bim_snippet.reference, os.path.join(topic_filepath, filename))
bim_snippet.reference = filename
bim_snippet.is_external = False
else:
bim_snippet.is_external = True
topic.bim_snippet = bim_snippet
self.edit_topic(topic)
def add_file(self, topic, header_file):
if os.path.exists(header_file.reference):
topic_filepath = os.path.join(self.filepath, topic.guid)
header_file.filename = os.path.basename(header_file.reference)
copyfile(header_file.reference, os.path.join(topic_filepath, header_file.filename))
header_file.reference = header_file.filename
header_file.is_external = False
header_file.date = datetime.utcnow().isoformat()
if not topic.header:
topic.header = bcf.v2.data.Header()
topic.header.files.append(header_file)
self.edit_topic(topic)
def get_comments(self, guid):
comments = {}
data = self._read_xml(os.path.join(guid, "markup.bcf"), "markup.xsd")
if "Comment" not in data:
return comments
for item in data["Comment"]:
comment = bcf.v2.data.Comment()
mandatory_keys = {"guid": "@Guid", "date": "Date", "author": "Author", "comment": "Comment"}
for key, value in mandatory_keys.items():
setattr(comment, key, item[value])
optional_keys = {"modified_date": "ModifiedDate", "modified_author": "ModifiedAuthor"}
for key, value in optional_keys.items():
if value in item:
setattr(comment, key, item[value])
if "Viewpoint" in item:
viewpoint = bcf.v2.data.Viewpoint()
viewpoint.guid = item["Viewpoint"]["@Guid"]
comment.viewpoint = viewpoint
comments[comment.guid] = comment
self.topics[guid].comments = comments
return comments
def get_viewpoints(self, guid):
viewpoints = {}
data = self._read_xml(os.path.join(guid, "markup.bcf"), "markup.xsd")
if "Viewpoints" not in data:
return viewpoints
for item in data["Viewpoints"]:
viewpoint = self.get_viewpoint(item, guid)
viewpoints[viewpoint.guid] = viewpoint
self.topics[guid].viewpoints = viewpoints
return viewpoints
def get_viewpoint(self, data, topic_guid):
viewpoint = bcf.v2.data.Viewpoint()
viewpoint.guid = data["@Guid"]
optional_keys = {"viewpoint": "Viewpoint", "snapshot": "Snapshot", "index": "Index"}
for key, value in optional_keys.items():
if value in data:
setattr(viewpoint, key, data[value])
visinfo = self._read_xml(os.path.join(topic_guid, viewpoint.viewpoint), "visinfo.xsd")
viewpoint.components = self.get_viewpoint_components(visinfo)
viewpoint.orthogonal_camera = self.get_viewpoint_orthogonal_camera(visinfo)
viewpoint.perspective_camera = self.get_viewpoint_perspective_camera(visinfo)
viewpoint.lines = self.get_viewpoint_lines(visinfo)
viewpoint.clipping_planes = self.get_viewpoint_clipping_planes(visinfo)
viewpoint.bitmaps = self.get_viewpoint_bitmaps(visinfo)
return viewpoint
def get_viewpoint_components(self, visinfo):
if "Components" not in visinfo:
return None
components = bcf.v2.data.Components()
data = visinfo["Components"]
if "ViewSetupHints" in data:
view_setup_hints = bcf.v2.data.ViewSetupHints()
optional_keys = {
"spaces_visible": "@SpacesVisible",
"space_boundaries_visible": "@SpaceBoundariesVisible",
"openings_visible": "@OpeningsVisible",
}
for key, value in optional_keys.items():
if value in data["ViewSetupHints"]:
setattr(view_setup_hints, key, data["ViewSetupHints"][value])
components.view_setup_hints = view_setup_hints
if "Selection" in data and "Component" in data["Selection"]:
for item in data["Selection"]["Component"]:
components.selection.append(self.get_component(item))
if "Visibility" in data:
component_visibility = bcf.v2.data.ComponentVisibility()
if "@DefaultVisibility" in data["Visibility"]:
component_visibility.default_visibility = data["Visibility"]["@DefaultVisibility"]
if "Exceptions" in data["Visibility"] and "Component" in data["Visibility"]["Exceptions"]:
for item in data["Visibility"]["Exceptions"]["Component"]:
component_visibility.exceptions.append(self.get_component(item))
components.visibility = component_visibility
if "Coloring" in data and "Color" in data["Coloring"]:
for item in data["Coloring"]["Color"]:
color = bcf.v2.data.Color()
color.color = item["@Color"]
for item2 in item["Component"]:
color.components.append(self.get_component(item2))
components.coloring.append(color)
return components
def get_viewpoint_orthogonal_camera(self, visinfo):
if "OrthogonalCamera" not in visinfo:
return None
camera = bcf.v2.data.OrthogonalCamera()
data = visinfo["OrthogonalCamera"]
self.set_vector(camera.camera_view_point, data["CameraViewPoint"])
self.set_vector(camera.camera_direction, data["CameraDirection"])
self.set_vector(camera.camera_up_vector, data["CameraUpVector"])
camera.view_to_world_scale = data["ViewToWorldScale"]
return camera
def get_viewpoint_perspective_camera(self, visinfo):
if "PerspectiveCamera" not in visinfo:
return None
camera = bcf.v2.data.PerspectiveCamera()
data = visinfo["PerspectiveCamera"]
self.set_vector(camera.camera_view_point, data["CameraViewPoint"])
self.set_vector(camera.camera_direction, data["CameraDirection"])
self.set_vector(camera.camera_up_vector, data["CameraUpVector"])
camera.field_of_view = data["FieldOfView"]
return camera
def get_viewpoint_lines(self, visinfo):
if "Lines" not in visinfo:
return []
lines = []
for item in visinfo["Lines"]["Line"]:
line = bcf.v2.data.Line()
self.set_vector(line.start_point, item["StartPoint"])
self.set_vector(line.end_point, item["EndPoint"])
lines.append(line)
return lines
def get_viewpoint_clipping_planes(self, visinfo):
if "ClippingPlanes" not in visinfo:
return []
planes = []
for item in visinfo["ClippingPlanes"]["ClippingPlane"]:
plane = bcf.v2.data.ClippingPlane()
self.set_vector(plane.location, item["Location"])
self.set_vector(plane.direction, item["Direction"])
planes.append(plane)
return planes
def get_viewpoint_bitmaps(self, visinfo):
if "Bitmap" not in visinfo:
return []
bitmaps = []
for item in visinfo["Bitmap"]:
bitmap = bcf.v2.data.Bitmap()
bitmap.reference = item["Reference"]
bitmap.bitmap_format = item["Bitmap"].upper()
self.set_vector(bitmap.location, item["Location"])
self.set_vector(bitmap.normal, item["Normal"])
self.set_vector(bitmap.up, item["Up"])
bitmap.height = item["Height"]
bitmaps.append(bitmap)
return bitmaps
def set_vector(self, to_obj, from_xml):
to_obj.x = from_xml["X"]
to_obj.y = from_xml["Y"]
to_obj.z = from_xml["Z"]
def get_component(self, data):
component = bcf.v2.data.Component()
optional_keys = {
"originating_system": "OriginatingSystem",
"authoring_tool_id": "AuthoringToolId",
"ifc_guid": "@IfcGuid",
}
for key, value in optional_keys.items():
if value in data:
setattr(component, key, data[value])
return component
def close_project(self):
shutil.rmtree(self.filepath)
def _read_xml(self, filename, xsd):
schema = XMLSchema(os.path.join(cwd, "xsd", xsd))
filepath = os.path.join(self.filepath, filename)
(data, errors) = schema.to_dict(filepath, validation="lax")
for error in errors:
self.logger.error(error)
return data
def _create_element(self, parent, name, attributes={}, text=None):
element = self.document.createElement(name)
for key, value in attributes.items():
if isinstance(value, bool):
element.setAttribute(key, str(value).lower())
elif value:
element.setAttribute(key, value)
if text is not None:
text = self.document.createTextNode(str(text))
element.appendChild(text)
parent.appendChild(element)
return element
def __del__(self):
self.close_project()
+179
View File
@@ -0,0 +1,179 @@
class Project:
def __init__(self):
self.project_id = ""
self.name = ""
self.extension_schema = ""
class BimSnippet:
def __init__(self):
self.snippet_type = None
self.is_external = False
self.reference = None
self.reference_schema = None
class DocumentReference:
def __init__(self):
self.referenced_document = None
self.description = None
self.guid = None
self.is_external = False
class RelatedTopic:
def __init__(self):
self.guid = None
class HeaderFile:
def __init__(self):
self.filename = None
self.date = None
self.reference = None
self.ifc_project = None
self.ifc_spatial_structure_element = None
self.is_external = True
class Header:
def __init__(self):
self.files = []
class Topic:
def __init__(self):
self.reference_links = []
self.title = ""
self.priority = None
self.index = None # Deprecated, stored, but ignored
self.labels = []
self.creation_date = None
self.creation_author = None
self.modified_date = None
self.modified_author = None
self.due_date = None
self.assigned_to = None
self.stage = None
self.description = None
self.bim_snippet = None
self.document_references = []
self.related_topics = []
self.topic_status = None
self.topic_type = None
self.guid = None
self.header = None
self.comments = {}
self.viewpoints = {}
class Comment:
def __init__(self):
self.guid = None
self.date = None
self.author = None
self.comment = None
self.viewpoint = None
self.modified_date = None
self.modified_author = None
self.topic_guid = None # Part of BCF-API
class ViewSetupHints:
def __init__(self):
self.spaces_visible = False
self.space_boundaries_visible = False
self.openings_visible = False
class Component:
def __init__(self):
self.originating_system = None
self.authoring_tool_id = None
self.ifc_guid = None
class ComponentVisibility:
def __init__(self):
self.exceptions = []
self.default_visibility = False
class Color:
def __init__(self):
self.color = None
self.components = []
class Components:
def __init__(self):
self.view_setup_hints = None
self.selection = []
self.visibility = None
self.coloring = []
class Point:
def __init__(self):
self.x = 0
self.y = 0
self.z = 0
class Direction(Point):
pass
class OrthogonalCamera:
def __init__(self):
self.camera_view_point = Point()
self.camera_direction = Direction()
self.camera_up_vector = Direction()
self.view_to_world_scale = 1.0
class PerspectiveCamera:
def __init__(self):
self.camera_view_point = Point()
self.camera_direction = Direction()
self.camera_up_vector = Direction()
self.field_of_view = 60.0
class Line:
def __init__(self):
self.start_point = Point()
self.end_point = Point()
class ClippingPlane:
def __init__(self):
self.location = Point()
self.direction = Direction()
class Bitmap:
def __init__(self):
self.reference = "" # Only in BCF-XML
self.bitmap_data = None # Only in BCF-API
self.bitmap_format = "PNG" # Enum of png or jpg
self.location = Point()
self.normal = Direction()
self.up = Direction()
self.height = 1.0
class Viewpoint:
def __init__(self):
self.guid = None
self.viewpoint = None
self.snapshot = None
self.index = None
self.components = None # It's not a list, despite the plural name
self.orthogonal_camera = None
self.perspective_camera = None
self.lines = []
self.clipping_planes = []
self.bitmaps = []
+154
View File
@@ -0,0 +1,154 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Mit XMLSpy v2011 rel. 2 sp1 (http://www.altova.com) von Klaus Linhard (IABI e.V.) bearbeitet -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Markup">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" type="Header" minOccurs="0"/>
<xs:element name="Topic" type="Topic"/>
<xs:element name="Comment" type="Comment" minOccurs="0" maxOccurs="unbounded"/>
<!-- ISG Jira issue BCF-9. Add support for several viewpoints and snapshots per issue -->
<xs:element name="Viewpoints" type="ViewPoint" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Header">
<xs:sequence>
<xs:element name="File" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Filename" type="xs:string" minOccurs="0"/>
<xs:element name="Date" type="xs:dateTime" minOccurs="0"/>
<!-- Reference (URL) of the file -->
<xs:element name="Reference" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attributeGroup ref="FileAttributes"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- ISG Jira issue BCF-9. Add support for several viewpoints and snapshots per issue -->
<xs:complexType name="ViewPoint">
<xs:sequence>
<!-- viewpoint file (xml) -->
<xs:element name="Viewpoint" type="xs:string" minOccurs="0"/>
<!-- the snapshot png -->
<xs:element name="Snapshot" type="xs:string" minOccurs="0"/>
<!-- the viewpoint index (sort order) -->
<xs:element name="Index" type="xs:int" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Guid" type="Guid" use="required"/>
<!-- Guid of the viewpoint -->
</xs:complexType>
<!-- BimSnippet -->
<xs:complexType name="BimSnippet">
<xs:sequence>
<!--
Name of the file in the topic folder containing the snippet or a URL.
E.G.- Expresscode containing p.e Issue, Request
// Maybe some header infos ?? // IfcEntites // Geometry
-->
<!-- Reference (name) to the snippet file -->
<xs:element name="Reference" type="xs:string"/>
<xs:element name="ReferenceSchema" type="xs:string"/>
</xs:sequence>
<xs:attribute name="SnippetType" type="xs:string" use="required"/>
<xs:attribute name="isExternal" type="xs:boolean" default="false"/>
<!-- This flag is true when the reference is a URL pointing outside of the BCF file-->
</xs:complexType>
<xs:complexType name="Topic">
<xs:sequence>
<xs:element name="ReferenceLink" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="Title" type="xs:string"/>
<xs:element name="Priority" type="Priority" minOccurs="0"/>
<!-- ISG Jira issue BCF-8 Add a way save order the topics -->
<xs:element name="Index" type="xs:int" minOccurs="0"/>
<xs:element name="Labels" type="TopicLabel" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="CreationDate" type="xs:dateTime" minOccurs="1"/>
<xs:element name="CreationAuthor" type="UserIdType" minOccurs="1"/>
<xs:element name="ModifiedDate" type="xs:dateTime" minOccurs="0"/>
<xs:element name="ModifiedAuthor" type="UserIdType" minOccurs="0"/>
<xs:element name="DueDate" type="xs:dateTime" minOccurs="0"/>
<xs:element name="AssignedTo" type="UserIdType" minOccurs="0"/>
<xs:element name="Stage" type="Stage" minOccurs="0"/>
<xs:element name="Description" type="xs:string" minOccurs="0"/>
<xs:element name="BimSnippet" type="BimSnippet" minOccurs="0"/>
<!-- Name of the file in the topic folder or url -->
<xs:element name="DocumentReference" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<!-- Name of the file in the topic folder or url -->
<xs:element name="ReferencedDocument" type="xs:string" minOccurs="0"/>
<!-- Human readable name of the document -->
<xs:element name="Description" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attributeGroup ref="DocumentReference"/>
</xs:complexType>
</xs:element>
<xs:element name="RelatedTopic" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="Guid" type="Guid" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Guid" type="Guid" use="required"/>
<xs:attribute name="TopicType" type="TopicType"/>
<xs:attribute name="TopicStatus" type="TopicStatus"/>
</xs:complexType>
<!-- Reference to a document inside of the topic folder or a url pointing to the web -->
<xs:attributeGroup name="DocumentReference">
<!-- Guid of the DocumentReference -->
<xs:attribute name="Guid" type="Guid"/>
<!-- A flag that is true when the ReferencedDocument points outside of the BCF file (a URL) -->
<xs:attribute name="isExternal" type="xs:boolean" default="false"/>
</xs:attributeGroup>
<xs:complexType name="Comment">
<xs:sequence>
<xs:element name="Date" type="xs:dateTime"/>
<xs:element name="Author" type="UserIdType"/>
<xs:element name="Comment" type="xs:string"/>
<xs:element name="Viewpoint" minOccurs="0">
<xs:complexType>
<xs:attribute name="Guid" type="Guid" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="ModifiedDate" type="xs:dateTime" minOccurs="0"/>
<xs:element name="ModifiedAuthor" type="UserIdType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Guid" type="Guid" use="required"/>
</xs:complexType>
<xs:simpleType name="TopicStatus">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="TopicType">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="TopicLabel">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="Priority">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="UserIdType">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="Stage">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="Guid">
<xs:restriction base="xs:string">
<xs:pattern value="[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="IfcGuid">
<xs:restriction base="xs:string">
<xs:length value="22"/>
<xs:pattern value="[0-9,A-Z,a-z,_$]*"/>
</xs:restriction>
</xs:simpleType>
<xs:attributeGroup name="FileAttributes">
<xs:attribute name="IfcProject" type="IfcGuid"/>
<xs:attribute name="IfcSpatialStructureElement" type="IfcGuid"/>
<xs:attribute name="isExternal" type="xs:boolean" default="true"/>
</xs:attributeGroup>
</xs:schema>
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Mit XMLSpy v2011 rel. 2 sp1 (http://www.altova.com) von Klaus Linhard (IABI e.V.) bearbeitet -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ProjectExtension">
<xs:complexType>
<xs:sequence>
<xs:element name="Project" type="Project" minOccurs="0"/>
<xs:element name="ExtensionSchema" type="xs:anyURI"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Project">
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="ProjectId" type="xs:string" use="required"/>
</xs:complexType>
</xs:schema>
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Mit XMLSpy v2011 rel. 3 (http://www.altova.com) von Klaus Linhard (IABI e.V.) bearbeitet -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Version">
<xs:complexType>
<xs:sequence>
<xs:element name="DetailedVersion" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="VersionId" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:schema>
+191
View File
@@ -0,0 +1,191 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Mit XMLSpy v2011 rel. 2 sp1 (http://www.altova.com) von Klaus Linhard (IABI e.V.) bearbeitet -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="VisualizationInfo">
<xs:annotation>
<xs:documentation>VisualizationInfo documentation</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Components" type="Components" minOccurs="0"/>
<xs:element name="OrthogonalCamera" type="OrthogonalCamera" minOccurs="0"/>
<xs:element name="PerspectiveCamera" type="PerspectiveCamera" minOccurs="0"/>
<xs:element name="Lines" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Line" type="Line" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ClippingPlanes" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="ClippingPlane" type="ClippingPlane" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- ISG Jira issue BCF-17: Add support for text in the viewpoints -->
<xs:element name="Bitmap" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Bitmap" type="BitmapFormat"/>
<!-- Name of the bitmap file in the topic folder -->
<xs:element name="Reference" type="xs:string"/>
<!-- Location of the center of the bitmap -->
<xs:element name="Location" type="Point"/>
<!-- Normal of the bitmap -->
<xs:element name="Normal" type="Direction"/>
<!-- Upvector of the bitmap -->
<xs:element name="Up" type="Direction"/>
<!-- Height of the bitmap -->
<xs:element name="Height" type="xs:double"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<!-- Guid of the viewpoint -->
<xs:attribute name="Guid" type="Guid" use="required"/>
</xs:complexType>
</xs:element>
<xs:complexType name="OrthogonalCamera">
<xs:sequence>
<xs:element name="CameraViewPoint" type="Point"/>
<xs:element name="CameraDirection" type="Direction"/>
<xs:element name="CameraUpVector" type="Direction"/>
<xs:element name="ViewToWorldScale" type="xs:double">
<xs:annotation>
<xs:documentation>view's visible size in meters</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PerspectiveCamera">
<xs:sequence>
<xs:element name="CameraViewPoint" type="Point"/>
<xs:element name="CameraDirection" type="Direction"/>
<xs:element name="CameraUpVector" type="Direction"/>
<xs:element name="FieldOfView" type="FieldOfView">
<xs:annotation>
<xs:documentation>
It is currently limited to a value between 45 and 60 degrees.
This limitation will be dropped in the next release and viewers
should be expect values outside this range in current implementations.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Point">
<xs:sequence>
<xs:element name="X" type="xs:double"/>
<xs:element name="Y" type="xs:double"/>
<xs:element name="Z" type="xs:double"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Direction">
<xs:sequence>
<xs:element name="X" type="xs:double"/>
<xs:element name="Y" type="xs:double"/>
<xs:element name="Z" type="xs:double"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="FieldOfView">
<xs:restriction base="xs:double">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="170"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Components">
<xs:sequence>
<xs:element name="ViewSetupHints" type="ViewSetupHints" minOccurs="0" />
<!-- Components with relevance to the viewpoint. They should be displayed highlighted or selected in a viewer -->
<xs:element name="Selection" type="ComponentSelection" minOccurs="0" />
<xs:element name="Visibility" type="ComponentVisibility" minOccurs="1" />
<xs:element name="Coloring" type="ComponentColoring" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ViewSetupHints">
<xs:attribute name="SpacesVisible" type="xs:boolean"/>
<xs:attribute name="SpaceBoundariesVisible" type="xs:boolean"/>
<xs:attribute name="OpeningsVisible" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="ComponentSelection">
<xs:sequence>
<xs:element name="Component" type="Component" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ComponentVisibility">
<xs:sequence>
<xs:element name="Exceptions" minOccurs="0">
<!-- List Components that are different than the DefaultVisibility. E.g. if DefaultVisibility = false then list
Components that should be visible -->
<xs:complexType>
<xs:sequence>
<xs:element name="Component" type="Component" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="DefaultVisibility" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="ComponentColoring">
<xs:sequence>
<xs:element name="Color" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Component" type="Component" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="Color"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Component">
<xs:sequence>
<xs:element name="OriginatingSystem" type="xs:string" minOccurs="0"/>
<xs:element name="AuthoringToolId" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute ref="IfcGuid"/>
<!-- ISG Jira Issue BCF-14 -->
</xs:complexType>
<xs:attribute name="Color">
<xs:simpleType>
<xs:restriction base="xs:normalizedString">
<!-- Should either match 3 or 4 hex bytes , e.g. "FF00FF" or "FF00FF99" -->
<xs:pattern value="[0-9,a-f,A-F]{6}([0-9,a-f,A-F]{2})?"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="IfcGuid">
<xs:simpleType>
<xs:restriction base="xs:normalizedString">
<xs:length value="22"/>
<xs:pattern value="[0-9,A-Z,a-z,_$]*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:complexType name="Line">
<xs:sequence>
<xs:element name="StartPoint" type="Point"/>
<xs:element name="EndPoint" type="Point"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ClippingPlane">
<xs:sequence>
<xs:element name="Location" type="Point"/>
<xs:element name="Direction" type="Direction"/>
</xs:sequence>
</xs:complexType>
<!-- ISG Jira issue BCF-17: Add support for text in the viewpoints -->
<xs:simpleType name="BitmapFormat">
<xs:restriction base="xs:string">
<xs:enumeration value="PNG"/>
<xs:enumeration value="JPG"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Guid">
<xs:restriction base="xs:string">
<xs:pattern value="[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
View File
+827
View File
@@ -0,0 +1,827 @@
import os
import uuid
import shutil
import zipfile
import logging
import tempfile
import bcf.v3.data
from datetime import datetime
from xml.dom import minidom
from xmlschema import XMLSchema
from contextlib import contextmanager
from shutil import copyfile
cwd = os.path.dirname(os.path.realpath(__file__))
@contextmanager
def cd(newdir):
prevdir = os.getcwd()
os.chdir(os.path.expanduser(newdir))
try:
yield
finally:
os.chdir(prevdir)
class BcfXml:
def __init__(self):
self.filepath = None
self.logger = logging.getLogger("bcfxml")
self.author = "john@doe.com"
self.project = bcf.v3.data.Project()
self.version = "3.0"
self.topics = {}
def new_project(self):
self.project.project_id = str(uuid.uuid4())
self.project.name = "New Project"
self.topics = {}
if self.filepath:
self.close_project()
self.filepath = tempfile.mkdtemp()
self.edit_project()
self.edit_version()
def get_project(self, filepath=None):
if os.path.isfile(os.path.join(self.filepath, "project.bcfp")):
data = self._read_xml("project.bcfp", "project.xsd")
self.project.project_id = data["Project"]["@ProjectId"]
self.project.name = data["Project"].get("Name")
return self.project
def edit_project(self):
self.document = minidom.Document()
root = self._create_element(self.document, "ProjectInfo")
project = self._create_element(root, "Project", {"ProjectId": self.project.project_id})
if self.project.name:
self._create_element(project, "Name", text=self.project.name)
with open(os.path.join(self.filepath, "project.bcfp"), "wb") as f:
f.write(self.document.toprettyxml(encoding="utf-8"))
def save_project(self, filepath):
with cd(self.filepath):
zip_file = zipfile.ZipFile(filepath, "w", zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk("./"):
for file in files:
zip_file.write(os.path.join(root, file))
zip_file.close()
def get_version(self):
data = self._read_xml("bcf.version", "version.xsd")
self.version = data["@VersionId"]
return self.version
def edit_version(self):
self.document = minidom.Document()
root = self._create_element(self.document, "Version", {"VersionId": self.version})
with open(os.path.join(self.filepath, "bcf.version"), "wb") as f:
f.write(self.document.toprettyxml(encoding="utf-8"))
def get_topics(self):
self.topics = {}
topics = []
subdirs = []
for (dirpath, dirnames, filenames) in os.walk(self.filepath):
subdirs = dirnames
break
for subdir in subdirs:
try:
uuid.UUID(subdir)
except ValueError:
continue
if not os.path.exists(os.path.join(self.filepath, subdir, "markup.bcf")):
continue
self.topics[subdir] = self.get_topic(subdir)
return self.topics
def get_header(self, guid):
data = self._read_xml(os.path.join(guid, "markup.bcf"), "markup.xsd")
if "Header" not in data:
return
header = bcf.v3.data.Header()
if data["Header"].get("Files"):
for item in data["Header"]["Files"].get("File", []):
header_file = bcf.v3.data.HeaderFile()
optional_keys = {
"filename": "Filename",
"date": "Date",
"reference": "Reference",
"ifc_project": "@IfcProject",
"ifc_spatial_structure_element": "@IfcSpatialStructureElement",
"is_external": "@IsExternal",
}
for key, value in optional_keys.items():
if value in item:
setattr(header_file, key, item[value])
header.files.append(header_file)
self.topics[guid].header = header
return header
def get_topic(self, guid):
if guid in self.topics:
return self.topics[guid]
data = self._read_xml(os.path.join(guid, "markup.bcf"), "markup.xsd")
topic = bcf.v3.data.Topic()
self.topics[guid] = topic
mandatory_keys = {
"guid": "@Guid",
"title": "Title",
"creation_date": "CreationDate",
"creation_author": "CreationAuthor",
"topic_status": "@TopicStatus",
"topic_type": "@TopicType",
}
for key, value in mandatory_keys.items():
setattr(topic, key, data["Topic"][value])
optional_keys = {
"priority": "Priority",
"index": "Index",
"modified_date": "ModifiedDate",
"modified_author": "ModifiedAuthor",
"due_date": "DueDate",
"assigned_to": "AssignedTo",
"stage": "Stage",
"description": "Description",
"server_assigned_id": "@ServerAssignedId",
}
for key, value in optional_keys.items():
if value in data["Topic"]:
setattr(topic, key, data["Topic"][value])
if "ReferenceLinks" in data["Topic"]:
topic.reference_links.extend(data["Topic"]["ReferenceLinks"].get("ReferenceLink", []))
if "Labels" in data["Topic"]:
topic.labels.extend(data["Topic"]["Labels"].get("Label", []))
if "BimSnippet" in data["Topic"]:
bim_snippet = bcf.v3.data.BimSnippet()
keys = {
"snippet_type": "@SnippetType",
"is_external": "@IsExternal",
"reference": "Reference",
"reference_schema": "ReferenceSchema",
}
for key, value in keys.items():
if value in data["Topic"]["BimSnippet"]:
setattr(bim_snippet, key, data["Topic"]["BimSnippet"][value])
topic.bim_snippet = bim_snippet
if data["Topic"].get("DocumentReferences"):
for item in data["Topic"]["DocumentReferences"].get("DocumentReference", []):
document_reference = bcf.v3.data.DocumentReference()
keys = {
"document_guid": "DocumentGuid",
"url": "Url",
"guid": "@Guid",
"description": "Description",
}
for key, value in keys.items():
if value in item:
setattr(document_reference, key, item[value])
topic.document_references.append(document_reference)
if data["Topic"].get("RelatedTopics"):
for item in data["Topic"]["RelatedTopics"].get("RelatedTopic", []):
related_topic = bcf.v3.data.RelatedTopic()
related_topic.guid = item["@Guid"]
topic.related_topics.append(related_topic)
return topic
def add_topic(self, topic=None):
if topic is None:
topic = bcf.v3.data.Topic()
if not topic.guid:
topic.guid = str(uuid.uuid4())
if not topic.title:
topic.title = "New Topic"
os.mkdir(os.path.join(self.filepath, topic.guid))
self.edit_topic(topic)
return topic
def edit_topic(self, topic):
if not topic.creation_date:
topic.creation_date = datetime.utcnow().isoformat()
topic.creation_author = self.author
else:
topic.modified_date = datetime.utcnow().isoformat()
topic.modified_author = self.author
self.document = minidom.Document()
root = self._create_element(self.document, "Markup")
if topic.header:
self.write_header(topic.header, root)
topic_el = self._create_element(
root,
"Topic",
{
"Guid": topic.guid,
"ServerAssignedId": topic.server_assigned_id,
"TopicType": topic.topic_type,
"TopicStatus": topic.topic_status,
},
)
if topic.reference_links:
reference_Links_el = self._create_element(topic_el, "ReferenceLinks")
for reference_link in topic.reference_links:
self._create_element(reference_Links_el, "ReferenceLink", text=reference_link)
text_map = {
"Title": topic.title,
"Priority": topic.priority,
"Index": topic.index,
}
for key, value in text_map.items():
if value:
self._create_element(topic_el, key, text=value)
if topic.labels:
label_el = self._create_element(topic_el, "Labels")
for label in topic.labels:
self._create_element(label_el, "Label", text=label)
text_map = {
"CreationDate": topic.creation_date,
"CreationAuthor": topic.creation_author,
"ModifiedDate": topic.modified_date,
"ModifiedAuthor": topic.modified_author,
"DueDate": topic.due_date,
"AssignedTo": topic.assigned_to,
"Stage": topic.stage,
"Description": topic.description,
}
for key, value in text_map.items():
if value:
self._create_element(topic_el, key, text=value)
if topic.bim_snippet:
bim_snippet = self._create_element(
topic_el,
"BimSnippet",
{
"SnippetType": topic.bim_snippet.snippet_type,
"IsExternal": topic.bim_snippet.is_external,
},
)
self._create_element(bim_snippet, "Reference", text=topic.bim_snippet.reference)
self._create_element(
bim_snippet,
"ReferenceSchema",
text=topic.bim_snippet.reference_schema,
)
if topic.document_references:
reference_el = self._create_element(topic_el, "DocumentReferences")
self.write_document_references(topic.document_references, reference_el)
if topic.related_topics:
related_topic_el = self._create_element(topic_el, "RelatedTopics")
for related_topic in topic.related_topics:
self._create_element(related_topic_el, "RelatedTopic", {"Guid": related_topic.guid})
if topic.comments:
comment_el = self._create_element(topic_el, "Comments")
self.write_comments(topic.comments, comment_el)
if topic.viewpoints:
viewpoint_el = self._create_element(topic_el, "Viewpoints")
self.write_viewpoints(topic.viewpoints, viewpoint_el, topic)
with open(os.path.join(self.filepath, topic.guid, "markup.bcf"), "wb") as f:
f.write(self.document.toprettyxml(encoding="utf-8"))
def write_document_references(self, references, root):
for reference in references:
document_reference_el = self._create_element(root, "DocumentReference", {"Guid": reference.guid})
if reference.document_guid:
self._create_element(document_reference_el, "DocumentGuid", text=reference.document_guid)
elif reference.url:
self._create_element(document_reference_el, "Url", text=reference.url)
if reference.description:
self._create_element(document_reference_el, "Description", text=reference.description)
def write_header(self, header, root):
if not header or not header.files:
return
header_el = self._create_element(root, "Header")
files_el = self._create_element(header_el, "Files")
for f in header.files:
file_el = self._create_element(
files_el,
"File",
{
"IfcProject": f.ifc_project,
"IfcSpatialStructureElement": f.ifc_spatial_structure_element,
"IsExternal": f.is_external,
},
)
if f.filename:
self._create_element(file_el, "Filename", text=f.filename)
if f.date:
self._create_element(file_el, "Date", text=f.date)
if f.reference:
self._create_element(file_el, "Reference", text=f.reference)
def write_comments(self, comments, root):
for comment in comments.values():
comment_el = self._create_element(root, "Comment", {"Guid": comment.guid})
text_map = {
"Date": comment.date,
"Author": comment.author,
"Comment": comment.comment,
"ModifiedDate": comment.modified_date,
"ModifiedAuthor": comment.modified_author,
}
for key, value in text_map.items():
if value:
self._create_element(comment_el, key, text=value)
if comment.viewpoint:
self._create_element(comment_el, "Viewpoint", {"Guid": comment.viewpoint.guid})
def add_comment(self, topic, comment=None):
if comment is None:
comment = bcf.v3.data.Comment()
if not comment.guid:
comment.guid = str(uuid.uuid4())
if not comment.comment:
comment.comment = "'Free software' is a matter of liberty, not price. To understand the concept, you should think of 'free' as in 'free speech,' not as in 'free beer'."
topic.comments[comment.guid] = comment
self.edit_comment(comment, topic)
def edit_comment(self, comment, topic):
if not comment.date:
comment.date = datetime.utcnow().isoformat()
comment.author = self.author
else:
comment.modified_date = datetime.utcnow().isoformat()
comment.modified_author = self.author
self.edit_topic(topic)
def delete_comment(self, guid, topic):
if guid in topic.comments:
del topic.comments[guid]
self.edit_topic(topic)
def delete_topic(self, guid):
if guid in self.topics:
del self.topics[guid]
shutil.rmtree(os.path.join(self.filepath, guid))
def write_viewpoints(self, viewpoints, root, topic):
for viewpoint in viewpoints.values():
viewpoint_el = self._create_element(root, "ViewPoint", {"Guid": viewpoint.guid})
text_map = {
"Viewpoint": viewpoint.viewpoint,
"Snapshot": viewpoint.snapshot,
"Index": viewpoint.index,
}
for key, value in text_map.items():
if value:
self._create_element(viewpoint_el, key, text=value)
self.write_viewpoint(viewpoint, topic)
def write_viewpoint(self, viewpoint, topic):
document = minidom.Document()
root = self._create_element(document, "VisualizationInfo", {"Guid": viewpoint.guid})
self.write_viewpoint_components(viewpoint, root)
self.write_viewpoint_orthogonal_camera(viewpoint, root)
self.write_viewpoint_perspective_camera(viewpoint, root)
self.write_viewpoint_lines(viewpoint, root)
self.write_viewpoint_clipping_planes(viewpoint, root)
self.write_viewpoint_bitmaps(viewpoint, root)
with open(os.path.join(self.filepath, topic.guid, viewpoint.viewpoint), "wb") as f:
f.write(document.toprettyxml(encoding="utf-8"))
def write_viewpoint_components(self, viewpoint, parent):
if not viewpoint.components:
return
components_el = self._create_element(parent, "Components")
if viewpoint.components.selection:
selection_el = self._create_element(components_el, "Selection")
for selection in viewpoint.components.selection:
self.write_component(selection, selection_el)
if viewpoint.components.visibility:
visibility = self._create_element(
components_el,
"Visibility",
{"DefaultVisibility": viewpoint.components.visibility.default_visibility},
)
if viewpoint.components.visibility.view_setup_hints:
view_setup_hints = self._create_element(
visibility,
"ViewSetupHints",
{
"SpacesVisible": viewpoint.components.visibility.view_setup_hints.spaces_visible,
"SpaceBoundariesVisible": viewpoint.components.visibility.view_setup_hints.space_boundaries_visible,
"OpeningsVisible": viewpoint.components.visibility.view_setup_hints.openings_visible,
},
)
if viewpoint.components.visibility.exceptions:
exceptions_el = self._create_element(visibility, "Exceptions")
for exception in viewpoint.components.visibility.exceptions:
self.write_component(exception, exceptions_el)
if viewpoint.components.coloring:
coloring_el = self._create_element(components_el, "Coloring")
for color in viewpoint.components.coloring:
color_el = self._create_element(coloring_el, "Color", {"Color": color.color})
component_el = self._create_element(color_el, "Components")
for component in color.components:
self.write_component(component, component_el)
def write_viewpoint_orthogonal_camera(self, viewpoint, parent):
if not viewpoint.orthogonal_camera:
return
camera = viewpoint.orthogonal_camera
camera_el = self._create_element(parent, "OrthogonalCamera")
camera_view_point = self._create_element(camera_el, "CameraViewPoint")
self.write_vector(camera_view_point, camera.camera_view_point)
camera_direction = self._create_element(camera_el, "CameraDirection")
self.write_vector(camera_direction, camera.camera_direction)
camera_up_vector = self._create_element(camera_el, "CameraUpVector")
self.write_vector(camera_up_vector, camera.camera_up_vector)
self._create_element(camera_el, "ViewToWorldScale", text=camera.view_to_world_scale)
self._create_element(camera_el, "AspectRatio", text=camera.aspect_ratio)
def write_viewpoint_perspective_camera(self, viewpoint, parent):
if not viewpoint.perspective_camera:
return
camera = viewpoint.perspective_camera
camera_el = self._create_element(parent, "PerspectiveCamera")
camera_view_point = self._create_element(camera_el, "CameraViewPoint")
self.write_vector(camera_view_point, camera.camera_view_point)
camera_direction = self._create_element(camera_el, "CameraDirection")
self.write_vector(camera_direction, camera.camera_direction)
camera_up_vector = self._create_element(camera_el, "CameraUpVector")
self.write_vector(camera_up_vector, camera.camera_up_vector)
self._create_element(camera_el, "FieldOfView", text=camera.field_of_view)
self._create_element(camera_el, "AspectRatio", text=camera.aspect_ratio)
def write_viewpoint_lines(self, viewpoint, parent):
if not viewpoint.lines:
return
lines_el = self._create_element(parent, "Lines")
for line in viewpoint.lines:
line_el = self._create_element(lines_el, "Line")
start_point_el = self._create_element(line_el, "StartPoint")
self.write_vector(start_point_el, line.start_point)
end_point_el = self._create_element(line_el, "EndPoint")
self.write_vector(end_point_el, line.end_point)
def write_viewpoint_clipping_planes(self, viewpoint, parent):
if not viewpoint.clipping_planes:
return
planes_el = self._create_element(parent, "ClippingPlanes")
for plane in viewpoint.clipping_planes:
plane_el = self._create_element(planes_el, "ClippingPlane")
location_el = self._create_element(plane_el, "Location")
self.write_vector(location_el, plane.location)
direction_el = self._create_element(plane_el, "Direction")
self.write_vector(direction_el, plane.direction)
def write_viewpoint_bitmaps(self, viewpoint, parent):
if not viewpoint.bitmaps:
return
bitmaps_el = self._create_element(parent, "Bitmaps")
for bitmap in viewpoint.bitmaps:
bitmap_el = self._create_element(bitmaps_el, "Bitmap")
text_map = {"Format": bitmap.bitmap_format, "Reference": bitmap.reference}
for key, value in text_map.items():
self._create_element(bitmap_el, key, text=value)
location_el = self._create_element(bitmap_el, "Location")
self.write_vector(location_el, bitmap.location)
normal_el = self._create_element(bitmap_el, "Normal")
self.write_vector(normal_el, bitmap.normal)
up_el = self._create_element(bitmap_el, "Up")
self.write_vector(up_el, bitmap.up)
self._create_element(bitmap_el, "Height", text=bitmap.height)
def write_vector(self, parent, from_obj):
self._create_element(parent, "X", text=from_obj.x)
self._create_element(parent, "Y", text=from_obj.y)
self._create_element(parent, "Z", text=from_obj.z)
def write_component(self, data, parent):
component_el = self._create_element(parent, "Component", {"IfcGuid": data.ifc_guid})
text_map = {
"OriginatingSystem": data.originating_system,
"AuthoringToolId": data.authoring_tool_id,
}
for key, value in text_map.items():
if value:
self._create_element(component_el, key, text=value)
def add_viewpoint(self, topic, viewpoint=None):
if not viewpoint:
viewpoint = bcf.v3.data.Viewpoint()
if not viewpoint.guid:
viewpoint.guid = str(uuid.uuid4())
if not viewpoint.viewpoint:
viewpoint.viewpoint = f"{viewpoint.guid}.bcfv"
if viewpoint.snapshot:
topic_filepath = os.path.join(self.filepath, topic.guid)
filepath = os.path.join(topic_filepath, viewpoint.snapshot)
if not os.path.exists(filepath):
filename = viewpoint.guid + os.path.splitext(viewpoint.snapshot)[-1]
copyfile(viewpoint.snapshot, os.path.join(topic_filepath, filename))
viewpoint.snapshot = filename
topic.viewpoints[viewpoint.guid] = viewpoint
self.edit_topic(topic)
def delete_viewpoint(self, guid, topic):
if guid not in topic.viewpoints:
return
viewpoint = topic.viewpoints[guid]
if viewpoint.snapshot:
filepath = os.path.join(self.filepath, topic.guid, viewpoint.snapshot)
if os.path.exists(filepath):
os.remove(filepath)
if viewpoint.viewpoint:
filepath = os.path.join(self.filepath, topic.guid, viewpoint.viewpoint)
if os.path.exists(filepath):
os.remove(filepath)
for bitmap in viewpoint.bitmaps:
if not bitmap.reference:
continue
filepath = os.path.join(self.filepath, topic.guid, bitmap.reference)
if os.path.exists(filepath):
os.remove(filepath)
del topic.viewpoints[guid]
self.edit_topic(topic)
def delete_file(self, topic, index):
if not topic.header:
return
f = topic.header.files.pop(index)
filepath = os.path.join(self.filepath, topic.guid, f.reference)
if not f.is_external and os.path.exists(filepath):
os.remove(filepath)
self.edit_topic(topic)
def delete_bim_snippet(self, topic):
if not topic.bim_snippet:
return
if topic.bim_snippet.reference and not topic.bim_snippet.is_external:
filepath = os.path.join(self.filepath, topic.guid, topic.bim_snippet.reference)
if os.path.exists(filepath):
os.remove(filepath)
topic.bim_snippet = None
self.edit_topic(topic)
def delete_document_reference(self, topic, index):
document_reference = topic.document_references[index]
if document_reference.referenced_document and not document_reference.is_external:
filepath = os.path.join(self.filepath, topic.guid, document_reference.referenced_document)
if os.path.exists(filepath):
os.remove(filepath)
del topic.document_references[index]
self.edit_topic(topic)
def add_document_reference(self, topic, document_reference):
if os.path.exists(document_reference.referenced_document):
topic_filepath = os.path.join(self.filepath, topic.guid)
filename = os.path.basename(document_reference.referenced_document)
copyfile(
document_reference.referenced_document,
os.path.join(topic_filepath, filename),
)
document_reference.referenced_document = filename
document_reference.is_external = False
else:
document_reference.is_external = True
if not document_reference.guid:
document_reference.guid = str(uuid.uuid4())
topic.document_references.append(document_reference)
self.edit_topic(topic)
def add_bim_snippet(self, topic, bim_snippet):
if topic.bim_snippet:
self.delete_bim_snippet(topic)
if os.path.exists(bim_snippet.reference):
topic_filepath = os.path.join(self.filepath, topic.guid)
filename = os.path.basename(bim_snippet.reference)
copyfile(bim_snippet.reference, os.path.join(topic_filepath, filename))
bim_snippet.reference = filename
bim_snippet.is_external = False
else:
bim_snippet.is_external = True
topic.bim_snippet = bim_snippet
self.edit_topic(topic)
def add_file(self, topic, header_file):
if os.path.exists(header_file.reference):
topic_filepath = os.path.join(self.filepath, topic.guid)
header_file.filename = os.path.basename(header_file.reference)
copyfile(
header_file.reference,
os.path.join(topic_filepath, header_file.filename),
)
header_file.reference = header_file.filename
header_file.is_external = False
header_file.date = datetime.utcnow().isoformat()
if not topic.header:
topic.header = bcf.v3.data.Header()
topic.header.files.append(header_file)
self.edit_topic(topic)
def get_comments(self, guid):
comments = {}
if "Comments" not in data["Topics"]:
return comments
data = self._read_xml(os.path.join(guid, "markup.bcf"), "markup.xsd")
for item in data["Topic"]["Comments"].get("Comment", []):
comment = bcf.v3.data.Comment()
mandatory_keys = {
"guid": "@Guid",
"date": "Date",
"author": "Author",
}
for key, value in mandatory_keys.items():
setattr(comment, key, item[value])
optional_keys = {
"comment": "Comment",
"modified_date": "ModifiedDate",
"modified_author": "ModifiedAuthor",
}
for key, value in optional_keys.items():
if value in item:
setattr(comment, key, item[value])
if "Viewpoint" in item:
viewpoint = bcf.v3.data.Viewpoint()
viewpoint.guid = item["Viewpoint"]["@Guid"]
comment.viewpoint = viewpoint
comments[comment.guid] = comment
self.topics[guid].comments = comments
return comments
def get_viewpoints(self, guid):
viewpoints = {}
if "Viewpoints" not in data["Topic"]:
return viewpoints
data = self._read_xml(os.path.join(guid, "markup.bcf"), "markup.xsd")
for item in data["Topic"]["Viewpoints"]:
viewpoint = self.get_viewpoint(item, guid)
viewpoints[viewpoint.guid] = viewpoint
self.topics[guid].viewpoints = viewpoints
return viewpoints
def get_viewpoint(self, data, topic_guid):
viewpoint = bcf.v3.data.Viewpoint()
viewpoint.guid = data["@Guid"]
optional_keys = {
"viewpoint": "Viewpoint",
"snapshot": "Snapshot",
"index": "Index",
}
for key, value in optional_keys.items():
if value in data:
setattr(viewpoint, key, data[value])
visinfo = self._read_xml(os.path.join(topic_guid, viewpoint.viewpoint), "visinfo.xsd")
viewpoint.components = self.get_viewpoint_components(visinfo)
viewpoint.orthogonal_camera = self.get_viewpoint_orthogonal_camera(visinfo)
viewpoint.perspective_camera = self.get_viewpoint_perspective_camera(visinfo)
viewpoint.lines = self.get_viewpoint_lines(visinfo)
viewpoint.clipping_planes = self.get_viewpoint_clipping_planes(visinfo)
viewpoint.bitmaps = self.get_viewpoint_bitmaps(visinfo)
return viewpoint
def get_viewpoint_components(self, visinfo):
if "Components" not in visinfo:
return None
components = bcf.v3.data.Components()
data = visinfo["Components"]
if "Selection" in data and "Component" in data["Selection"]:
for item in data["Selection"].get("Component", []):
components.selection.append(self.get_component(item))
if "Visibility" in data:
component_visibility = bcf.v3.data.ComponentVisibility()
if "@DefaultVisibility" in data["Visibility"]:
component_visibility.default_visibility = data["Visibility"]["@DefaultVisibility"]
if "Exceptions" in data["Visibility"] and "Component" in data["Visibility"]["Exceptions"]:
for item in data["Visibility"]["Exceptions"]["Component"]:
component_visibility.exceptions.append(self.get_component(item))
if "ViewSetupHints" in data["Visibility"]:
view_setup_hints = bcf.v3.data.ViewSetupHints()
optional_keys = {
"spaces_visible": "@SpacesVisible",
"space_boundaries_visible": "@SpaceBoundariesVisible",
"openings_visible": "@OpeningsVisible",
}
for key, value in optional_keys.items():
if value in data["Visibility"]["ViewSetupHints"]:
setattr(view_setup_hints, key, data["Visibility"]["ViewSetupHints"][value])
component_visibility.view_setup_hints = view_setup_hints
components.visibility = component_visibility
if "Coloring" in data and "Color" in data["Coloring"]:
for item in data["Coloring"]["Color"]:
color = bcf.v3.data.Color()
color.color = item["@Color"]
for item2 in item["Components"]["Component"]:
color.components.append(self.get_component(item2))
components.coloring.append(color)
return components
def get_viewpoint_orthogonal_camera(self, visinfo):
if "OrthogonalCamera" not in visinfo:
return None
camera = bcf.v3.data.OrthogonalCamera()
data = visinfo["OrthogonalCamera"]
self.set_vector(camera.camera_view_point, data["CameraViewPoint"])
self.set_vector(camera.camera_direction, data["CameraDirection"])
self.set_vector(camera.camera_up_vector, data["CameraUpVector"])
camera.view_to_world_scale = data["ViewToWorldScale"]
camera.aspect_ratio = data["AspectRatio"]
return camera
def get_viewpoint_perspective_camera(self, visinfo):
if "PerspectiveCamera" not in visinfo:
return None
camera = bcf.v3.data.PerspectiveCamera()
data = visinfo["PerspectiveCamera"]
self.set_vector(camera.camera_view_point, data["CameraViewPoint"])
self.set_vector(camera.camera_direction, data["CameraDirection"])
self.set_vector(camera.camera_up_vector, data["CameraUpVector"])
camera.field_of_view = data["FieldOfView"]
camera.aspect_ratio = data["AspectRatio"]
return camera
def get_viewpoint_lines(self, visinfo):
if "Lines" not in visinfo:
return []
lines = []
for item in visinfo["Lines"].get("Line", []):
line = bcf.v3.data.Line()
self.set_vector(line.start_point, item["StartPoint"])
self.set_vector(line.end_point, item["EndPoint"])
lines.append(line)
return lines
def get_viewpoint_clipping_planes(self, visinfo):
if "ClippingPlanes" not in visinfo:
return []
planes = []
for item in visinfo["ClippingPlanes"]["ClippingPlane"]:
plane = bcf.v3.data.ClippingPlane()
self.set_vector(plane.location, item["Location"])
self.set_vector(plane.direction, item["Direction"])
planes.append(plane)
return planes
def get_viewpoint_bitmaps(self, visinfo):
if "Bitmaps" not in visinfo:
return []
bitmaps = []
for item in visinfo["Bitmaps"].get("Bitmap"):
bitmap = bcf.v3.data.Bitmap()
bitmap.reference = item["Reference"]
bitmap.bitmap_format = item["Format"].upper()
self.set_vector(bitmap.location, item["Location"])
self.set_vector(bitmap.normal, item["Normal"])
self.set_vector(bitmap.up, item["Up"])
bitmap.height = item["Height"]
bitmaps.append(bitmap)
return bitmaps
def set_vector(self, to_obj, from_xml):
to_obj.x = from_xml["X"]
to_obj.y = from_xml["Y"]
to_obj.z = from_xml["Z"]
def get_component(self, data):
component = bcf.v3.data.Component()
optional_keys = {
"originating_system": "OriginatingSystem",
"authoring_tool_id": "AuthoringToolId",
"ifc_guid": "@IfcGuid",
}
for key, value in optional_keys.items():
if value in data:
setattr(component, key, data[value])
return component
def close_project(self):
shutil.rmtree(self.filepath)
def _read_xml(self, filename, xsd):
schema = XMLSchema(os.path.join(cwd, "xsd", xsd))
filepath = os.path.join(self.filepath, filename)
(data, errors) = schema.to_dict(filepath, validation="lax")
for error in errors:
self.logger.error(error)
return data
def _create_element(self, parent, name, attributes={}, text=None):
element = self.document.createElement(name)
for key, value in attributes.items():
if isinstance(value, bool):
element.setAttribute(key, str(value).lower())
elif value:
element.setAttribute(key, value)
if text is not None:
text = self.document.createTextNode(str(text))
element.appendChild(text)
parent.appendChild(element)
return element
def __del__(self):
self.close_project()
+181
View File
@@ -0,0 +1,181 @@
class Project:
def __init__(self):
self.project_id = ""
self.name = ""
class BimSnippet:
def __init__(self):
self.snippet_type = None
self.is_external = False
self.reference = None
self.reference_schema = None
class DocumentReference:
def __init__(self):
self.description = None
self.document_guid = None
self.url = None
self.guid = None
class RelatedTopic:
def __init__(self):
self.guid = None
class HeaderFile:
def __init__(self):
self.file_name = ""
self.date = None
self.reference = ""
self.ifc_project = None
self.ifc_spatial_structure_element = None
self.is_external = True
class Header:
def __init__(self):
self.files = []
class Topic:
def __init__(self):
self.reference_links = []
self.title = ""
self.priority = None
self.index = None # Deprecated, stored, but ignored
self.labels = []
self.creation_date = None
self.creation_author = None
self.modified_date = None
self.modified_author = None
self.due_date = None
self.assigned_to = None
self.stage = None
self.description = None
self.bim_snippet = None
self.document_references = []
self.related_topics = []
self.topic_status = None
self.topic_type = None
self.guid = None
self.header = None
self.comments = {}
self.viewpoints = {}
self.server_assigned_id = ""
class Comment:
def __init__(self):
self.guid = None
self.date = None
self.author = ""
self.comment = ""
self.viewpoint = None
self.modified_date = None
self.modified_author = ""
class ViewSetupHints:
def __init__(self):
self.spaces_visible = False
self.space_boundaries_visible = False
self.openings_visible = False
class Component:
def __init__(self):
self.originating_system = None
self.authoring_tool_id = None
self.ifc_guid = None
class ComponentVisibility:
def __init__(self):
self.exceptions = []
self.default_visibility = False
self.view_setup_hints = None
class Color:
def __init__(self):
self.color = None
self.components = []
class Components:
def __init__(self):
self.selection = []
self.visibility = None
self.coloring = []
class Point:
def __init__(self):
self.x = 0
self.y = 0
self.z = 0
class Direction(Point):
pass
class OrthogonalCamera:
def __init__(self):
self.camera_view_point = Point()
self.camera_direction = Direction()
self.camera_up_vector = Direction()
self.view_to_world_scale = 1.0
self.aspect_ratio = 1.0
class PerspectiveCamera:
def __init__(self):
self.camera_view_point = Point()
self.camera_direction = Direction()
self.camera_up_vector = Direction()
self.field_of_view = 60.0
self.aspect_ratio = 1.0
class Line:
def __init__(self):
self.start_point = Point()
self.end_point = Point()
class ClippingPlane:
def __init__(self):
self.location = Point()
self.direction = Direction()
class Bitmap:
def __init__(self):
self.reference = "" # Only in BCF-XML
self.bitmap_data = None # Only in BCF-API
self.bitmap_format = "PNG" # Enum of png or jpg
self.location = Point()
self.normal = Direction()
self.up = Direction()
self.height = 1.0
class Viewpoint:
def __init__(self):
self.guid = None
self.viewpoint = None
self.snapshot = None
self.index = None
self.components = None # It's not a list, despite the plural name
self.orthogonal_camera = None
self.perspective_camera = None
self.lines = []
self.clipping_planes = []
self.bitmaps = []
+31
View File
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="shared-types.xsd"/>
<xs:element name="DocumentInfo">
<xs:complexType>
<xs:sequence>
<xs:element name="Documents" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Document" type="Document" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Document">
<xs:sequence>
<!-- Filename of the document with the file extension. Not used to store the file in the BCF -->
<xs:element name="Filename" type="NonEmptyOrBlankString"/>
<!-- Human readable description of the document -->
<xs:element name="Description" type="NonEmptyOrBlankString" minOccurs="0"/>
</xs:sequence>
<xs:attributeGroup ref="DocumentAttributes"/>
</xs:complexType>
<xs:attributeGroup name="DocumentAttributes">
<!-- Guid of the document. Must match the filename in the BCF -->
<xs:attribute name="Guid" type="Guid" use="required"/>
</xs:attributeGroup>
</xs:schema>
+60
View File
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="shared-types.xsd"/>
<xs:element name="Extensions">
<xs:complexType>
<xs:sequence>
<xs:element name="TopicTypes" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="TopicType" type="NonEmptyOrBlankString" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TopicStatuses" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="TopicStatus" type="NonEmptyOrBlankString" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Priorities" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Priority" type="NonEmptyOrBlankString" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TopicLabels" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="TopicLabel" type="NonEmptyOrBlankString" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Users" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="User" type="NonEmptyOrBlankString" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SnippetTypes" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="SnippetType" type="NonEmptyOrBlankString" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Stages" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Stage" type="NonEmptyOrBlankString" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
+174
View File
@@ -0,0 +1,174 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="shared-types.xsd"/>
<xs:element name="Markup">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" type="Header" minOccurs="0"/>
<xs:element name="Topic" type="Topic"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Header">
<xs:sequence>
<xs:element name="Files" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="File" type="File" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- ISG Jira issue BCF-9. Add support for several viewpoints and snapshots per issue -->
<xs:complexType name="ViewPoint">
<xs:sequence>
<!-- viewpoint file (xml) -->
<xs:element name="Viewpoint" type="NonEmptyOrBlankString" minOccurs="0"/>
<!-- the snapshot png -->
<xs:element name="Snapshot" type="NonEmptyOrBlankString" minOccurs="0"/>
<!-- the viewpoint index (sort order) -->
<xs:element name="Index" type="xs:int" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Guid" type="Guid" use="required"/>
<!-- Guid of the viewpoint -->
</xs:complexType>
<!-- BimSnippet -->
<xs:complexType name="BimSnippet">
<xs:sequence>
<!--
Name of the file in the topic folder containing the snippet or a URL.
E.G.- Expresscode containing p.e Issue, Request
// Maybe some header infos ?? // IfcEntites // Geometry
-->
<!-- Reference (name) to the snippet file -->
<xs:element name="Reference" type="NonEmptyOrBlankString"/>
<xs:element name="ReferenceSchema" type="NonEmptyOrBlankString"/>
</xs:sequence>
<xs:attribute name="SnippetType" type="NonEmptyOrBlankString" use="required"/>
<xs:attribute name="IsExternal" type="xs:boolean" default="false"/>
<!-- This flag is true when the reference is a URL pointing outside of the BCF file-->
</xs:complexType>
<xs:complexType name="Topic">
<xs:sequence>
<xs:element name="ReferenceLinks" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="ReferenceLink" type="NonEmptyOrBlankString" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Title" type="NonEmptyOrBlankString"/>
<xs:element name="Priority" type="NonEmptyOrBlankString" minOccurs="0"/>
<!-- ISG Jira issue BCF-8 Add a way save order the topics -->
<!-- This property is deprecated and will be removed in a future release -->
<xs:element name="Index" type="xs:int" minOccurs="0"/>
<xs:element name="Labels" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Label" type="NonEmptyOrBlankString" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreationDate" type="xs:dateTime"/>
<xs:element name="CreationAuthor" type="NonEmptyOrBlankString"/>
<xs:element name="ModifiedDate" type="xs:dateTime" minOccurs="0"/>
<xs:element name="ModifiedAuthor" type="NonEmptyOrBlankString" minOccurs="0"/>
<xs:element name="DueDate" type="xs:dateTime" minOccurs="0"/>
<xs:element name="AssignedTo" type="NonEmptyOrBlankString" minOccurs="0"/>
<xs:element name="Stage" type="NonEmptyOrBlankString" minOccurs="0"/>
<xs:element name="Description" type="NonEmptyOrBlankString" minOccurs="0"/>
<xs:element name="BimSnippet" type="BimSnippet" minOccurs="0"/>
<xs:element name="DocumentReferences" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="DocumentReference" type="DocumentReference" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="RelatedTopics" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="RelatedTopic" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="Guid" type="Guid" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Comments" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Comment" type="Comment" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- ISG Jira issue BCF-9. Add support for several viewpoints and snapshots per issue -->
<xs:element name="Viewpoints" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="ViewPoint" type="ViewPoint" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Guid" type="Guid" use="required"/>
<xs:attribute name="ServerAssignedId" type="NonEmptyOrBlankString" use="optional"/>
<xs:attribute name="TopicType" type="NonEmptyOrBlankString" use="required"/>
<xs:attribute name="TopicStatus" type="NonEmptyOrBlankString" use="required"/>
</xs:complexType>
<xs:complexType name="File">
<xs:sequence>
<xs:element name="Filename" type="NonEmptyOrBlankString" minOccurs="0"/>
<xs:element name="Date" type="xs:dateTime" minOccurs="0"/>
<!-- Reference (URL) of the file -->
<xs:element name="Reference" type="NonEmptyOrBlankString" minOccurs="0"/>
</xs:sequence>
<xs:attributeGroup ref="FileAttributes"/>
</xs:complexType>
<xs:attributeGroup name="FileAttributes">
<xs:attribute name="IfcProject" type="IfcGuid" use="optional"/>
<xs:attribute name="IfcSpatialStructureElement" type="IfcGuid" use="optional"/>
<xs:attribute name="IsExternal" type="xs:boolean" default="true"/>
</xs:attributeGroup>
<!-- Reference to a document inside of the topic folder or a url pointing to the web -->
<xs:complexType name="DocumentReference">
<xs:sequence>
<xs:choice>
<!-- Guid of the document: If pointing to an internal document -->
<xs:element name="DocumentGuid" type="Guid" minOccurs="0"/>
<!-- Url of the reference. If pointing to an external document -->
<xs:element name="Url" type="NonEmptyOrBlankString" minOccurs="0"/>
</xs:choice>
<!-- Human readable description of the document reference -->
<xs:element name="Description" type="NonEmptyOrBlankString" minOccurs="0"/>
</xs:sequence>
<xs:attributeGroup ref="DocumentReferenceAttributes"/>
</xs:complexType>
<xs:attributeGroup name="DocumentReferenceAttributes">
<!-- Guid of the document reference -->
<xs:attribute name="Guid" type="Guid" use="required"/>
</xs:attributeGroup>
<xs:complexType name="Comment">
<xs:sequence>
<xs:element name="Date" type="xs:dateTime"/>
<xs:element name="Author" type="NonEmptyOrBlankString"/>
<xs:element name="Comment" minOccurs="0" type="NonEmptyOrBlankString"/>
<xs:element name="Viewpoint" minOccurs="0">
<xs:complexType>
<xs:attribute name="Guid" type="Guid" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="ModifiedDate" type="xs:dateTime" minOccurs="0"/>
<xs:element name="ModifiedAuthor" type="NonEmptyOrBlankString" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Guid" type="Guid" use="required"/>
</xs:complexType>
<xs:simpleType name="IfcGuid">
<xs:restriction base="xs:string">
<xs:length value="22"/>
<xs:pattern value="[0-9A-Za-z_$]*"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="shared-types.xsd"/>
<xs:element name="ProjectInfo">
<xs:complexType>
<xs:sequence>
<xs:element name="Project" type="Project"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Project">
<xs:sequence>
<xs:element name="Name" type="NonEmptyOrBlankString" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="ProjectId" type="NonEmptyOrBlankString" use="required"/>
</xs:complexType>
</xs:schema>
+14
View File
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="Guid">
<xs:restriction base="xs:string">
<xs:pattern value="[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="NonEmptyOrBlankString">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Version">
<xs:complexType>
<xs:attribute name="VersionId" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
+220
View File
@@ -0,0 +1,220 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:include schemaLocation="shared-types.xsd"/>
<xs:element name="VisualizationInfo">
<xs:annotation>
<xs:documentation>VisualizationInfo documentation</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<!--
Although plural, 'Components' is not a collection
-->
<xs:element name="Components" type="Components" minOccurs="0"/>
<xs:choice>
<xs:element name="OrthogonalCamera" type="OrthogonalCamera"/>
<xs:element name="PerspectiveCamera" type="PerspectiveCamera"/>
</xs:choice>
<xs:element name="Lines" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Line" type="Line" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ClippingPlanes" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="ClippingPlane" type="ClippingPlane" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Bitmaps" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Bitmap" type="Bitmap" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<!-- Guid of the viewpoint -->
<xs:attribute name="Guid" type="Guid" use="required"/>
</xs:complexType>
</xs:element>
<xs:complexType name="OrthogonalCamera">
<xs:sequence>
<xs:element name="CameraViewPoint" type="Point"/>
<xs:element name="CameraDirection" type="Direction"/>
<xs:element name="CameraUpVector" type="Direction"/>
<xs:element name="ViewToWorldScale" type="xs:double">
<xs:annotation>
<xs:documentation>view's visible vertical size in meters</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AspectRatio" type="PositiveDouble">
<xs:annotation>
<xs:documentation>
Proportional relationship between the width and the height of the view (w/h).
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PerspectiveCamera">
<xs:sequence>
<xs:element name="CameraViewPoint" type="Point"/>
<xs:element name="CameraDirection" type="Direction"/>
<xs:element name="CameraUpVector" type="Direction"/>
<xs:element name="FieldOfView" type="FieldOfView">
<xs:annotation>
<xs:documentation>
Vertical field of view, in degrees.
It is currently limited to a value between 45 and 60 degrees.
This limitation will be dropped in the next release and viewers
should be expect values outside this range in current implementations.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AspectRatio" type="PositiveDouble">
<xs:annotation>
<xs:documentation>
Proportional relationship between the width and the height of the view (w/h).
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Point">
<xs:sequence>
<xs:element name="X" type="xs:double"/>
<xs:element name="Y" type="xs:double"/>
<xs:element name="Z" type="xs:double"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Direction">
<xs:sequence>
<xs:element name="X" type="xs:double"/>
<xs:element name="Y" type="xs:double"/>
<xs:element name="Z" type="xs:double"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="PositiveDouble">
<xs:restriction base="xs:double">
<xs:minExclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="FieldOfView">
<xs:restriction base="xs:double">
<xs:minExclusive value="0"/>
<xs:maxExclusive value="180"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Components">
<xs:sequence>
<!-- Components with relevance to the viewpoint. They should be displayed highlighted or selected in a viewer -->
<xs:element name="Selection" type="ComponentSelection" minOccurs="0"/>
<xs:element name="Visibility" type="ComponentVisibility" minOccurs="0"/>
<xs:element name="Coloring" type="ComponentColoring" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ComponentSelection">
<xs:sequence>
<xs:element name="Component" type="Component" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ComponentVisibility">
<xs:sequence>
<xs:element name="ViewSetupHints" type="ViewSetupHints" minOccurs="0"/>
<xs:element name="Exceptions" minOccurs="0">
<!-- List Components that are different than the DefaultVisibility. E.g. if DefaultVisibility = false then list
Components that should be visible -->
<xs:complexType>
<xs:sequence>
<xs:element name="Component" type="Component" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="DefaultVisibility" type="xs:boolean" default="false"/>
</xs:complexType>
<xs:complexType name="ViewSetupHints">
<xs:attribute name="SpacesVisible" type="xs:boolean" default="false"/>
<xs:attribute name="SpaceBoundariesVisible" type="xs:boolean" default="false"/>
<xs:attribute name="OpeningsVisible" type="xs:boolean" default="false"/>
</xs:complexType>
<xs:complexType name="ComponentColoring">
<xs:sequence>
<xs:element name="Color" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<!-- At least one component is required for a Color. -->
<xs:element name="Components">
<xs:complexType>
<xs:sequence>
<xs:element name="Component" type="Component" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute ref="Color" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Component">
<xs:sequence>
<xs:element name="OriginatingSystem" type="NonEmptyOrBlankString" minOccurs="0"/>
<xs:element name="AuthoringToolId" type="NonEmptyOrBlankString" minOccurs="0"/>
</xs:sequence>
<xs:attribute ref="IfcGuid"/>
</xs:complexType>
<xs:attribute name="Color">
<xs:simpleType>
<xs:restriction base="xs:normalizedString">
<!-- Should either match 3 or 4 hex bytes , e.g. "FF00FF" or "FF00FF99" -->
<xs:pattern value="[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="IfcGuid">
<xs:simpleType>
<xs:restriction base="xs:normalizedString">
<xs:length value="22"/>
<xs:pattern value="[0-9A-Za-z_$]*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:complexType name="Line">
<xs:sequence>
<xs:element name="StartPoint" type="Point"/>
<xs:element name="EndPoint" type="Point"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ClippingPlane">
<xs:sequence>
<xs:element name="Location" type="Point"/>
<xs:element name="Direction" type="Direction"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Bitmap">
<xs:sequence>
<xs:element name="Format" type="BitmapFormat"/>
<!-- Name of the bitmap file in the topic folder -->
<xs:element name="Reference" type="NonEmptyOrBlankString"/>
<!-- Location of the center of the bitmap -->
<xs:element name="Location" type="Point"/>
<!-- Normal of the bitmap -->
<xs:element name="Normal" type="Direction"/>
<!-- Upvector of the bitmap -->
<xs:element name="Up" type="Direction"/>
<!-- Height of the bitmap -->
<xs:element name="Height" type="xs:double"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="BitmapFormat">
<xs:restriction base="xs:string">
<xs:enumeration value="png"/>
<xs:enumeration value="jpg"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
+1
View File
@@ -0,0 +1 @@
xmlschema
+276
View File
@@ -0,0 +1,276 @@
VERSION:=`date '+%y%m%d'`
PYVERSION:=py37
.PHONY: dist
dist:
ifndef PLATFORM
$(error PLATFORM is not set)
endif
rm -rf dist
mkdir -p dist/working
mkdir -p dist/blenderbim
cp -r blenderbim/* dist/blenderbim/
# Provides IfcOpenShell Python functionality
ifeq ($(PYVERSION), py37)
cd dist/working && wget https://s3.amazonaws.com/ifcopenshell-builds/ifcblender-python-37-v0.6.0-81ad689-$(PLATFORM)64.zip
endif
ifeq ($(PYVERSION), py39)
cd dist/working && wget https://s3.amazonaws.com/ifcopenshell-builds/ifcblender-python-39-v0.6.0-81ad689-$(PLATFORM)64.zip
endif
cd dist/working && unzip ifcblender*
cp -r dist/working/io_import_scene_ifc/ifcopenshell dist/blenderbim/libs/site/packages/
# See bug #812
cd dist/working && wget https://raw.githubusercontent.com/IfcOpenShell/IfcOpenShell/v0.6.0/src/blenderbim/occ_utils.py
cd dist/working && mv occ_utils.py ../blenderbim/libs/site/packages/ifcopenshell/geom/occ_utils.py
rm -rf dist/working
# Provides IfcConvert for construction documentation
mkdir dist/working
cd dist/working && wget https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.6.0-81ad689-$(PLATFORM)64.zip
cd dist/working && unzip IfcConvert*
ifeq ($(PLATFORM), win)
cp -r dist/working/IfcConvert.exe dist/blenderbim/libs/
else
cp -r dist/working/IfcConvert dist/blenderbim/libs/
endif
rm -rf dist/working
# Provides dependencies that are part of IfcOpenShell
mkdir dist/working
cd dist/working && wget https://github.com/IfcOpenShell/IfcOpenShell/archive/v0.6.0.zip
cd dist/working && unzip v0.6.0.zip
# IfcOpenBot sometimes lags behind, so we hotfix the Python utilities
cp -r dist/working/IfcOpenShell-0.6.0/src/ifcopenshell-python/ifcopenshell/util/* dist/blenderbim/libs/site/packages/ifcopenshell/util/
cp -r dist/working/IfcOpenShell-0.6.0/src/ifcopenshell-python/ifcopenshell/api/* dist/blenderbim/libs/site/packages/ifcopenshell/api/
# Provides bcf functionality
cp -r dist/working/IfcOpenShell-0.6.0/src/bcf/bcf dist/blenderbim/libs/site/packages/
# Provides IFCClash functionality
cp -r dist/working/IfcOpenShell-0.6.0/src/ifcclash/* dist/blenderbim/libs/site/packages/
# Provides BIMTester functionality
cd dist/working && python -m venv env
cd dist/working && . env/bin/activate && pip install pybabel
cd dist/working && . env/bin/activate && pip install babel
cd dist/working && . env/bin/activate && ./env/bin/pybabel compile -d ./IfcOpenShell-0.6.0/src/ifcbimtester/bimtester/locale/
cp -r dist/working/IfcOpenShell-0.6.0/src/ifcbimtester/bimtester dist/blenderbim/libs/site/packages/
# Provides IFCCOBie functionality
cp -r dist/working/IfcOpenShell-0.6.0/src/ifccobie/* dist/blenderbim/libs/site/packages/
# Provides IFCDiff functionality
cp -r dist/working/IfcOpenShell-0.6.0/src/ifcdiff/* dist/blenderbim/libs/site/packages/
# Provides IFCCSV functionality
cp -r dist/working/IfcOpenShell-0.6.0/src/ifccsv/* dist/blenderbim/libs/site/packages/
# Provides IFCPatch functionality
cp -r dist/working/IfcOpenShell-0.6.0/src/ifcpatch/ifcpatch dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Provides Mustache templating in construction documentation
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/d6/fd/eb8c212053addd941cc90baac307c00ac246ac3fce7166b86434c6eae963/pystache-0.5.4.tar.gz
cd dist/working && tar -xzvf pystache*
cd dist/working/pystache-0.5.4/ && python setup.py build && cp -r build/lib/pystache ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Provides SVG export in construction documentation
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/79/e8/7eb2ba188eda14a4b47e33b51f3b4978985f4116655c699bcd18c79279b5/svgwrite-1.3.1.zip
cd dist/working && unzip svgwrite*
cp -r dist/working/svgwrite-1.3.1/svgwrite dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Provides fuzzy date parsing for construction sequencing
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/be/ed/5bbc91f03fa4c839c4c7360375da77f9659af5f7086b7a7bdda65771c8e0/python-dateutil-2.8.1.tar.gz
cd dist/working && tar -xzvf python-dateutil*
cp -r dist/working/python-dateutil-2.8.1/dateutil dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Provides duration parsing for construction sequencing
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/b1/80/fb8c13a4cd38eb5021dc3741a9e588e4d1de88d895c1910c6fc8a08b7a70/isodate-0.6.0.tar.gz
cd dist/working && tar -xzvf isodate*
cp -r dist/working/isodate-0.6.0/src/isodate dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Provides networkx graph analysis for project dependency calculations
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/b0/21/adfbf6168631e28577e4af9eb9f26d75fe72b2bb1d33762a5f2c425e6c2a/networkx-2.5.1.tar.gz
cd dist/working && tar -xzvf networkx*
cp -r dist/working/networkx-2.5.1/networkx dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Required by networkx
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/4f/51/15a4f6b8154d292e130e5e566c730d8ec6c9802563d58760666f1818ba58/decorator-5.0.9.tar.gz
cd dist/working && tar -xzvf decorator*
cp -r dist/working/decorator-5.0.9/src/decorator.py dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Provides jsgantt-improved supports for web-based construction sequencing gantt charts
mkdir dist/working
cd dist/working && wget https://raw.githubusercontent.com/jsGanttImproved/jsgantt-improved/master/dist/jsgantt.js
cd dist/working && wget https://raw.githubusercontent.com/jsGanttImproved/jsgantt-improved/master/dist/jsgantt.css
cp dist/working/jsgantt* dist/blenderbim/bim/data/gantt/
rm -rf dist/working
# Required by IFCDiff
mkdir dist/working
cd dist/working && wget https://github.com/Moult/deepdiff/archive/master.zip
cd dist/working && unzip master.zip
cp -r dist/working/deepdiff-master/deepdiff dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Required by deepdiff
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/00/55/ce2cbc6d64034b30cad81a29ba61bdba456f190f5e83c09831304bf68d6b/jsonpickle-1.2.tar.gz
cd dist/working && tar -xzvf jsonpickle*
cp -r dist/working/jsonpickle-1.2/jsonpickle dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Required by deepdiff
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/a3/b7/d4d69641cbe707a45c23b190f2d717466ba5accc4c70b5f7a8a450387895/ordered-set-3.1.1.tar.gz
cd dist/working && tar -xzvf ordered-set*
cp -r dist/working/ordered-set-3.1.1/ordered_set.py dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Required by lark
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/00/32/8076fa13e832bb4dcff379f18f228e5a53412be0631808b9ca2610c0f566/pyparsing-2.4.5.tar.gz
cd dist/working && tar -xzvf pyparsing*
cp -r dist/working/pyparsing-2.4.5/pyparsing.py dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Required by bcf
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/bb/41/ad9ce53bb978b68af8ae415293cafc89b165b8ad55a593725299dca76729/xmlschema-1.1.1.tar.gz
cd dist/working && tar -xzvf xmlschema*
cp -r dist/working/xmlschema-1.1.1/xmlschema dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Required by bcf
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/12/f9/f9960222d5274944b01391749e55e4dcdf28d8f0c108b64ac931ceff6fdb/elementpath-1.4.3.tar.gz
cd dist/working && tar -xzvf elementpath*
cp -r dist/working/elementpath-1.4.3/elementpath dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Required by bcf
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/21/9f/b251f7f8a76dec1d6651be194dfba8fb8d7781d10ab3987190de8391d08e/six-1.14.0.tar.gz
cd dist/working && tar -xzvf six*
cp -r dist/working/six-1.14.0/six.py dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Required by IFCCSV and ifcopenshell.util.selector
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/18/4d/8d522136c37d9e1ea74062b41b8d5e1318ebf45063ae46ce72ed60af223b/lark-parser-0.8.5.tar.gz
cd dist/working && tar -xzvf lark-parser*
cp -r dist/working/lark-parser-0.8.5/lark dist/blenderbim/libs/site/packages/
rm -rf dist/working
# Required by IFCClash
ifeq ($(PLATFORM), linux)
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/0c/fa/00d85f893b02289e2942849d97f8818dde8e2111182e825fb3a735677791/python_fcl-0.0.12-cp37-cp37m-manylinux1_x86_64.whl
cd dist/working && unzip python_fcl*
cp -r dist/working/fcl dist/blenderbim/libs/site/packages/
rm -rf dist/working
endif
ifeq ($(PLATFORM), win)
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/19/e6/6e9f33fb59e8f27c0e1592bd26e644bc92b85c942b072b2d3854105d5887/python_fcl_win32-0.0.12.post3-py3-none-win_amd64.whl
cd dist/working && unzip python_fcl*
cp -r dist/working/fcl dist/blenderbim/libs/site/packages/
rm -rf dist/working
endif
# Required by BIMTester
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/c8/4b/d0a8c23b6c8985e5544ea96d27105a273ea22051317f850c2cdbf2029fe4/behave-1.2.6.tar.gz
cd dist/working && tar -xzvf behave*
cd dist/working/behave-1.2.6/ && cp -r behave ../../blenderbim/libs/site/packages/
# See bug #1294
cd dist/working/ && wget https://raw.githubusercontent.com/IfcOpenShell/IfcOpenShell/v0.6.0/src/ifcbimtester/patch/model_core.patch
cd dist/working/ && wget https://raw.githubusercontent.com/IfcOpenShell/IfcOpenShell/v0.6.0/src/ifcbimtester/patch/runner_util.patch
cd dist/working/ && patch ../blenderbim/libs/site/packages/behave/model_core.py < model_core.patch
cd dist/working/ && patch ../blenderbim/libs/site/packages/behave/runner_util.py < runner_util.patch
rm -rf dist/working
# Required by behave
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/f4/65/220bb4075fddb09d5b3ea2c1c1fa66c1c72be9361ec187aab50fa161e576/parse-1.15.0.tar.gz
cd dist/working && tar -xzvf parse*
cd dist/working/parse-1.15.0/ && cp parse.py ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by behave
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/2e/79/81bebd1b0446d46733db99d74543b4bb80646ef4c988584bae0862e706bc/parse_type-0.5.2.tar.gz
cd dist/working && tar -xzvf parse_type*
cd dist/working/parse_type-0.5.2/ && cp -r parse_type ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by IFCCOBie for XLSX support
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/0c/bc/82d6783f83f65f56d8b77d052773c4a2f952fa86385f0cd54e1e006658d7/XlsxWriter-1.2.9.tar.gz
cd dist/working && tar -xzvf XlsxWriter*
cd dist/working/XlsxWriter-1.2.9/ && cp -r xlsxwriter ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by IFCCOBie for ODS support
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/97/73/8ade73f6749177003f7ce3304f524774adda96e6aaab30ea79fd8fda7934/odfpy-1.4.1.tar.gz
cd dist/working && tar -xzvf odfpy*
cd dist/working/odfpy-1.4.1/ && cp -r odf ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by odfpy
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/a4/5f/f8aa58ca0cf01cbcee728abc9d88bfeb74e95e6cb4334cfd5bed5673ea77/defusedxml-0.6.0.tar.gz
cd dist/working && tar -xzvf defusedxml*
cd dist/working/defusedxml-0.6.0/ && cp -r defusedxml ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by augin
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/76/b4/b7baffbda025efd5dc8fcd8d2e953e3aa939c236a484084fa8f4c3588ee9/boto3-1.17.17.tar.gz
cd dist/working && tar -xzvf boto3*
cd dist/working/boto3-1.17.17/ && cp -r boto3 ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by boto3
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/7f/2e/e02fdfd0f0377c4e44e61de27b05d5cfe93575770661ef9ded80ed90fa88/botocore-1.20.17.tar.gz
cd dist/working && tar -xzvf botocore*
cd dist/working/botocore-1.20.17/ && cp -r botocore ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by boto3
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/3c/56/3f325b1eef9791759784aa5046a8f6a1aff8f7c898a2e34506771d3b99d8/jmespath-0.10.0.tar.gz
cd dist/working && tar -xzvf jmespath*
cd dist/working/jmespath-0.10.0/ && cp -r jmespath ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by boto3
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/08/e1/3ee2096ebaeeb8c186d20ed16c8faf4a503913e5c9a0e14cd6b8ffc405a3/s3transfer-0.3.4.tar.gz
cd dist/working && tar -xzvf s3transfer*
cd dist/working/s3transfer-0.3.4/ && cp -r s3transfer ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Provides IFCJSON functionality
mkdir dist/working
cd dist/working && wget https://github.com/IFCJSON-Team/IFC2JSON_python/archive/master.zip
cd dist/working && unzip master.zip
cp -r dist/working/IFC2JSON_python-master/file_converters/ifcjson dist/blenderbim/libs/site/packages/
rm -rf dist/working
cd dist/blenderbim && sed -i "s/999999/$(VERSION)/" __init__.py
cd dist && zip -r blender28-bim-$(VERSION)-$(PYVERSION)-$(PLATFORM).zip ./*
rm -rf dist/blenderbim
.PHONY: clean
clean:
rm -rf dist
+127
View File
@@ -0,0 +1,127 @@
# Blender BIM IFC
_Under heavy development!_
Let's use Blender to create BIM models, because why not?
## Features
- IFC4 is a first-class citizen. IFC4 has been an ISO standard since 2013, with
the latest published in 2018. It contains many more features than IFC2X3,
published back in 2005.
- Available for Windows, Mac, and Linux!
- Use open-source Blender 2.8 to do digital modeling! Used by NASA, Hollywood,
and Ubisoft, Blender allows real-time modeling in rendered view, animations,
file linking, proxy objects, Blender Cloud collaboration, lighting analysis,
CFD, energy modeling, and a huge ecosystem of add-ons with a thriving
community. No licensing, and with a strong Python API to integrate into your
custom workflow.
- Create complex spatial structures with multiple sites, buildings, facilities,
bridges, and building parts. Sites can be broken down into sub-sites and
multiple buildings per site. You can categorise different floors to different
buildings.
- Classify any geometry as any IFC type. Just because it is a wall doesn't
mean you should be limited to modeling it in a certain way. Easily change
from one type to another, switch relationships and aggregations, reuse or
even remove geometry altogether, without damaging your geometry or breaking
your BIM model.
- Use collections to create element compositions and decompositions with full
control over the classifications of their parts. Most BIM programs don't give
this flexibility. Create collection instances to efficiently duplicate
composite objects.
- Allow BIM objects to instance a shared geometric representations. This allows
you to place the same shape in multiple objects without drastically
increasing your filesize.
- Provide a custom value to any simple IFC attribute of an IFC product.
- Create product types that regular IFC products can inherit attributes from.
- Define your own property sets with control over exactly how the data in the
property sets are stored using property set template definitions which you
can download or create yourself. Property sets can apply to both types and
objects, and object property sets can selectively override type property
sets.
- Applies array modifiers to create instances.
- Basic quantity take-off support for costing.
- Settings to toggle export of quantities or geometric representations.
Exporting IFC data without geometric representations is much faster and a
fraction of the filesize.
- Maintain `GlobalId` between exports, so that you can manipulate the IFC
reliably in other software while making changes.
- Not all objects need full solid geometry. Create representations as 2D or 3D
curves / wireframes for rapid and lightweight BIM development.
- Create map conversions and coordinate reference system definitions to link
BIM to GIS.
- Export basic materials with surface and diffuse colours for representation.
You can also link materials to an externally defined file, such as a `.blend`
Cycles material, V-Ray material, or even Radiance material for lighting
simulation.
- Switch between different types of metric units when modeling.
- Model multiple representations for different purposes for a single BIM
object or type, such as footprints, axis, reference, or clearance geometry.
You can export just the type of representation required for your usecase, or
export multiple for the user to choose from.
- Record qualitative objectives such as design intentions, health and safety
strategies, or code compliance, performance solutions, and more, in the BIM
model and directly associate them to objects or types.
- Classify objects and types to different classification systems such as
Uniclass, Omniclass, or your custom system.
- Associate external document files such as plans, brochures, specifications,
warranties, or anything to objects and types.
- Specify swept solid geometries, allowing you to round-trip geometry
manipulation with other BIM software which have more limited geometric tools,
like Revit.
- Create material layer sets, for objects which have materials in predefined
layers with thicknesses.
- Create material constituent sets, for objects which are made up of
arbitrarily mixed ingredients.
- Specify nested and hosted element relationships.
- Specify predefined door attributes as defined in the IFC4 specification.
- Specify predefined window attributes as defined in the IFC4 specification.
- Specify surface styles either defined as part of a material or assigned
directly to an object's representation.
- Colour coding by IFC class to visually spot mistakes
Some more experimental features:
- Cut sections for documentation with OpenCascade
- Export gbXML files that are linked to your IFC file to do energy analysis
- QA module to generate Gherkin unit tests to validate your BIM models
- HTML formatter to generate reports from QA results
- COBie spreadsheet extraction to import into CAFM systems
## Demo
[See demo video](https://www.youtube.com/watch?v=iD3v3eu2AjY)
It's only just started, so everything can and will change. But if you want to
check it out:
1. Install [Blender](https://www.blender.org/) 64-bit version.
2. Download the latest packaged version of Blender BIM from
[here](https://blenderbim.org/builds/).
3. Launch Blender. Go to `Edit->Preferences->Add-ons->Install...`. Browse to
the downloaded `.zip` file from step 2.
4. Enable the checkbox next to the Import-Export IFC Blender plugin which will
show up.
5. All done! You will find an import and export IFC option in the `File` menu.
By default, Blender BIM will export whatever you have selected. The objects you
have selected _must_ belong in an `IfcProject` and spatially contained, such as
witihn an `IfcBuilding`. It must also follow the naming convention. Please see
the screenshot below for an example scene.
A naming convention of `IfcClass/IfcName` is enforced. If you name your object
`IfcWall/Foo`, it will turn into an `IfcWall` with the name attribute set to
`Foo`. You can override object attributes using Blender's `Custom Properties`.
Your objects must live in a top level `Collection` defined as a context class,
usually something like `IfcProject/Foo`. You can then nest spatial structures
underneath to create a hierarchy.
## Pictures
![UI](https://aws1.discourse-cdn.com/business6/uploads/buildingsmart1/original/1X/ce820c3ee22adcffae59b40f98ff23379f7e3547.png)
![Blender screenshot](blender-screenshot.png)
... this Blender files creates this IFC file ...
![IfcOpenShell screenshot](ifcopenshell-screenshot.png)
+119
View File
@@ -0,0 +1,119 @@
import bpy
from bpy.types import Operator
class Object_OT_RenameObjects(Operator):
bl_idname = "object.renameobjects"
bl_label = "Rename Object(s)"
# Multi Object rename UI
BNameCB: bpy.props.BoolProperty(name="Base Name:")
BaseName: bpy.props.StringProperty(name="")
PreFixCB: bpy.props.BoolProperty(name="Prefix:")
PreFix: bpy.props.StringProperty(name="")
RemFrst: bpy.props.BoolProperty(name="Remove First")
DgtFrst: bpy.props.IntProperty(name="Digits")
SuffixCB: bpy.props.BoolProperty(name="Suffix")
Suffix: bpy.props.StringProperty(name="")
RemLast: bpy.props.BoolProperty(name="Remove Last")
DgtLast: bpy.props.IntProperty(name="Digits")
NumbredCB: bpy.props.BoolProperty(name="Numbred")
BaseNum: bpy.props.IntProperty(name="Base Number")
Step: bpy.props.IntProperty(name="Step", default=1)
findCB: bpy.props.BoolProperty(name="Replace")
find: bpy.props.StringProperty(name="")
replace: bpy.props.StringProperty(name="")
# Single rename UI
Name: bpy.props.StringProperty(name="Name")
def draw(self, ctx):
SelCount = len(bpy.context.selected_objects)
if SelCount > 1:
box = self.layout.box()
row = box.row()
row.prop(self, "BNameCB")
row.prop(self, "BaseName")
row = box.row()
row.prop(self, "PreFixCB")
row.prop(self, "PreFix")
row = box.row()
row.prop(self, "RemFrst")
row.prop(self, "DgtFrst")
row = box.row()
row.prop(self, "SuffixCB")
row.prop(self, "Suffix")
row = box.row()
row.prop(self, "RemLast")
row.prop(self, "DgtLast")
row = box.row(align=True)
row.prop(self, "NumbredCB")
row.prop(self, "BaseNum")
row.prop(self, "Step")
row = box.row(align=True)
row.prop(self, "findCB")
row.prop(self, "find")
row.prop(self, "replace")
if SelCount == 1:
box = self.layout.box()
row = box.row()
row.prop(self, "Name")
if SelCount == 0:
box = self.layout.box()
row = box.row()
row.label("No Selected Object")
def __init__(self):
if len(bpy.context.selected_objects) == 1:
self.Name = bpy.context.selected_objects[0].name
def execute(self, context):
SelCount = len(bpy.context.selected_objects)
if SelCount > 1:
SelObj = bpy.context.selected_objects
Index = self.BaseNum
for i in range(0, SelCount):
# Get Object Original Name #
NewName = SelObj[i].name
# Set the Base name #
if self.BNameCB:
NewName = self.BaseName
# Remove First characters #
if self.RemFrst:
NewName = NewName[self.DgtFrst : self.DgtFrst + len(NewName)]
# Remove Last Characters #
if self.RemLast:
NewName = NewName[1 : len(NewName) - self.DgtLast]
# Add Prefix to the new name #
if self.PreFixCB:
NewName = self.PreFix + NewName
# Add Suffix to the new name #
if self.SuffixCB:
NewName = NewName + self.Suffix
# Add Digits to end of new name #
if self.NumbredCB:
NewName += str(Index)
Index += self.Step
# Find and Replace #
if self.findCB:
NewName = NewName.replace(self.find, self.replace)
# Set the new name to the object #
SelObj[i].name = NewName
elif SelCount == 1:
bpy.context.selected_objects[0].name = self.Name
return {"FINISHED"}
def invoke(self, context, event):
wm = context.window_manager
return wm.invoke_props_dialog(self)
def register():
bpy.utils.register_class(Object_OT_RenameObjects)
def unregister():
bpy.utils.unregister_class(Object_OT_RenameObjects)
if __name__ == "__main__":
register()
Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

+33
View File
@@ -0,0 +1,33 @@
bl_info = {
"name": "BlenderBIM",
"description": "Author, import, and export files in the " "Industry Foundation Classes (.ifc) file format",
"author": "Dion Moult, IfcOpenShell",
"blender": (2, 80, 0),
"version": (0, 0, 999999),
"location": "File > Export, File > Import, Scene / Object / Material / Mesh Properties",
"tracker_url": "https://github.com/IfcOpenShell/IfcOpenShell/issues",
"category": "Import-Export",
}
import os
import site
# process *.pth in /libs/site/packages to setup globally importable modules
# 3 levels deep required by occ static ../../ path
# TODO: 3 levels deep is no longer required as we no longer bundle OCC
cwd = os.path.dirname(os.path.realpath(__file__))
site.addsitedir(os.path.join(cwd, "libs", "site", "packages"))
# main import
from .bim import *
# Explicitely expose bim.xx when imported with from blenderbim import *
# Other bim still are importable using explicit from blenderbim.bim import xxx
__all__ = ["export_ifc", "import_ifc"]
if __name__ == "__main__":
register()
+2
View File
@@ -0,0 +1,2 @@
# addon writes tmp stuff directly to its dir
/data/
+154
View File
@@ -0,0 +1,154 @@
# Check if we are running in Blender before loading, to allow for multiprocessing
import sys
bpy = sys.modules.get("bpy")
if bpy is not None:
import bpy
import importlib
from . import handler, ui, prop, operator
modules = {
"project": None,
"parametric": None,
"search": None,
"bcf": None,
"root": None,
"unit": None,
"model": None,
"georeference": None,
"context": None,
"drawing": None,
"attribute": None,
"type": None,
"spatial": None,
"void": None,
"aggregate": None,
"geometry": None,
"cobie": None,
"resource": None,
"cost": None,
"sequence": None,
"group": None,
"structural": None,
"boundary": None,
"material": None,
"style": None,
"layer": None,
"owner": None,
"pset": None,
"qto": None,
"classification": None,
"constraint": None,
"document": None,
"pset_template": None,
"clash": None,
"csv": None,
"bimtester": None,
"diff": None,
"patch": None,
"covetool": None,
"augin": None,
"debug": None,
}
for name in modules.keys():
modules[name] = importlib.import_module(f"blenderbim.bim.module.{name}")
classes = [
operator.OpenUri,
operator.SelectDataDir,
operator.SelectSchemaDir,
operator.SelectIfcFile,
operator.ExportIFC,
operator.ImportIFC,
operator.SelectExternalMaterialDir,
operator.FetchExternalMaterial,
operator.FetchObjectPassport,
operator.OpenUpstream,
operator.AddSectionPlane,
operator.RemoveSectionPlane,
operator.ReloadIfcFile,
operator.AddIfcFile,
operator.RemoveIfcFile,
operator.SetOverrideColour,
operator.SetViewportShadowFromSun,
operator.CopyPropertyToSelection,
operator.CopyAttributeToSelection,
operator.LinkIfc,
operator.SnapSpacesTogether,
prop.StrProperty,
prop.Attribute,
prop.BIMProperties,
prop.IfcParameter,
prop.PsetQto,
prop.GlobalId,
prop.BIMObjectProperties,
prop.BIMMaterialProperties,
prop.ItemSlotMap,
prop.BIMMeshProperties,
ui.BIM_PT_section_plane,
ui.BIM_UL_generic,
ui.BIM_UL_topics,
ui.BIM_ADDON_preferences,
]
for module in modules.values():
classes.extend(module.classes)
def menu_func_export(self, context):
self.layout.operator(operator.ExportIFC.bl_idname, text="Industry Foundation Classes (.ifc/.ifczip/.ifcjson)")
def menu_func_import(self, context):
self.layout.operator(operator.ImportIFC.bl_idname, text="Industry Foundation Classes (.ifc/.ifczip/.ifcxml)")
def on_register(scene):
handler.setDefaultProperties(scene)
bpy.app.handlers.depsgraph_update_post.remove(on_register)
def register():
for cls in classes:
bpy.utils.register_class(cls)
bpy.app.handlers.depsgraph_update_post.append(on_register)
bpy.app.handlers.load_post.append(handler.setDefaultProperties)
bpy.app.handlers.load_post.append(handler.loadIfcStore)
bpy.app.handlers.save_pre.append(handler.ensureIfcExported)
bpy.types.TOPBAR_MT_file_export.append(menu_func_export)
bpy.types.TOPBAR_MT_file_import.append(menu_func_import)
bpy.types.Scene.BIMProperties = bpy.props.PointerProperty(type=prop.BIMProperties)
bpy.types.Object.BIMObjectProperties = bpy.props.PointerProperty(type=prop.BIMObjectProperties)
bpy.types.Material.BIMObjectProperties = bpy.props.PointerProperty(type=prop.BIMObjectProperties)
bpy.types.Collection.BIMObjectProperties = bpy.props.PointerProperty(
type=prop.BIMObjectProperties
) # Check if we need this
bpy.types.Material.BIMMaterialProperties = bpy.props.PointerProperty(type=prop.BIMMaterialProperties)
bpy.types.Mesh.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties)
bpy.types.Curve.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties)
bpy.types.Camera.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties)
bpy.types.PointLight.BIMMeshProperties = bpy.props.PointerProperty(type=prop.BIMMeshProperties)
bpy.types.SCENE_PT_unit.append(ui.ifc_units)
for module in modules.values():
module.register()
def unregister():
for cls in reversed(classes):
bpy.utils.unregister_class(cls)
bpy.app.handlers.load_post.remove(handler.setDefaultProperties)
bpy.app.handlers.load_post.remove(handler.loadIfcStore)
bpy.app.handlers.save_pre.remove(handler.ensureIfcExported)
bpy.types.TOPBAR_MT_file_export.remove(menu_func_export)
bpy.types.TOPBAR_MT_file_import.remove(menu_func_import)
del bpy.types.Scene.BIMProperties
del bpy.types.Object.BIMObjectProperties
del bpy.types.Material.BIMObjectProperties
del bpy.types.Collection.BIMObjectProperties # Check if we need this
del bpy.types.Material.BIMMaterialProperties
del bpy.types.Mesh.BIMMeshProperties
del bpy.types.Curve.BIMMeshProperties
del bpy.types.Camera.BIMMeshProperties
del bpy.types.PointLight.BIMMeshProperties
bpy.types.SCENE_PT_unit.remove(ui.ifc_units)
for module in reversed(list(modules.values())):
module.unregister()
@@ -0,0 +1,2 @@
*
!.gitignore
Binary file not shown.
@@ -0,0 +1,24 @@
<link href="jsgantt.css" rel="stylesheet" type="text/css"/>
<script src="jsgantt.js" type="text/javascript"></script>
<div style="position:relative" class="gantt" id="GanttChartDIV"></div>
<script type="text/javascript">
var g = new JSGantt.GanttChart(document.getElementById('GanttChartDIV'), 'day');
g.setOptions({
vCaptionType: 'Complete', // Set to Show Caption : None,Caption,Resource,Duration,Complete,
vQuarterColWidth: 36,
vDateTaskDisplayFormat: 'day dd month yyyy', // Shown in tool tip box
vDayMajorDateDisplayFormat: 'mon yyyy - Week ww',// Set format to dates in the "Major" header of the "Day" view
vWeekMinorDateDisplayFormat: 'dd mon', // Set format to display dates in the "Minor" header of the "Week" view
vLang: 'en',
vShowTaskInfoLink: 1, // Show link in tool tip (0/1)
vShowEndWeekDate: 0, // Show/Hide the date for the last day of the week in header for daily
vUseSingleCell: 10000, // Set the threshold cell per table row (Helps performance for large data.
vFormatArr: ['Day', 'Week', 'Month', 'Quarter'], // Even with setUseSingleCell using Hour format on such a large chart can cause issues in some browsers,
vTotalHeight: 1000,
});
var json_data = `
{{{json_data}}}
`;
JSGantt.parseJSONString(json_data, g);
g.Draw();
</script>
@@ -0,0 +1,8 @@
{
"eevee": {
"uri": "mpass/shader.blend"
},
"cycles": {
"uri": "mpass/shader.blend"
}
}
@@ -0,0 +1,14 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION((),'2;1');
FILE_NAME('Pset_Custom.ifc','2020-01-01T00:00:00',(),(),'Sample','Sample',$);
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1= IFCPROPERTYSETTEMPLATE('05N2Dhepb9ouTCSmWBh22D',$,'Custom_Pset','An example custom pset.',.PSET_TYPEDRIVENOVERRIDE.,'IfcObject',(#2,#3));
#2= IFCSIMPLEPROPERTYTEMPLATE('37EpTDq4v96gTZh196BBXQ',$,'NumericProperty','An example numeric property',.P_SINGLEVALUE.,'IfcCountMeasure','',$,$,$,$,.READWRITE.);
#3= IFCSIMPLEPROPERTYTEMPLATE('22H7CzDvz1XfVHKkGWoYUK',$,'StringProperty','An example string property',.P_SINGLEVALUE.,'IfcLabel','',$,$,$,$,.READWRITE.);
ENDSEC;
END-ISO-10303-21;
@@ -0,0 +1,27 @@
* { stroke-linecap: round; stroke-linejoin: round; }
*[id] { fill: black; stroke: black; stroke-linecap: 'round'; stroke-width: 0.35; }
.projection { fill: white; stroke: black; stroke-linecap: 'round'; stroke-width: 0.25; }
.annotation { fill: none; stroke: black; stroke-linecap: 'round'; stroke-width: 0.25; }
.hidden { stroke-dasharray: 3, 2; }
.solid {}
.leader { marker-end: url(#leader-marker); }
.stair { marker-start: url(#stair-marker-start); marker-end: url(#stair-marker-end); }
.break { fill: white; }
.breakline { fill: none; stroke: black; stroke-linecap: 'round'; stroke-width: 0.25; marker-mid: url(#breakline-marker); }
.material-blank { fill: white; }
.material-diagonal1 { fill: url(#diagonal1); }
.material-diagonal2 { fill: url(#diagonal2); }
.material-diagonal3 { fill: url(#diagonal3); }
.material-crosshatch1 { fill: url(#crosshatch1); }
.material-crosshatch2 { fill: url(#crosshatch2); }
.material-crosshatch3 { fill: url(#crosshatch3); }
.material-brick { fill: url(#brick); }
.material-earth { fill: url(#earth); }
.material-glass { fill: url(#glass); }
.material-liquid { fill: url(#liquid); }
.material-grass { fill: url(#grass); }
.material-honeycomb { fill: url(#honeycomb); }
.material-sand { fill: url(#sand); }
.material-concrete { fill: url(#concrete); stroke-width: 0.5; }
.material-boundary { fill: none; stroke: red; stroke-width: 1; stroke-dasharray: 12,4,3,4,3,4; }
.IfcSpace { fill: none; stroke: none; }
@@ -0,0 +1,10 @@
.cut { fill: white; stroke: black; stroke-linecap: 'round'; stroke-width: 0.35; }
.background { fill: white; stroke: black; stroke-linecap: 'round'; stroke-width: 0.25; }
.annotation { fill: none; stroke: black; stroke-linecap: 'round'; stroke-width: 0.25; }
.hidden { stroke-dasharray: 3, 2; }
.solid {}
.leader { marker-end: url(#leader-marker); }
.stair { marker-start: url(#stair-marker-start); marker-end: url(#stair-marker-end); }
.break { fill: white; }
.breakline { fill: none; stroke: black; stroke-linecap: 'round'; stroke-width: 0.25; marker-mid: url(#breakline-marker); }
.IfcSpace { fill: none; stroke: none; }
@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg baseProfile="full" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink">
<marker id="eng-dimension-marker-start" markerHeight="14" markerWidth="11" orient="auto" refX="1" refY="7">
<g>
<path d="M 11 3.5 L 11 10.5 L 1 7" class="annotation" style="fill:black;" />
<path d="M 1 0 L 1 14" class="annotation" style="stroke-width:1;" />
</g>
</marker>
<marker id="eng-dimension-marker-end" markerHeight="14" markerWidth="11" orient="auto" refX="10" refY="7">
<g>
<path d="M 0 3.5 L 0 10.5 L 10 7" class="annotation" style="fill:black;" />
<path d="M 10 0 L 10 14" class="annotation" style="stroke-width:1;" />
</g>
</marker>
<marker id="dimension-marker-start" markerHeight="30" markerWidth="20" refX="10" refY="15" orient="auto">
<g>
<path d="M 0 15 L 20 15" class="annotation" style="stroke-width:1;" />
<path d="M 10 0 L 10 30" class="annotation" style="stroke-width:1;" />
<path d="M 5 20 L 15 10" class="annotation" style="stroke-width:3;" />
</g>
</marker>
<marker id="dimension-marker-end" markerHeight="30" markerWidth="20" refX="10" refY="15" orient="auto">
<g>
<path d="M 0 15 L 20 15" class="annotation" style="stroke-width:1;" />
<path d="M 10 0 L 10 30" class="annotation" style="stroke-width:1;" />
<path d="M 5 20 L 15 10" class="annotation" style="stroke-width:3;" />
</g>
</marker>
<marker id="grid-marker" markerHeight="40" markerWidth="40" orient="auto" refX="20" refY="20">
<circle cx="20" cy="20" fill="white" stroke="black" r="17" style="stroke-width: 2"/>
</marker>
<marker id="leader-marker" markerHeight="7" markerWidth="10" orient="auto" refX="10" refY="3.5">
<path d="M 0 0 L 0 7 L 10 3.5" class="annotation" style="fill:black;" />
</marker>
<marker id="stair-marker-start" markerHeight="10" markerWidth="10" orient="auto" refX="5" refY="5">
<circle cx="5" cy="5" fill="black" stroke="none" r="5"/>
</marker>
<marker id="stair-marker-end" markerHeight="42" markerWidth="21" orient="auto" refX="21" refY="21">
<path d="M 0 0 L 21 21 L 0 42" class="annotation stair" style="stroke-width:2; marker-start: none; marker-end: none;" />
</marker>
<marker id="plan-level-marker" markerHeight="30" markerWidth="30" refX="15" refY="15">
<g>
<path d="M 15 0 L 15 30" class="annotation" style="stroke-width:1;" />
<path d="M 0 15 L 30 15" class="annotation" style="stroke-width:1;" />
<circle cx="15" cy="15" fill="white" stroke="black" r="7.5" style="stroke-width: 2"/>
<path d="M 15 15 L 7.5 15 A 7.5 7.5 0 0 1 15 7.5 Z" fill="black"/>
<path d="M 15 15 L 22.5 15 A 7.5 7.5 0 0 1 15 22.5 Z" fill="black"/>
</g>
</marker>
<marker id="section-level-marker" markerHeight="11" markerWidth="90" refX="20" refY="10">
<g>
<path d="M 0 1 L 20 1 L 10 11 Z" fill="black" />
<path d="M 0 1 L 90 1" class="annotation" style="stroke-width:1;" />
</g>
</marker>
<marker id="breakline-marker" markerHeight="20" markerWidth="15" refX="7.5" refY="10">
<g>
<path d="M 0 10 L 5 20 L 7.5 10" class="annotation" style="stroke-width:1; fill: white;" />
<path d="M 7.5 10 L 10 0 L 15 10" class="annotation" style="stroke-width:1; fill: white;" />
</g>
</marker>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 65 KiB

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" ?>
<svg baseProfile="full" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="rectangle-tag">
<rect x="-6" y="-2.5" width="12" height="5" fill="white" stroke="black" style="stroke-width: 0.25;" />
</g>
<g id="door-tag">
<circle cy="1.75" r="5" fill="white" stroke="black" style="stroke-width: 0.25;" />
<line x1="-5" y1="1.75" x2="5" y2="1.75" style="stroke:black; stroke-width: 0.25;" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 572 B

@@ -0,0 +1,208 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 841 594"
id="root"
version="1.1"
height="594mm"
width="841mm">
<defs
id="defs901" />
<metadata
id="metadata90683">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<desc
id="desc89610">/home/dion/Projects/IfcOpenShell/src/blenderbim/titleblock.dxf - scale = 1.000000, origin = (0.000000, 0.000000), method = manual</desc>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.07874;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
id="rect1036"
width="841"
height="594"
x="-4.3253262e-05"
y="3.1719057e-05" />
<g
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)"
id="g90667"
style="stroke-width:0.94488188;stroke-miterlimit:4;stroke-dasharray:none">
<rect
y="-1046.7792"
x="75.740562"
height="2093.5583"
width="3027.1016"
id="rect116616"
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.88976377;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
id="text116526"
y="909.15491"
x="113.70713"
style="font-style:normal;font-weight:normal;font-size:15.1536px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.1536px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.94488188;stroke-miterlimit:4;stroke-dasharray:none"
y="909.15491"
x="113.70713"
id="tspan116524">REV. NO.</tspan></text>
<path
id="path116530"
d="M 75.590564,895.24802 H 3102.9921"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path116532"
d="M 151.6811,895.24802 V 1046.9291"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 454.04331,895.24802 V 1046.9291"
id="path116534" />
<path
id="path116536"
d="M 529.63386,895.24802 V 1046.4302"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 605.22441,895.24802 V 1046.9291"
id="path116538" />
<path
id="path116540"
d="M 75.590564,914.14565 H 605.22441"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 75.590564,933.04329 H 605.22441"
id="path116542" />
<path
id="path116544"
d="M 75.590564,951.94093 H 605.22441"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 75.590564,970.83857 H 605.22441"
id="path116546" />
<path
id="path116548"
d="M 75.590564,989.73621 H 605.22441"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 75.590564,1008.6338 H 605.22441"
id="path116550" />
<path
id="path116552"
d="M 75.590564,1027.5315 H 605.22441"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path116576"
d="M 2800.5,895.24802 V 1046.9291"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path116578"
d="m 2800.5,1008.6338 h 302.4921"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path116598"
d="m 3027.4027,1008.6338 v 38.2953"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:15.1536px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
x="302.86591"
y="909.15491"
id="text1395"><tspan
id="tspan1393"
x="302.86591"
y="909.15491"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.1536px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.94488188;stroke-miterlimit:4;stroke-dasharray:none">DESCRIPTION</tspan></text>
<text
id="text1399"
y="909.15491"
x="491.97513"
style="font-style:normal;font-weight:normal;font-size:15.1536px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.1536px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.94488188;stroke-miterlimit:4;stroke-dasharray:none"
y="909.15491"
x="491.97513"
id="tspan1397">AUTHOR</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:16.0591px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
x="568.05585"
y="909.15485"
id="text1403"><tspan
id="tspan1401"
x="568.05585"
y="909.15485"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.0591px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.94488188;stroke-miterlimit:4;stroke-dasharray:none">DATE</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:11.2271px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
x="2839.5081"
y="1020.4988"
id="text1421"><tspan
id="tspan1419"
x="2839.5081"
y="1020.4988"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.2271px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.94488188;stroke-miterlimit:4;stroke-dasharray:none">DRAWING NUMBER</tspan></text>
<text
id="text1429"
y="1020.4988"
x="3038.5586"
style="font-style:normal;font-weight:normal;font-size:11.2271px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.94488188;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.2271px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.94488188;stroke-miterlimit:4;stroke-dasharray:none"
y="1020.4988"
x="3038.5586"
id="tspan1427">REV</tspan></text>
<text
id="text2529"
y="1036.1166"
x="3030.9653"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3918px;line-height:125%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="stroke-width:0.999999px"
y="1036.1166"
x="3030.9653"
id="tspan2527">{{revision}}</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3918px;line-height:125%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="2804.7021"
y="1036.1166"
id="text2533"><tspan
id="tspan2531"
x="2804.7021"
y="1036.1166"
style="stroke-width:0.999999px">{{number}}</tspan></text>
</g>
<g
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)"
id="g90669"
style="stroke-width:3.77953" />
<g
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)"
id="g90671"
style="stroke-width:3.77953" />
<g
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)"
id="g90673"
style="stroke-width:3.77953" />
<g
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)"
id="g90675"
style="stroke-width:3.77953" />
<g
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)"
id="g90677"
style="stroke-width:3.77953" />
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,203 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
width="594mm"
height="420mm"
version="1.1"
id="root"
viewBox="0 0 594 420">
<defs
id="defs901" />
<metadata
id="metadata90683">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<desc
id="desc89610">/home/dion/Projects/IfcOpenShell/src/blenderbim/titleblock.dxf - scale = 1.000000, origin = (0.000000, 0.000000), method = manual</desc>
<rect
y="3.1753578e-05"
x="-4.3300333e-05"
height="420"
width="594.64642"
id="rect1036"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.07874;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000" />
<rect
y="20.25"
x="20.25"
height="379.5"
width="553.5"
id="rect116616"
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
id="text116526"
y="363.54721"
x="30.085009"
style="font-style:normal;font-weight:normal;font-size:4.00939px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.00939px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none"
y="363.54721"
x="30.085009"
id="tspan116524">REV. NO.</tspan></text>
<path
id="path116530"
d="m 20.000001,359.86771 553.749999,0"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path116532"
d="M 40.132289,359.86771 V 400"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 120.13229,359.86771 V 400"
id="path116534" />
<path
id="path116536"
d="M 140.13229,359.86771 V 399.868"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 160.13229,359.86771 V 400"
id="path116538" />
<path
id="path116540"
d="M 20.000001,364.86771 H 160.13229"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 20.000001,369.86771 H 160.13229"
id="path116542" />
<path
id="path116544"
d="M 20.000001,374.86771 H 160.13229"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 20.000001,379.86771 H 160.13229"
id="path116546" />
<path
id="path116548"
d="M 20.000001,384.86771 H 160.13229"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 20.000001,389.8677 H 160.13229"
id="path116550" />
<path
id="path116552"
d="M 20.000001,394.86772 H 160.13229"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:4.00939px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="80.13327"
y="363.54721"
id="text1395"><tspan
id="tspan1393"
x="80.13327"
y="363.54721"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.00939px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none">DESCRIPTION</tspan></text>
<text
id="text1399"
y="363.54721"
x="130.16841"
style="font-style:normal;font-weight:normal;font-size:4.00939px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.00939px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none"
y="363.54721"
x="130.16841"
id="tspan1397">AUTHOR</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:4.24897px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="150.29811"
y="363.54721"
id="text1403"><tspan
id="tspan1401"
x="150.29811"
y="363.54721"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.24897px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none">DATE</tspan></text>
<path
id="path116576"
d="M 493.96563,359.86771 V 400"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path116578"
d="M 493.96563,389.8677 H 574"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path116598"
d="M 554.00031,389.8677 V 400"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:2.9705px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="504.28653"
y="393.00699"
id="text1421"><tspan
id="tspan1419"
x="504.28653"
y="393.00699"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.9705px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none">DRAWING NUMBER</tspan></text>
<text
id="text1429"
y="393.00699"
x="556.9519"
style="font-style:normal;font-weight:normal;font-size:2.9705px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.9705px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none"
y="393.00699"
x="556.9519"
id="tspan1427">REV</tspan></text>
<text
id="text2529"
y="397.13919"
x="554.94287"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.54325px;line-height:125%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
style="stroke-width:0.264583px"
y="397.13919"
x="554.94287"
id="tspan2527">{{revision}}</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.54325px;line-height:125%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="495.07742"
y="397.13919"
id="text2533"><tspan
id="tspan2531"
x="495.07742"
y="397.13919"
style="stroke-width:0.264583px">{{number}}</tspan></text>
<g
style="stroke-width:3.77953"
id="g90669"
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)" />
<g
style="stroke-width:3.77953"
id="g90671"
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)" />
<g
style="stroke-width:3.77953"
id="g90673"
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)" />
<g
style="stroke-width:3.77953"
id="g90675"
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)" />
<g
style="stroke-width:3.77953"
id="g90677"
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)" />
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,207 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
width="420mm"
height="297mm"
version="1.1"
id="root"
viewBox="0 0 420 297">
<defs
id="defs901" />
<metadata
id="metadata90683">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<desc
id="desc89610">/home/dion/Projects/IfcOpenShell/src/blenderbim/titleblock.dxf - scale = 1.000000, origin = (0.000000, 0.000000), method = manual</desc>
<rect
y="3.1753578e-05"
x="-4.3300333e-05"
height="297"
width="420"
id="rect1036"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.07874;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000" />
<rect
y="10.249999"
x="10.249999"
height="276.5"
width="399.5"
id="rect116616"
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.49999897;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
id="text116526"
y="250.54721"
x="20.085007"
style="font-style:normal;font-weight:normal;font-size:4.00939px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.00939px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none"
y="250.54721"
x="20.085007"
id="tspan116524">REV. NO.</tspan></text>
<path
id="path116530"
d="m 10,246.86771 399.75,0"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path116532"
d="M 30.132288,246.86771 V 287"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 110.13229,246.86771 V 287"
id="path116534" />
<path
id="path116536"
d="M 130.13229,246.86771 V 286.868"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 150.13229,246.86771 V 287"
id="path116538" />
<path
id="path116540"
d="M 10,251.86771 H 150.13229"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 10,256.86771 H 150.13229"
id="path116542" />
<path
id="path116544"
d="M 10,261.86771 H 150.13229"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 10,266.86771 H 150.13229"
id="path116546" />
<path
id="path116548"
d="M 10,271.86771 H 150.13229"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 10,276.8677 H 150.13229"
id="path116550" />
<path
id="path116552"
d="M 10,281.86772 H 150.13229"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:4.00939px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="70.13327"
y="250.54721"
id="text1395"><tspan
id="tspan1393"
x="70.13327"
y="250.54721"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.00939px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none">DESCRIPTION</tspan></text>
<text
id="text1399"
y="250.54721"
x="120.16841"
style="font-style:normal;font-weight:normal;font-size:4.00939px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.00939px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none"
y="250.54721"
x="120.16841"
id="tspan1397">AUTHOR</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:4.24897px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="140.29811"
y="250.54721"
id="text1403"><tspan
id="tspan1401"
x="140.29811"
y="250.54721"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.24897px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none">DATE</tspan></text>
<g
transform="translate(-154)"
id="g3735">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 483.96563,246.86771 V 287"
id="path116576" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 483.96563,276.8677 H 564"
id="path116578" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 544.00031,276.8677 V 287"
id="path116598" />
<text
id="text1421"
y="280.00699"
x="494.28653"
style="font-style:normal;font-weight:normal;font-size:2.9705px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.9705px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none"
y="280.00699"
x="494.28653"
id="tspan1419">DRAWING NUMBER</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:2.9705px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="546.9519"
y="280.00699"
id="text1429"><tspan
id="tspan1427"
x="546.9519"
y="280.00699"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.9705px;line-height:100%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none">REV</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.54325px;line-height:125%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="544.94287"
y="284.13919"
id="text2529"><tspan
id="tspan2527"
x="544.94287"
y="284.13919"
style="stroke-width:0.264583px">{{revision}}</tspan></text>
<text
id="text2533"
y="284.13919"
x="485.07742"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.54325px;line-height:125%;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xml:space="preserve"><tspan
style="stroke-width:0.264583px"
y="284.13919"
x="485.07742"
id="tspan2531">{{number}}</tspan></text>
</g>
<g
style="stroke-width:3.77953"
id="g90669"
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)" />
<g
style="stroke-width:3.77953"
id="g90671"
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)" />
<g
style="stroke-width:3.77953"
id="g90673"
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)" />
<g
style="stroke-width:3.77953"
id="g90675"
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)" />
<g
style="stroke-width:3.77953"
id="g90677"
transform="matrix(0.26458333,0,0,0.26458334,-3.180917e-5,297.00003)" />
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="root"
version="1.1"
viewBox="0 0 50.222462 10"
height="10mm"
width="50.222462mm"
sodipodi:docname="view-title.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview14"
showgrid="false"
inkscape:zoom="4.2318262"
inkscape:cx="61.584312"
inkscape:cy="26.339719"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs2" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(-27.82024,-96.649986)"
id="layer1">
<circle
r="4.8499999"
cy="101.64999"
cx="32.82024"
id="path853"
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.30000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path855"
d="m 37.67024,101.64999 40.37246,-1e-5"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
id="text859"
y="103.10933"
x="32.822662"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.80276871px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.96055365px;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:center;text-anchor:middle;stroke-width:0.26458332px"
y="103.10933"
x="32.822662"
id="tspan857">{{no}}</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.71626091px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458329px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="39.12896"
y="100.19173"
id="text863"><tspan
id="tspan861"
x="39.12896"
y="100.19173"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.54325247px;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:start;text-anchor:start;stroke-width:0.26458329px">{{name}}</tspan></text>
<text
id="text867"
y="105.0553"
x="39.285267"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.71626282px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.54325247px;font-family:'OpenGost Type B TT';-inkscape-font-specification:'OpenGost Type B TT';text-align:start;text-anchor:start;stroke-width:0.26458332px"
y="105.0553"
x="39.285267"
id="tspan865">{{scale}}</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

@@ -0,0 +1,2 @@
Name,foo
TransomThickness,500
1 Name foo
2 TransomThickness 500
+187
View File
@@ -0,0 +1,187 @@
import os
import bpy
import json
import numpy as np
import datetime
import zipfile
import tempfile
import ifcopenshell
import ifcopenshell.util.placement
import ifcopenshell.api
from ifcopenshell.api.spatial.data import Data as SpatialData
from blenderbim.bim.ifc import IfcStore
import addon_utils
class IfcExporter:
def __init__(self, ifc_export_settings):
self.ifc_export_settings = ifc_export_settings
def export(self):
self.file = IfcStore.get_file()
self.set_header()
if bpy.context.scene.BIMProjectProperties.is_authoring:
self.sync_object_placements_and_deletions()
self.sync_edited_objects()
extension = self.ifc_export_settings.output_file.split(".")[-1]
if extension == "ifczip":
with tempfile.TemporaryDirectory() as unzipped_path:
filename, ext = os.path.splitext(os.path.basename(self.ifc_export_settings.output_file))
tmp_name = "{}.ifc".format(filename)
tmp_file = os.path.join(unzipped_path, tmp_name)
self.file.write(tmp_file)
with zipfile.ZipFile(
self.ifc_export_settings.output_file, mode="w", compression=zipfile.ZIP_DEFLATED, compresslevel=9
) as zf:
zf.write(tmp_file)
elif extension == "ifc":
self.file.write(self.ifc_export_settings.output_file)
elif extension == "ifcjson":
import ifcjson
if self.ifc_export_settings.json_version == "4":
jsonData = ifcjson.IFC2JSON4(self.file, self.ifc_export_settings.json_compact).spf2Json()
with open(self.ifc_export_settings.output_file, "w") as outfile:
json.dump(jsonData, outfile, indent=None if self.ifc_export_settings.json_compact else 4)
elif self.ifc_export_settings.json_version == "5a":
jsonData = ifcjson.IFC2JSON5a(self.file, self.ifc_export_settings.json_compact).spf2Json()
with open(self.ifc_export_settings.output_file, "w") as outfile:
json.dump(jsonData, outfile, indent=None if self.ifc_export_settings.json_compact else 4)
def set_header(self):
self.file.wrapped_data.header.file_name.name = os.path.basename(self.ifc_export_settings.output_file)
self.file.wrapped_data.header.file_name.time_stamp = (
datetime.datetime.utcnow()
.replace(tzinfo=datetime.timezone.utc)
.astimezone()
.replace(microsecond=0)
.isoformat()
)
self.file.wrapped_data.header.file_name.preprocessor_version = "IfcOpenShell {}".format(ifcopenshell.version)
self.file.wrapped_data.header.file_name.originating_system = "{} {}".format(
self.get_application_name(), self.get_application_version()
)
def sync_object_placements_and_deletions(self):
self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(self.file)
to_delete = []
for ifc_definition_id, obj in IfcStore.id_map.items():
try:
self.sync_object_placement(obj)
self.sync_object_container(ifc_definition_id, obj)
except ReferenceError:
pass # The object is likely deleted
if self.should_delete(obj):
to_delete.append(ifc_definition_id)
SpatialData.purge()
for ifc_definition_id in to_delete:
product = self.file.by_id(ifc_definition_id)
IfcStore.unlink_element(product)
ifcopenshell.api.run("root.remove_product", self.file, **{"product": product})
def sync_edited_objects(self):
for obj in IfcStore.edited_objs.copy():
if not obj:
continue
try:
bpy.ops.bim.update_representation(obj=obj.name)
except ReferenceError:
pass # The object is likely deleted
IfcStore.edited_objs.clear()
def sync_object_placement(self, obj):
blender_matrix = np.matrix(obj.matrix_world)
element = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)
if not hasattr(element, "ObjectPlacement"):
return
ifc_matrix = ifcopenshell.util.placement.get_local_placement(element.ObjectPlacement)
ifc_matrix[0][3] *= self.unit_scale
ifc_matrix[1][3] *= self.unit_scale
ifc_matrix[2][3] *= self.unit_scale
props = bpy.context.scene.BIMGeoreferenceProperties
if props.has_blender_offset and props.blender_offset_type == "OBJECT_PLACEMENT":
ifc_matrix = ifcopenshell.util.geolocation.global2local(
ifc_matrix,
float(props.blender_eastings) * self.unit_scale,
float(props.blender_northings) * self.unit_scale,
float(props.blender_orthogonal_height) * self.unit_scale,
float(props.blender_x_axis_abscissa),
float(props.blender_x_axis_ordinate),
)
if not np.allclose(ifc_matrix, blender_matrix, atol=0.0001):
bpy.ops.bim.edit_object_placement(obj=obj.name)
def sync_object_container(self, guid, obj):
element = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)
element_collection = bpy.data.collections.get(obj.name)
if self.file.schema == "IFC2X3":
if element.is_a("IfcProject"):
return
elif element.is_a("IfcContext"):
return
if (
(element.is_a("IfcElement") and element_collection)
or element.is_a("IfcSpatialStructureElement")
or element.is_a("IfcGrid")
):
try:
parent_collection = [c for c in bpy.data.collections if c.children.get(element_collection.name)][0]
except:
return # Out of the spatial tree
else:
parent_collection = obj.users_collection[0]
parent_obj = bpy.data.objects.get(parent_collection.name)
if not parent_obj or not parent_obj.BIMObjectProperties.ifc_definition_id:
return
parent = self.file.by_id(parent_obj.BIMObjectProperties.ifc_definition_id)
if parent.is_a("IfcSpatialStructureElement") and not element.is_a("IfcSpatialStructureElement"):
if parent != ifcopenshell.util.element.get_container(element):
bpy.ops.bim.assign_container(relating_structure=parent.id(), related_element=obj.name)
elif parent != ifcopenshell.util.element.get_aggregate(element):
bpy.ops.bim.assign_object(relating_object=parent_obj.name, related_object=obj.name)
def should_delete(self, obj):
try:
# This will throw an exception if the Blender object no longer exists
foo = obj.name
return False
except:
return True
def get_application_name(self):
return "BlenderBIM"
def get_application_version(self):
return ".".join(
[
str(x)
for x in [
addon.bl_info.get("version", (-1, -1, -1))
for addon in addon_utils.modules()
if addon.bl_info["name"] == "BlenderBIM"
][0]
]
)
class IfcExportSettings:
def __init__(self):
self.logger = None
self.output_file = None
@staticmethod
def factory(context, output_file, logger):
scene_bim = context.scene.BIMProperties
settings = IfcExportSettings()
settings.output_file = output_file
settings.logger = logger
return settings
+272
View File
@@ -0,0 +1,272 @@
import bpy
import json
import addon_utils
import ifcopenshell.api.owner.settings
from bpy.app.handlers import persistent
from blenderbim.bim.ifc import IfcStore
from ifcopenshell.api.attribute.data import Data as AttributeData
from ifcopenshell.api.type.data import Data as TypeData
global_subscription_owner = object()
def mode_callback(obj, data):
for obj in bpy.context.selected_objects + [bpy.context.active_object]:
if (
obj.mode != "EDIT"
or not obj.data
or not isinstance(obj.data, (bpy.types.Mesh, bpy.types.Curve, bpy.types.TextCurve))
or not obj.BIMObjectProperties.ifc_definition_id
or not bpy.context.scene.BIMProjectProperties.is_authoring
):
return
if obj.data.BIMMeshProperties.ifc_definition_id:
representation = IfcStore.get_file().by_id(obj.data.BIMMeshProperties.ifc_definition_id)
if representation.RepresentationType in ["Tessellation", "Brep", "Annotation2D"]:
IfcStore.edited_objs.add(obj)
elif IfcStore.get_file().by_id(obj.BIMObjectProperties.ifc_definition_id).is_a("IfcGridAxis"):
IfcStore.edited_objs.add(obj)
def name_callback(obj, data):
# Blender material names are up to 63 UTF-8 bytes
if not obj.BIMObjectProperties.ifc_definition_id or "/" not in obj.name or len(bytes(obj.name, "utf-8")) >= 63:
return
element = IfcStore.get_file().by_id(obj.BIMObjectProperties.ifc_definition_id)
if not element.is_a("IfcRoot"):
return
if element.is_a("IfcSpatialStructureElement") or (hasattr(element, "IsDecomposedBy") and element.IsDecomposedBy):
collection = obj.users_collection[0]
collection.name = obj.name
if element.is_a("IfcGrid"):
axis_obj = IfcStore.id_map[element.UAxes[0].id()]
axis_collection = axis_obj.users_collection[0]
grid_collection = None
for collection in bpy.data.collections:
if axis_collection.name in collection.children.keys():
grid_collection = collection
break
if grid_collection:
grid_collection.name = obj.name
if element.is_a("IfcTypeProduct"):
TypeData.purge()
element.Name = "/".join(obj.name.split("/")[1:])
AttributeData.load(IfcStore.get_file(), obj.BIMObjectProperties.ifc_definition_id)
def active_object_callback():
obj = bpy.context.active_object
for obj in bpy.context.selected_objects:
if not obj.BIMObjectProperties.ifc_definition_id:
continue
if IfcStore.id_map[obj.BIMObjectProperties.ifc_definition_id] != obj:
bpy.ops.bim.copy_class(obj=obj.name)
def subscribe_to(object, data_path, callback):
subscribe_to = object.path_resolve(data_path, False)
bpy.msgbus.subscribe_rna(
key=subscribe_to,
owner=object,
args=(
object,
data_path,
),
notify=callback,
options={
"PERSISTENT",
},
)
def purge_module_data():
from blenderbim.bim import modules
for name, value in modules.items():
try:
getattr(getattr(getattr(ifcopenshell.api, name), "data"), "Data").purge()
except AttributeError:
pass
try:
getattr(value, "prop").purge()
except AttributeError:
pass
@persistent
def loadIfcStore(scene):
IfcStore.purge()
ifc_file = IfcStore.get_file()
if not ifc_file:
return
IfcStore.get_schema()
[
IfcStore.link_element(ifc_file.by_id(o.BIMObjectProperties.ifc_definition_id), o)
for o in bpy.data.objects
if o.BIMObjectProperties.ifc_definition_id
]
purge_module_data()
@persistent
def ensureIfcExported(scene):
if IfcStore.get_file() and not bpy.context.scene.BIMProperties.ifc_file:
bpy.ops.export_ifc.bim("INVOKE_DEFAULT")
def get_application(ifc):
version = get_application_version()
for element in ifc.by_type("IfcApplication"):
if element.ApplicationIdentifier == "BlenderBIM" and element.Version == version:
return element
return ifc.create_entity(
"IfcApplication",
**{
"ApplicationDeveloper": create_application_organisation(ifc),
"Version": get_application_version(),
"ApplicationFullName": "BlenderBIM Add-on",
"ApplicationIdentifier": "BlenderBIM",
},
)
def get_application_version():
return ".".join(
[
str(x)
for x in [
addon.bl_info.get("version", (-1, -1, -1))
for addon in addon_utils.modules()
if addon.bl_info["name"] == "BlenderBIM"
][0]
]
)
def create_application_organisation(ifc):
return ifc.create_entity(
"IfcOrganization",
**{
"Name": "IfcOpenShell",
"Description": "IfcOpenShell is an open source (LGPL) software library that helps users and software developers to work with the IFC file format.",
"Roles": [ifc.create_entity("IfcActorRole", **{"Role": "USERDEFINED", "UserDefinedRole": "CONTRIBUTOR"})],
"Addresses": [
ifc.create_entity(
"IfcTelecomAddress",
**{
"Purpose": "USERDEFINED",
"UserDefinedPurpose": "WEBPAGE",
"Description": "The main webpage of the software collection.",
"WWWHomePageURL": "https://ifcopenshell.org",
},
),
ifc.create_entity(
"IfcTelecomAddress",
**{
"Purpose": "USERDEFINED",
"UserDefinedPurpose": "WEBPAGE",
"Description": "The BlenderBIM Add-on webpage of the software collection.",
"WWWHomePageURL": "https://blenderbim.org",
},
),
ifc.create_entity(
"IfcTelecomAddress",
**{
"Purpose": "USERDEFINED",
"UserDefinedPurpose": "REPOSITORY",
"Description": "The source code repository of the software collection.",
"WWWHomePageURL": "https://github.com/IfcOpenShell/IfcOpenShell.git",
},
),
],
},
)
@persistent
def setDefaultProperties(scene):
global global_subscription_owner
active_object_key = bpy.types.LayerObjects, "active"
bpy.msgbus.subscribe_rna(
key=active_object_key, owner=global_subscription_owner, args=(), notify=active_object_callback
)
ifcopenshell.api.owner.settings.get_person = (
lambda ifc: ifc.by_id(int(bpy.context.scene.BIMOwnerProperties.user_person))
if bpy.context.scene.BIMOwnerProperties.user_person
else None
)
ifcopenshell.api.owner.settings.get_organisation = (
lambda ifc: ifc.by_id(int(bpy.context.scene.BIMOwnerProperties.user_organisation))
if bpy.context.scene.BIMOwnerProperties.user_organisation
else None
)
ifcopenshell.api.owner.settings.get_application = get_application
if len(bpy.context.scene.DocProperties.drawing_styles) == 0:
drawing_style = bpy.context.scene.DocProperties.drawing_styles.add()
drawing_style.name = "Technical"
drawing_style.render_type = "VIEWPORT"
drawing_style.raster_style = json.dumps(
{
"bpy.data.worlds[0].color": (1, 1, 1),
"bpy.context.scene.render.engine": "BLENDER_WORKBENCH",
"bpy.context.scene.render.film_transparent": False,
"bpy.context.scene.display.shading.show_object_outline": True,
"bpy.context.scene.display.shading.show_cavity": False,
"bpy.context.scene.display.shading.cavity_type": "BOTH",
"bpy.context.scene.display.shading.curvature_ridge_factor": 1,
"bpy.context.scene.display.shading.curvature_valley_factor": 1,
"bpy.context.scene.view_settings.view_transform": "Standard",
"bpy.context.scene.display.shading.light": "FLAT",
"bpy.context.scene.display.shading.color_type": "SINGLE",
"bpy.context.scene.display.shading.single_color": (1, 1, 1),
"bpy.context.scene.display.shading.show_shadows": False,
"bpy.context.scene.display.shading.shadow_intensity": 0.5,
"bpy.context.scene.display.light_direction": (0.5, 0.5, 0.5),
"bpy.context.scene.view_settings.use_curve_mapping": False,
"space.overlay.show_wireframes": True,
"space.overlay.wireframe_threshold": 0,
"space.overlay.show_floor": False,
"space.overlay.show_axis_x": False,
"space.overlay.show_axis_y": False,
"space.overlay.show_axis_z": False,
"space.overlay.show_object_origins": False,
"space.overlay.show_relationship_lines": False,
}
)
drawing_style = bpy.context.scene.DocProperties.drawing_styles.add()
drawing_style.name = "Shaded"
drawing_style.render_type = "VIEWPORT"
drawing_style.raster_style = json.dumps(
{
"bpy.data.worlds[0].color": (1, 1, 1),
"bpy.context.scene.render.engine": "BLENDER_WORKBENCH",
"bpy.context.scene.render.film_transparent": False,
"bpy.context.scene.display.shading.show_object_outline": True,
"bpy.context.scene.display.shading.show_cavity": True,
"bpy.context.scene.display.shading.cavity_type": "BOTH",
"bpy.context.scene.display.shading.curvature_ridge_factor": 1,
"bpy.context.scene.display.shading.curvature_valley_factor": 1,
"bpy.context.scene.view_settings.view_transform": "Standard",
"bpy.context.scene.display.shading.light": "STUDIO",
"bpy.context.scene.display.shading.color_type": "MATERIAL",
"bpy.context.scene.display.shading.single_color": (1, 1, 1),
"bpy.context.scene.display.shading.show_shadows": True,
"bpy.context.scene.display.shading.shadow_intensity": 0.5,
"bpy.context.scene.display.light_direction": (0.5, 0.5, 0.5),
"bpy.context.scene.view_settings.use_curve_mapping": False,
"space.overlay.show_wireframes": True,
"space.overlay.wireframe_threshold": 0,
"space.overlay.show_floor": False,
"space.overlay.show_axis_x": False,
"space.overlay.show_axis_y": False,
"space.overlay.show_axis_z": False,
"space.overlay.show_object_origins": False,
"space.overlay.show_relationship_lines": False,
}
)
drawing_style = bpy.context.scene.DocProperties.drawing_styles.add()
drawing_style.name = "Blender Default"
drawing_style.render_type = "DEFAULT"
bpy.ops.bim.save_drawing_style(index="2")
+75
View File
@@ -0,0 +1,75 @@
import bpy
import json
import math
import ifcopenshell
import ifcopenshell.util.attribute
from mathutils import geometry
from mathutils import Vector
from blenderbim.bim.ifc import IfcStore
def draw_attributes(props, layout):
for attribute in props:
row = layout.row(align=True)
if attribute.data_type == "string":
row.prop(attribute, "string_value", text=attribute.name)
elif attribute.data_type == "boolean":
row.prop(attribute, "bool_value", text=attribute.name)
elif attribute.data_type == "integer":
row.prop(attribute, "int_value", text=attribute.name)
elif attribute.data_type == "float":
row.prop(attribute, "float_value", text=attribute.name)
elif attribute.data_type == "enum":
row.prop(attribute, "enum_value", text=attribute.name)
if attribute.is_optional:
row.prop(attribute, "is_null", icon="RADIOBUT_OFF" if attribute.is_null else "RADIOBUT_ON", text="")
def import_attributes(ifc_class, props, data, callback=None):
for attribute in IfcStore.get_schema().declaration_by_name(ifc_class).all_attributes():
data_type = ifcopenshell.util.attribute.get_primitive_type(attribute)
if data_type == "entity" or (isinstance(data_type, tuple) and "entity" in ".".join(data_type)):
continue
new = props.add()
new.name = attribute.name()
new.is_null = data[attribute.name()] is None
new.is_optional = attribute.optional()
new.data_type = data_type if isinstance(data_type, str) else ""
is_handled_by_callback = callback(attribute.name(), new, data) if callback else None
if is_handled_by_callback:
pass # Our job is done
elif is_handled_by_callback is False:
props.remove(len(props) - 1)
elif data_type == "string":
new.string_value = "" if new.is_null else data[attribute.name()]
elif data_type == "boolean":
new.bool_value = False if new.is_null else data[attribute.name()]
elif data_type == "integer":
new.int_value = 0 if new.is_null else data[attribute.name()]
elif data_type == "float":
new.float_value = 0.0 if new.is_null else data[attribute.name()]
elif data_type == "enum":
new.enum_items = json.dumps(ifcopenshell.util.attribute.get_enum_items(attribute))
if data[attribute.name()]:
new.enum_value = data[attribute.name()]
def export_attributes(props, callback=None):
attributes = {}
for attribute in props:
is_handled_by_callback = callback(attributes, attribute) if callback else False
if attribute.is_null:
attributes[attribute.name] = None
elif is_handled_by_callback:
pass # Our job is done
elif attribute.data_type == "string":
attributes[attribute.name] = attribute.string_value
elif attribute.data_type == "boolean":
attributes[attribute.name] = attribute.bool_value
elif attribute.data_type == "integer":
attributes[attribute.name] = attribute.int_value
elif attribute.data_type == "float":
attributes[attribute.name] = attribute.float_value
elif attribute.data_type == "enum":
attributes[attribute.name] = attribute.enum_value
return attributes
+96
View File
@@ -0,0 +1,96 @@
import bpy
import ifcopenshell
import blenderbim.bim.handler
class IfcStore:
path = ""
file = None
schema = None
id_map = {}
guid_map = {}
edited_objs = set()
pset_template_path = ""
pset_template_file = None
library_path = ""
library_file = None
element_listeners = set()
@staticmethod
def purge():
IfcStore.path = ""
IfcStore.file = None
IfcStore.schema = None
IfcStore.id_map = {}
IfcStore.guid_map = {}
IfcStore.edited_objs = set()
IfcStore.pset_template_path = ""
IfcStore.pset_template_file = None
IfcStore.library_path = ""
IfcStore.library_file = None
@staticmethod
def get_file():
if IfcStore.file is None:
IfcStore.path = bpy.context.scene.BIMProperties.ifc_file
if IfcStore.path:
try:
IfcStore.file = ifcopenshell.open(IfcStore.path)
except:
IfcStore.file
return IfcStore.file
@staticmethod
def get_schema():
if IfcStore.file is None:
return
elif IfcStore.schema is None:
IfcStore.schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(IfcStore.file.schema)
return IfcStore.schema
@staticmethod
def get_element(id_or_guid):
if isinstance(id_or_guid, int):
map_object = IfcStore.id_map
else:
map_object = IfcStore.guid_map
try:
obj = map_object[id_or_guid]
obj.type # In case the object has been deleted, this triggers an exception
except:
return
return obj
@staticmethod
def add_element_listener(callback):
IfcStore.element_listeners.add(callback)
@staticmethod
def link_element(element, obj):
IfcStore.id_map[element.id()] = obj
if hasattr(element, "GlobalId"):
IfcStore.guid_map[element.GlobalId] = obj
obj.BIMObjectProperties.ifc_definition_id = element.id()
blenderbim.bim.handler.subscribe_to(obj, "mode", blenderbim.bim.handler.mode_callback)
blenderbim.bim.handler.subscribe_to(obj, "name", blenderbim.bim.handler.name_callback)
for listener in IfcStore.element_listeners:
listener(element, obj)
@staticmethod
def unlink_element(element=None, obj=None):
if element is None:
try:
element = IfcStore.get_file().by_id(obj.BIMObjectProperties.ifc_definition_id)
except:
pass
if element:
del IfcStore.id_map[element.id()]
else:
del IfcStore.id_map[obj.BIMObjectProperties.ifc_definition_id]
if element and hasattr(element, "GlobalId"):
del IfcStore.guid_map[element.GlobalId]
if obj:
obj.BIMObjectProperties.ifc_definition_id = 0
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,18 @@
import bpy
from . import ui, operator
classes = (
operator.AssignObject,
operator.EnableEditingAggregate,
operator.DisableEditingAggregate,
operator.AddAggregate,
ui.BIM_PT_aggregate,
)
def register():
pass
def unregister():
pass
@@ -0,0 +1,94 @@
import bpy
import ifcopenshell.api
from blenderbim.bim.ifc import IfcStore
from ifcopenshell.api.aggregate.data import Data
class AssignObject(bpy.types.Operator):
bl_idname = "bim.assign_object"
bl_label = "Assign Object"
relating_object: bpy.props.StringProperty()
related_object: bpy.props.StringProperty()
def execute(self, context):
self.file = IfcStore.get_file()
related_objects = (
[bpy.data.objects.get(self.related_object)] if self.related_object else bpy.context.selected_objects
)
relating_object = bpy.data.objects.get(self.relating_object)
if not relating_object or not relating_object.BIMObjectProperties.ifc_definition_id:
return {"FINISHED"}
for related_object in related_objects:
oprops = related_object.BIMObjectProperties
product = self.file.by_id(oprops.ifc_definition_id)
ifcopenshell.api.run(
"aggregate.assign_object",
self.file,
**{
"product": product,
"relating_object": self.file.by_id(relating_object.BIMObjectProperties.ifc_definition_id),
},
)
bpy.ops.bim.edit_object_placement(obj=related_object.name)
Data.load(IfcStore.get_file(), oprops.ifc_definition_id)
bpy.ops.bim.disable_editing_aggregate(obj=related_object.name)
spatial_collection = bpy.data.collections.get(related_object.name)
relating_collection = bpy.data.collections.get(relating_object.name)
if spatial_collection:
self.remove_collection(bpy.context.scene.collection, spatial_collection)
for collection in bpy.data.collections:
if collection == relating_collection:
if not collection.children.get(spatial_collection.name):
collection.children.link(spatial_collection)
continue
self.remove_collection(collection, spatial_collection)
else:
for collection in related_object.users_collection:
if collection.name.startswith("Ifc"):
collection.objects.unlink(related_object)
relating_collection.objects.link(related_object)
return {"FINISHED"}
def remove_collection(self, parent, child):
try:
parent.children.unlink(child)
except:
pass
class EnableEditingAggregate(bpy.types.Operator):
bl_idname = "bim.enable_editing_aggregate"
bl_label = "Enable Editing Aggregate"
def execute(self, context):
bpy.context.active_object.BIMObjectProperties.relating_object = None
bpy.context.active_object.BIMObjectProperties.is_editing_aggregate = True
return {"FINISHED"}
class DisableEditingAggregate(bpy.types.Operator):
bl_idname = "bim.disable_editing_aggregate"
bl_label = "Disable Editing Aggregate"
obj: bpy.props.StringProperty()
def execute(self, context):
obj = bpy.data.objects.get(self.obj) if self.obj else bpy.context.active_object
obj.BIMObjectProperties.is_editing_aggregate = False
return {"FINISHED"}
class AddAggregate(bpy.types.Operator):
bl_idname = "bim.add_aggregate"
bl_label = "Add Aggregate"
obj: bpy.props.StringProperty()
def execute(self, context):
obj = bpy.data.objects.get(self.obj) if self.obj else bpy.context.active_object
aggregate_collection = bpy.data.collections.new("IfcElementAssembly/Assembly")
bpy.context.scene.collection.children.link(aggregate_collection)
aggregate = bpy.data.objects.new("Assembly", None)
aggregate_collection.objects.link(aggregate)
bpy.ops.bim.assign_class(obj=aggregate.name, ifc_class="IfcElementAssembly")
bpy.ops.bim.assign_object(related_object=obj.name, relating_object=aggregate.name)
return {"FINISHED"}
@@ -0,0 +1,49 @@
from bpy.types import Panel
from ifcopenshell.api.aggregate.data import Data
from blenderbim.bim.ifc import IfcStore
class BIM_PT_aggregate(Panel):
bl_label = "IFC Aggregates"
bl_idname = "BIM_PT_aggregate"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "object"
@classmethod
def poll(cls, context):
props = context.active_object.BIMObjectProperties
if not props.ifc_definition_id:
return False
if not IfcStore.get_file().by_id(props.ifc_definition_id).is_a("IfcObjectDefinition"):
return False
if props.ifc_definition_id not in Data.products:
Data.load(IfcStore.get_file(), props.ifc_definition_id)
if not Data.products[props.ifc_definition_id]:
return False
return True
def draw(self, context):
props = context.active_object.BIMObjectProperties
if not props.ifc_definition_id:
return
if props.ifc_definition_id not in Data.products:
Data.load(IfcStore.get_file(), props.ifc_definition_id)
if props.is_editing_aggregate:
row = self.layout.row(align=True)
row.prop(props, "relating_object", text="")
if props.relating_object:
row.operator("bim.assign_object", icon="CHECKMARK", text="").relating_object = props.relating_object.name
row.operator("bim.disable_editing_aggregate", icon="X", text="")
else:
row = self.layout.row(align=True)
name = "{}/{}".format(
Data.products[props.ifc_definition_id]["type"], Data.products[props.ifc_definition_id]["Name"]
)
if name == "None/None":
name = "No Aggregate Found"
row.label(text=name)
row.operator("bim.enable_editing_aggregate", icon="GREASEPENCIL", text="")
row.operator("bim.add_aggregate", icon="ADD", text="")
@@ -0,0 +1,22 @@
import bpy
from . import ui, prop, operator
classes = (
operator.EnableEditingAttributes,
operator.DisableEditingAttributes,
operator.EditAttributes,
operator.GenerateGlobalId,
prop.BIMAttributeProperties,
ui.BIM_PT_object_attributes,
ui.BIM_PT_material_attributes,
)
def register():
bpy.types.Object.BIMAttributeProperties = bpy.props.PointerProperty(type=prop.BIMAttributeProperties)
bpy.types.Material.BIMAttributeProperties = bpy.props.PointerProperty(type=prop.BIMAttributeProperties)
def unregister():
del bpy.types.Object.BIMAttributeProperties
del bpy.types.Material.BIMAttributeProperties
@@ -0,0 +1,125 @@
import bpy
import json
import ifcopenshell
import ifcopenshell.api
from blenderbim.bim.ifc import IfcStore
from ifcopenshell.api.attribute.data import Data
class EnableEditingAttributes(bpy.types.Operator):
bl_idname = "bim.enable_editing_attributes"
bl_label = "Enable Editing Attributes"
obj: bpy.props.StringProperty()
obj_type: bpy.props.StringProperty()
def execute(self, context):
self.file = IfcStore.get_file()
if self.obj_type == "Object":
obj = bpy.data.objects.get(self.obj)
elif self.obj_type == "Material":
obj = bpy.data.materials.get(self.obj)
oprops = obj.BIMObjectProperties
props = obj.BIMAttributeProperties
while len(props.attributes) > 0:
props.attributes.remove(0)
for attribute in Data.products[oprops.ifc_definition_id]:
new = props.attributes.add()
if attribute["type"] == "entity" or (attribute["type"] == "list" and attribute["list_type"] == "entity"):
continue
new.name = attribute["name"]
new.is_null = attribute["is_null"]
if attribute["type"] == "string" or attribute["type"] == "list":
new.string_value = attribute["value"] or ""
elif attribute["type"] == "integer":
new.int_value = attribute["value"] or 0
elif attribute["type"] == "float":
new.float_value = attribute["value"] or 0.0
elif attribute["type"] == "enum":
new.enum_items = json.dumps(attribute["enum_items"])
if attribute["value"]:
new.enum_value = attribute["value"]
props.is_editing_attributes = True
return {"FINISHED"}
class DisableEditingAttributes(bpy.types.Operator):
bl_idname = "bim.disable_editing_attributes"
bl_label = "Disable Editing Attributes"
obj: bpy.props.StringProperty()
obj_type: bpy.props.StringProperty()
def execute(self, context):
if self.obj_type == "Object":
obj = bpy.data.objects.get(self.obj)
elif self.obj_type == "Material":
obj = bpy.data.materials.get(self.obj)
props = obj.BIMAttributeProperties
props.is_editing_attributes = False
return {"FINISHED"}
class EditAttributes(bpy.types.Operator):
bl_idname = "bim.edit_attributes"
bl_label = "Edit Attributes"
obj: bpy.props.StringProperty()
obj_type: bpy.props.StringProperty()
def execute(self, context):
self.file = IfcStore.get_file()
if self.obj_type == "Object":
obj = bpy.data.objects.get(self.obj)
elif self.obj_type == "Material":
obj = bpy.data.materials.get(self.obj)
oprops = obj.BIMObjectProperties
props = obj.BIMAttributeProperties
attributes = {}
for attribute in Data.products[oprops.ifc_definition_id]:
blender_attribute = props.attributes.get(attribute["name"])
if not blender_attribute:
continue
if attribute["is_optional"] and blender_attribute.is_null:
attributes[attribute["name"]] = None
elif attribute["type"] == "string":
attributes[attribute["name"]] = blender_attribute.string_value
elif attribute["type"] == "list":
values = blender_attribute.string_value[1:-1].split(", ")
if attribute["list_type"] == "float":
values = [float(v) for v in values]
elif attribute["list_type"] == "integer":
values = [int(v) for v in values]
attributes[attribute["name"]] = values
elif attribute["type"] == "integer":
attributes[attribute["name"]] = blender_attribute.int_value
elif attribute["type"] == "float":
attributes[attribute["name"]] = blender_attribute.float_value
elif attribute["type"] == "enum":
attributes[attribute["name"]] = blender_attribute.enum_value
product = self.file.by_id(oprops.ifc_definition_id)
ifcopenshell.api.run(
"attribute.edit_attributes", self.file, **{"product": product, "attributes": attributes}
)
if "Name" in attributes:
new_name = "{}/{}".format(product.is_a(), product.Name or "Unnamed")
collection = bpy.data.collections.get(obj.name)
if collection:
collection.name = new_name
obj.name = new_name
Data.load(IfcStore.get_file(), oprops.ifc_definition_id)
bpy.ops.bim.disable_editing_attributes(obj=obj.name, obj_type=self.obj_type)
return {"FINISHED"}
class GenerateGlobalId(bpy.types.Operator):
bl_idname = "bim.generate_global_id"
bl_label = "Regenerate GlobalId"
def execute(self, context):
index = bpy.context.active_object.BIMAttributeProperties.attributes.find("GlobalId")
if index >= 0:
global_id = bpy.context.active_object.BIMAttributeProperties.attributes[index]
else:
global_id = bpy.context.active_object.BIMAttributeProperties.attributes.add()
global_id.name = "GlobalId"
global_id.data_type = "string"
global_id.string_value = ifcopenshell.guid.new()
return {"FINISHED"}
@@ -0,0 +1,18 @@
import bpy
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.prop import StrProperty, Attribute
from bpy.types import PropertyGroup
from bpy.props import (
PointerProperty,
StringProperty,
EnumProperty,
BoolProperty,
IntProperty,
FloatProperty,
FloatVectorProperty,
CollectionProperty,
)
class BIMAttributeProperties(PropertyGroup):
attributes: CollectionProperty(name="Attributes", type=Attribute)
is_editing_attributes: BoolProperty(name="Is Editing Attributes")
@@ -0,0 +1,102 @@
from bpy.types import Panel
from blenderbim.bim.ifc import IfcStore
from ifcopenshell.api.attribute.data import Data
def draw_ui(context, layout, obj_type):
obj = context.active_object if obj_type == "Object" else context.active_object.active_material
oprops = obj.BIMObjectProperties
props = obj.BIMAttributeProperties
if oprops.ifc_definition_id not in Data.products:
Data.load(IfcStore.get_file(), oprops.ifc_definition_id)
if props.is_editing_attributes:
row = layout.row(align=True)
op = row.operator("bim.edit_attributes", icon="CHECKMARK", text="Save Attributes")
op.obj_type = obj_type
op.obj = obj.name
op = row.operator("bim.disable_editing_attributes", icon="CANCEL", text="")
op.obj_type = obj_type
op.obj = obj.name
for attribute in Data.products[oprops.ifc_definition_id]:
if attribute["type"] == "entity":
continue
row = layout.row(align=True)
blender_attribute = props.attributes.get(attribute["name"])
if attribute["type"] == "string" or attribute["type"] == "list":
row.prop(blender_attribute, "string_value", text=attribute["name"])
elif attribute["type"] == "integer":
row.prop(blender_attribute, "int_value", text=attribute["name"])
elif attribute["type"] == "float":
row.prop(blender_attribute, "float_value", text=attribute["name"])
elif attribute["type"] == "enum":
row.prop(blender_attribute, "enum_value", text=attribute["name"])
if attribute["name"] == "GlobalId":
row.operator("bim.generate_global_id", icon="FILE_REFRESH", text="")
if attribute["is_optional"]:
row.prop(
blender_attribute,
"is_null",
icon="RADIOBUT_OFF" if blender_attribute.is_null else "RADIOBUT_ON",
text="",
)
# TODO: reimplement, see #1222
# op = row.operator("bim.copy_attribute_to_selection", icon="COPYDOWN", text="")
# op.attribute_name = attribute.name
# op.attribute_value = attribute.string_value
else:
row = layout.row()
op = row.operator("bim.enable_editing_attributes", icon="GREASEPENCIL", text="Edit")
op.obj_type = obj_type
op.obj = obj.name
if "GlobalId" not in [a["name"] for a in Data.products[oprops.ifc_definition_id]]:
row = layout.row(align=True)
row.label(text="STEP ID")
row.label(text=str(oprops.ifc_definition_id))
for attribute in Data.products[oprops.ifc_definition_id]:
if attribute["value"] is None or attribute["type"] == "entity":
continue
row = layout.row(align=True)
row.label(text=attribute["name"])
row.label(text=str(attribute["value"]))
# TODO: reimplement, see #1222
# if "IfcSite/" in context.active_object.name or "IfcBuilding/" in context.active_object.name:
# self.draw_addresses_ui()
class BIM_PT_object_attributes(Panel):
bl_label = "IFC Attributes"
bl_idname = "BIM_PT_object_attributes"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "object"
@classmethod
def poll(cls, context):
return bool(context.active_object.BIMObjectProperties.ifc_definition_id)
def draw(self, context):
draw_ui(context, self.layout, "Object")
class BIM_PT_material_attributes(Panel):
bl_label = "IFC Attributes"
bl_idname = "BIM_PT_material_attributes"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "material"
@classmethod
def poll(cls, context):
try:
return bool(context.active_object.active_material.BIMObjectProperties.ifc_definition_id)
except:
return False
def draw(self, context):
draw_ui(context, self.layout, "Material")
@@ -0,0 +1,18 @@
import bpy
from . import ui, prop, operator
classes = (
prop.AuginProperties,
ui.BIM_PT_augin,
operator.AuginLogin,
operator.AuginCreateNewModel,
operator.AuginReset,
)
def register():
bpy.types.Scene.AuginProperties = bpy.props.PointerProperty(type=prop.AuginProperties)
def unregister():
del bpy.types.Scene.AuginProperties
@@ -0,0 +1,133 @@
import os
import bpy
import json
import string
import random
import shutil
import requests
import tempfile
import datetime
import addon_utils
class AuginLogin(bpy.types.Operator):
bl_idname = "bim.augin_login"
bl_label = "Login to Augin"
def execute(self, context):
props = bpy.context.scene.AuginProperties
url = "https://server.auge.pro.br/API/v3/augin_rest.php/user_login"
payload = {"email": props.username, "password": props.password}
response = requests.request("POST", url, data=payload)
result = response.json()
if result["success_feedback"]["success"]:
props.token = result["token"]
else:
self.report({"ERROR"}, "Login failed :(")
return {"FINISHED"}
class AuginReset(bpy.types.Operator):
bl_idname = "bim.augin_reset"
bl_label = "Upload Another Project"
def execute(self, context):
props = bpy.context.scene.AuginProperties
props.is_success = False
return {"FINISHED"}
class AuginCreateNewModel(bpy.types.Operator):
bl_idname = "bim.augin_create_new_model"
bl_label = "Create New Augin Model"
def execute(self, context):
import boto3
from botocore.config import Config
props = bpy.context.scene.AuginProperties
# Create project
url = "https://server.auge.pro.br/API/v3/augin_rest.php/new_model"
chars = string.ascii_uppercase + string.ascii_lowercase + string.digits
props.project_filename = "BBM{}{}".format(
datetime.datetime.now().strftime("%Y%m%d%H%M%S"), "".join(random.choice(chars) for _ in range(6))
)
addon_version = ".".join(
[
str(x)
for x in [
addon.bl_info.get("version", (-1, -1, -1))
for addon in addon_utils.modules()
if addon.bl_info["name"] == "BlenderBIM"
][0]
]
)
payload = {
"user_token": props.token,
"partner_token": "Mmf2zpxdgrkHaUNRm6Cv7GLJdBAeb7Rn",
"project_name": props.project_name,
"model_filename": props.project_filename + ".ifc",
"thumb_filename": props.project_filename + ".png",
"app_name": "BlenderBIM",
"sw_version": bpy.app.version_string,
"plugin_version": addon_version,
}
response = requests.request("POST", url, data=payload)
result = response.json()
# Upload to S3
my_config = Config(
region_name=result["s3_region"],
)
client = boto3.client(
"s3",
aws_access_key_id=result["s3_key"],
aws_secret_access_key=result["s3_secret"],
aws_session_token=result["s3_token"],
config=my_config,
)
# Generate thumb
old_file_format = context.scene.render.image_settings.file_format
old_filepath = context.scene.render.filepath
cam = bpy.data.cameras.new("Camera")
cam_obj = bpy.data.objects.new("Camera", cam)
context.scene.collection.objects.link(cam_obj)
context.scene.camera = cam_obj
tmpdir = tempfile.mkdtemp()
thumb_path = os.path.join(tmpdir, "thumb.png")
context.scene.render.image_settings.file_format = "PNG"
context.scene.render.filepath = thumb_path
bpy.ops.render.opengl(write_still=True)
context.scene.render.image_settings.file_format = old_file_format
context.scene.render.filepath = old_filepath
client.upload_file(bpy.context.scene.BIMProperties.ifc_file, result["s3_bucket"], result["model_path"])
client.upload_file(thumb_path, result["s3_bucket"], result["thumb_path"])
# Notify done
url = "https://server.auge.pro.br/API/v3/augin_rest.php/files_uploaded"
payload = {
"user_token": props.token,
"ifc_filesize": os.path.getsize(bpy.context.scene.BIMProperties.ifc_file),
"model_filesize": os.path.getsize(bpy.context.scene.BIMProperties.ifc_file),
"thumb_filesize": os.path.getsize(thumb_path),
"model_upload_path": result["model_path"],
"thumb_upload_path": result["thumb_path"],
"model_id": result["model_id"],
}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("POST", url, headers=headers, data=payload)
shutil.rmtree(tmpdir)
props.is_success = True
return {"FINISHED"}
@@ -0,0 +1,11 @@
import bpy.props
import bpy.types
class AuginProperties(bpy.types.PropertyGroup):
username: bpy.props.StringProperty(name="Username")
password: bpy.props.StringProperty(name="Password")
token: bpy.props.StringProperty(name="Token")
project_name: bpy.props.StringProperty(name="Project Name")
project_filename: bpy.props.StringProperty(name="IFC Filename")
is_success: bpy.props.BoolProperty(name="Is Successful Upload", default=False)
@@ -0,0 +1,45 @@
import bpy.types
class BIM_PT_augin(bpy.types.Panel):
bl_label = "Augin"
bl_idname = "BIM_PT_augin"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
def draw(self, context):
layout = self.layout
layout.use_property_split = True
scene = context.scene
props = scene.AuginProperties
if not props.token:
row = layout.row()
row.prop(props, "username")
row = layout.row()
row.prop(props, "password")
row = layout.row()
row.operator("bim.augin_login")
return
row = layout.row()
row.label(text="Logged in as " + props.username)
if not bpy.context.scene.BIMProperties.ifc_file:
row = layout.row()
row.label(text="No IFC Found")
return
if props.is_success:
row = layout.row()
row.label(text="Upload Successful")
row = layout.row()
row.operator("bim.augin_reset")
else:
row = layout.row()
row.prop(props, "project_name")
row = layout.row()
row.operator("bim.augin_create_new_model")

Some files were not shown because too many files have changed in this diff Show More