I have put the Homemaker add-on documentation online. For now it is just an API reference extracted automatically from the code, but readthedocs makes this really easy, so I might do some user documentation.
I have put the Homemaker add-on documentation online. For now it is just an API reference extracted automatically from the code, but readthedocs makes this really easy, so I might do some user documentation.
New blender-homemaker-2022-12-11 release
===================================
This release includes major changes and refactoring, with an emphasis on utilising new BlenderBIM features:
You can now edit your Homemaker styles in BlenderBIM! DXF assets and the dependency on ezdxf have been removed and replaced by Native IFC libraries. Walls, slabs, extrusions, grillages, profiles, layersets, materials, psets and predefined types are all now defined in a single IFC file for each style
API and user documentation can now be found at https://homemaker-addon.readthedocs.io/ Contributions welcome!
Walls are now editable in BlenderBIM, change a layerset, move or rotate a wall and mitred corners will be regenerated when you run the BlenderBIM Regen function.
Extrusions are now modelled as multiple mitred extrusions rather than a complex lofted path, this matches the BlenderBIM system used for modelling extruded elements. Edit a profile, move or rotate the extrusion and the BlenderBIM Regen function will tidy-up the mitred corners (note: this currently only works in BlenderBIM if your extrusion class is Beam, Column or Member). For compatibility, shipped Profile Sets now only contain a single profile, multiple profiles will be reintroduced later.
The shipped style definitions have been moved from ./molior/style/share
to just ./share
. This should make them easier to find and modify.
Origins for window/door Types are now aligned with wall face rather than Axis, so they can be used as-is in BlenderBIM. Some windows and doors have been updated with Plan, Clearance and Profile representations. If a Clearance representation is present, then this will be used to cut the wall opening, allowing for arbitrary arched, splayed and recessed openings. Now that IFC assets can have richer representations, it will take some time to improve all the shipped styles, contributions welcome!
Floors are now drawn as aggregations of slabs corresponding with faces in the CellComplex. The Floor module is now only used for covering finishes
The stashed Topologic CellComplex is now in an aggregate rather than a system, context is now Surface. In a future release this will allow one-click regeneration of the entire model using this stashed CellComplex
Refactoring, lots of defunct code deleted, typos, tests and code reformatting. Add a requirements.txt
file. The materials.yml
file is now obsolete.
Many bugs fixed: use IfcElementAssembly for repeating element aggregates, more robust handling of element classes that don't have PredefinedType, extrusion objects now have Type assigned, fix bug where materials and type representations always had Body context, orient IfcPolyline profiles properly, fix bug where repeating items didn't appear, ignore blender objects with no vertices, consistent naming of Types and typed Elements, generate normal map from external walls not cellcomplex outer surface, fix Layer Set Usage, extrusions were upside-down and mirrored, set Space Pset_SpaceOccupancyRequirements OccupancyType, add default contexts if needed to existing IFC projects, start grillage offsets from lowest point on face
Here's a new toy in the Homemaker add-on, faces in the Topologic CellComplex can be sliced into grids and filled with repeating objects (as well as parallel extrusions). This model has chairs and tiers filling the surface:
It is amazing how far homemaker has come since I last checked. Congratulations!
Homemaker has nothing on the wiki! Any volunteers to fix that?
And @brunopostle Gould you maybe ADD some links to cool videos and stuff to the github repo? I'm pushing a link out on mastodon but there's really not much info out there (a very long thread is not ideal).
I know Bruno is busy with other things at the moment so either of these suggestions would be a great way for anyone else to help the project!
@brunopostle said:
@theoryshaw said:
Very cool. Dumb question: is there any how-to documentation for users out there?
Not exactly ?...
Basically, it takes whatever geometry you give it and discards whatever doesn't enclose closed cells. Each of the cells then becomes a 'space'. The full tool that generates IFC models can be found at Object -> Homemaker Topologise, but if you want some sense of how these cellcomplexes are generated from the faces in the blender object there is a Object -> Topologise tool that gives you the intermediate geometry.
It assumes that all dimensions are metres, sorry. This will be fixed, but I need to figure-out how units are done in blender/blenderbim/ifcopenshell.api, and I have no clue.
The workflow is: draw some geometry as a single blender object, run Homemaker Topologise to generate the IFC model, Ctrl-Z to discard the IFC, modify the blender object as needed, run Homemaker Topologise to see how this changes the IFC, Ctrl-Z, etc..
It assumes that floors are horizontal and walls are vertical, anything else is 'roof' or 'soffit' depending on if it is on top of the building or below (the soffit code is broken in this release, but fixed in git). A room has a floor and walls all the way around the perimeter, so an attic room can have sloping ceilings, but they need to meet vertical walls (for now anyway). Floor-to-floor heights can be whatever you like, and floors don't have to run through the building, so you can have double height spaces, split-level etc..
By default it assumes that all rooms are 'living' rooms, so they get windows and connecting doors. The 'default' style is a kind of Georgian based on measurements of the previous house I lived-in.
At the moment the behaviour of room/space types are all hard-coded, but eventually it will be configurable. There are currently several space types: living, kitchen, circulation, stair, toilet, bedroom and retail; these primarily control which door and window configuration gets used: retail on the ground floor can get a series of shop fronts, no doors are created between kitchens and toilets etc.. I haven't got around to porting the stair drawing module just yet. There are two special space types: 'outdoor' and 'sahn', these generate outdoor spaces that the 'default' style constructs with a flat roof supported by perimeter posts. 'sahn' is an outdoor space type that is treated as internal circulation - think of a private courtyard in a riad house.
By default every space in your model has a 'living' type, so you get windows, doors between rooms, but no external doors. You can manually assign types by placing new blender objects (such as a new cube) in each of the spaces: give the new object the name 'retail' (or 'retail.001' etc..) and the space becomes a room with this type. If you forget to name or mis-spell this placeholder you will get a very small cube-shaped building inside your main building :). Once you start using these placeholders in a model, any unassigned spaces become 'outdoor'. There are some cute low-poly widgets shipped in a
widgets.blend
file that you can use instead of making your own, though I find that it is sometimes easier to change a room-type by renaming the widget/placeholder than replacing it.
Styles are assigned to walls and roofs by assigning blender materials to faces in the blender object, the styles are massively configurable and use an inheritance system, they control the size, types and spacing of windows and doors, wall thickness, psets, decoration, repeating items, nested repeating items (like railings with intermediate posts). The styles shipped with the add-on are a bit limited, they are called: 'default', 'courtyard', 'fancy', 'pantsy', 'arcade', 'rustic' and 'tuscan'. I'd love to see some different styles, but currently they are defined using DXF polyface meshes, DXF 2D polylines and YAML files, that are converted on-the-fly into temporary IFC Project Libraries for each style - I want to get rid of the DXF files and just use IFC Project Library files (and maybe replace YAML with JSON), but I'm not sure how to handle details like profiles and window/door openings.
Hope this makes sense, please ask if you have more questions because there is no other way that documentation will be written. The software has a long way to go, and there are a few more glitches than I'd like, but I think this approach to designing buildings has a lot of potential.
Bumping this to nudge @brunopostle to please add this to a 'how things work' / 'getting started' page both on the documentation and on the repo's readme (it can be edited incrementally as things change). Ditto links to your YouTube channel to help with easier on-boarding of people previously unfamiliar with your work.
Just switched to a Linux build from Windows and trying to catch up with Homemaker. Please how do I get past the following error after installation and clicking on Object > Homemaker on the default cube:
`File "/......../.config/blender/3.3/scripts/addons/blenderbim/libs/site/packages/ifcopenshell/api/init.py", line 66, in run
result = usecase_class(ifc_file, **settings).execute()
TypeError: Usecase.__init__() got an unexpected keyword argument 'name'`
I have the latest BlenderBIM (v0.0.230107) installed with the 2022-12-11 release of Homemaker, running Blender 3.3.1
@DADA_universe thanks, I need nudging.
There error is because 230107 blenderbim broke lots of stuff (partially bad me using undocumented APIs). It is fixed in the homemaker-add git repository, so you can overwrite the installed add-on using a git snapshot, or wait for me to do a new release, which is my next task.
@brunopostle said:
@DADA_universe thanks, I need nudging.
There error is because 230107 blenderbim broke lots of stuff (partially bad me using undocumented APIs). It is fixed in the homemaker-add git repository, so you can overwrite the installed add-on using a git snapshot, or wait for me to do a new release, which is my next task.
@brunopostle, what are the chances that your next release uses topologicpy instead of the core topologic? It is a bit of work to change the API calls, but wondering if your calls to topologic are fairly concentrated at the start of the process (which I suspect), you could quickly update your code. In general, I am moving towards making everything run through topologicpy and to hide the topologic implementation as much as possible. In the future, this means one can even swap out topologic for another engine and code calling topologicpy would still work.
If you need to transparently install topologicpy in your code and not worry about asking the user to do it manually, you can do something as in below. You can see in the image that at first attempt, topologicpy was not found on the system. Once the code below is added, it automatically pip installs it for that particular environment (whether it is conda, or Blender, or the system python, it does not matter) and from there on, it is functional.
@brunopostle said:
@DADA_universe thanks, I need nudging.
There error is because 230107 blenderbim broke lots of stuff (partially bad me using undocumented APIs). It is fixed in the homemaker-add git repository, so you can overwrite the installed add-on using a git snapshot, or wait for me to do a new release, which is my next task.
Thank you, that worked.
Just a quick note to add to the how-to, please correct if not accurate, though this is what I did:
The GitHub repo might have useful updates yet to be packaged into a release. To update your installed Homemaker Add-on with the latest version from the GitHub repo (not from the packaged release), download the zip from the repo (https://github.com/brunopostle/homemaker-addon.git) unzip it and copy all the contents in the folder except from the 'dist', 'docs', and 'tests' folders. Unzip the content of the previous release package you had installed in Blender, into a folder and overwrite the content with the content you just copied from the repo. The 'libs' folder of course won't be overwritten as it's not part of the repo, which is fine. Now zip this new overwritten folder and install it using the normal process for installing a Blender Add-on, and you would have an updated version of Homemaker running.
@duncan just to let you know, I tried to do something on the Wiki. But I can't remember what login I used in the past and it's not letting me create a new account (some complaint about my IP address). I don't find Media Wiki very intuitive and struggle with it a bit for reasons like this, so hope snippet contributions like this on the forum help in some way.
@topologic I haven't checked to see how different topologicpy is, I thought the underlying Topologic library was the same? The topologicpy repository has lots of binary files, and no setup.py or CMakeList.txt, so I'm not entirely sure how to use it.
@brunopostle said:
@topologic I haven't checked to see how different topologicpy is, I thought the underlying Topologic library was the same? The topologicpy repository has lots of binary files, and no setup.py or CMakeList.txt, so I'm not entirely sure how to use it.
topologicpy can be thought of as a pure python library. No need to compile anything and it works out of the box on Windows and Linux. It does NOT need topologic (core) to be installed. You simply import it and start calling it. To install, you can use pip install topologicpy
@brunopostle yes underneath it is the same, but topologicpy has vastly improved some functionality and added new methods not available in topologic. It also fixed a lot of bugs. It is robust and well-documented. The API is now more sustainable and consistent.
@topologic said:
@brunopostle yes underneath it is the same, but topologicpy has vastly improved some functionality and added new methods not available in topologic. It also fixed a lot of bugs. It is robust and well-documented. The API is now more sustainable and consistent.
Any documentation? Thanks.
@topologic said:
topologicpy can be thought of as a pure python library. No need to compile anything and it works out of the box on Windows and Linux. It does NOT need topologic (core) to be installed. You simply import it and start calling it. To install, you can use pip install topologicpy
There are DLLs in the git repository, I'm going to be recompiling these anyway because that is a thing that I do.
As far as I can tell, topologicpy is a collection of subclassed wrappers of the topologic pybind11 bindings for the Topologic c++ library, but with a cleaner API. Couldn't these be in the main Topologic repository?
@brunopostle said:
@topologic said:
topologicpy can be thought of as a pure python library. No need to compile anything and it works out of the box on Windows and Linux. It does NOT need topologic (core) to be installed. You simply import it and start calling it. To install, you can use pip install topologicpy
There are DLLs in the git repository, I'm going to be recompiling these anyway because that is a thing that I do.
As far as I can tell, topologicpy is a collection of subclassed wrappers of the topologic pybind11 bindings for the Topologic c++ library, but with a cleaner API. Couldn't these be in the main Topologic repository?
I don’t know why you would want to recompile the dlls but you know your software environment better.
Changing the topologic pybind layer would change the API. With topologicpy you can still call topologic as usual so allows for an easier transition. Topologicpy is not just a wrapper. In places it completely replaces the default functionality.
But having said all that, please don’t feel pressured to change over. Homemaker can continue to use topologic. It is not going away!
@topologic said:
I don’t know why you would want to recompile the dlls but you know your software environment better.
Binary files are fragile, as a software developer you should be concerned with code. Distributing compiled code is a separate step that you should be offloading to other people if you can.
@brunopostle said:
@topologic said:
I don’t know why you would want to recompile the dlls but you know your software environment better.
Binary files are fragile, as a software developer you should be concerned with code. Distributing compiled code is a separate step that you should be offloading to other people if you can.
My concern is to make it easy for people to use the software. If I ask people to download this and that and follow long steps to compile software they won’t use it. Blender contains compiled software so does FreeCAD..
@paullee said:
@topologic said:
@brunopostle yes underneath it is the same, but topologicpy has vastly improved some functionality and added new methods not available in topologic. It also fixed a lot of bugs. It is robust and well-documented. The API is now more sustainable and consistent.
Any documentation? Thanks.
Hi @paullee Yes! Clean and now complete documentation with view full source code option is available at https://topologic.app/topologicpy_doc/topologic_pdoc/
@topologic said:
My concern is to make it easy for people to use the software. If I ask people to download this and that and follow long steps to compile software they won’t use it. Blender contains compiled software so does FreeCAD..
It is an aesthetic thing, would you keep your recipe books in the freezer with your food? The blender git repository doesn't contain any compiled binary files, these are stored/created separately from the source code and assembled into an installer/package.
@brunopostle said:
@topologic said:
My concern is to make it easy for people to use the software. If I ask people to download this and that and follow long steps to compile software they won’t use it. Blender contains compiled software so does FreeCAD..
It is an aesthetic thing, would you keep your recipe books in the freezer with your food? The blender git repository doesn't contain any compiled binary files, these are stored/created separately from the source code and assembled into an installer/package.
Ok but I don’t ask people to install from the GitHub! They install from pypi. I will add the binary folders to gitignore
@brunopostle Github all cleaned up now! https://github.com/wassimj/topologicpy
@topologic said:
Hi @paullee Yes! Clean and now complete documentation with view full source code option is available at https://topologic.app/topologicpy_doc/topologic_pdoc/
I previously found Brunopostle's rpm and after installation it just works in FreeCAD (without myself knowing the technicality) - I use AppImage on Fedora 36. Can't figure how to use in FreeCAD console... any more instruction ?
paullee@fedora ~]$ pip install topologicpy
Defaulting to user installation because normal site-packages is not writeable
Collecting topologicpy
Downloading topologicpy-0.0.22-py3-none-any.whl (31.5 MB)
|████████████████████████████████| 31.5 MB 498 kB/s
Collecting plotly
Downloading plotly-5.11.0-py2.py3-none-any.whl (15.3 MB)
|████████████████████████████████| 15.3 MB 41.8 MB/s
Requirement already satisfied: scipy in /usr/lib64/python3.10/site-packages (from topologicpy) (1.8.1)
Requirement already satisfied: numpy in /usr/lib64/python3.10/site-packages (from topologicpy) (1.22.0)
Collecting tenacity>=6.2.0
Downloading tenacity-8.1.0-py3-none-any.whl (23 kB)
Installing collected packages: tenacity, plotly, topologicpy
Successfully installed plotly-5.11.0 tenacity-8.1.0 topologicpy-0.0.22
In FreeCAD (AppImage) Python Console -
import topologic
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/home/paullee/Downloads/FreeCAD_weekly-builds-31391-2022-12-22-conda-Linux-x86_64-py310/squashfs-root/usr/lib/python3.10/site-packages/shiboken2/files.dir/shibokensupport/feature.py", line 139, in _import
return original_import(name, *args, **kwargs)
ModuleNotFoundError: No module named 'topologic'
import topologicpy
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/home/paullee/Downloads/FreeCAD_weekly-builds-31391-2022-12-22-conda-Linux-x86_64-py310/squashfs-root/usr/lib/python3.10/site-packages/shiboken2/files.dir/shibokensupport/feature.py", line 139, in _import
return original_import(name, *args, **kwargs)
File "/home/paullee/.local/lib/python3.10/site-packages/topologicpy/init.py", line 16, in <module>
@paullee Can we move this to the Topologic thread and put a link here so anyone following this can reach it? Thanks. This thread is about Homemaker, but it ran away from us (My apologies for that to @brunopostle)
Yes , thanks, https://community.osarch.org/discussion/131/topologic-redefining-bim-through-spatial-topology-information-and-grammars/p25
Login or Register to reply.