This looks quite powerful in Snaptrude. Each room is based on a rectangle and once automated, with naming and adjacencies, the system know which walls are external.
Snaptrude - "406 Not Acceptable" ?
This looks quite powerful in Snaptrude. Each room is based on a rectangle and once automated, with naming and adjacencies, the system know which walls are external.
Snaptrude - "406 Not Acceptable" ?
@topologic said:
Topologic can potentially do all that (in snaptrude). We just don't have the powerful UI to do it. But the data structures etc are all there and very powerful. We have been able to generate a full Revit/BIM model and a full IFC model from the Topologic CellComplex. There is a great opportunity for a snaptrude type startup based on topologic ;-)
Is Homemaker though not based on a Sketch doing something similar ? It also remind me of TED.
The Snaptrude workflow sounds quite familiar.
In fact, as demonstrated as proof-of-concept in FreeCAD, a similar Sketch can generate the CellComplex to identify the external/internal faces with Topologic, and build ArchWall and Slab (Structure) based on same Sketch.
@paullee said:
In fact, as demonstrated as proof-of-concept in FreeCAD, a similar Sketch can generate the CellComplex to identify the external/internal faces with Topologic, and build ArchWall and Slab (Structure) based on same Sketch.
Yes exactly. You have demonstrated that all that is available. The issue is only one of interface and bells and whistles. Snaptrude looks very slick and seems quite interactive and easy to use.
What we need in addition to what you have achieved is to allow the user to specify 'rules' or 'shape grammars' to specify how the topologic entities of a CellComplex should be transformed into 'thickened' BIM entities (e.g. what wall thickness and construction to use for external and internal walls, what offset to use, what windows to put in the apertures etc).
@topologic said:
The initial commit of a Topologic Workbench for FreeCAD is now on github! It has one command: "TPVertices". It takes one or more selected Parts and returns their Vertices. Now is the time for you to contribute!
Tested on linux, seems it is not supporting at the moment right? :)
Should I open an issue at github ? :D
@paullee said:
@topologic said:
The initial commit of a Topologic Workbench for FreeCAD is now on github! It has one command: "TPVertices". It takes one or more selected Parts and returns their Vertices. Now is the time for you to contribute!
Tested on linux, seems it is not supporting at the moment right? :)
Should I open an issue at github ? :D
Yes sorry, the release is only for windows. You can try to take your linux topologic.pyd and replace the on in the Topologic folder with that.
@topologic said:
Yes exactly. You have demonstrated that all that is available. The issue is only one of interface and bells and whistles. Snaptrude looks very slick and seems quite interactive and easy to use.
What we need in addition to what you have achieved is to allow the user to specify 'rules' or 'shape grammars' to specify how the topologic entities of a CellComplex should be transformed into 'thickened' BIM entities (e.g. what wall thickness and construction to use for external and internal walls, what offset to use, what windows to put in the apertures etc).
Yes, GUI and interactive tools are something must have to allow more users to use it intuitively - hope there are volunteers experienced FC coders jump in. Coding GUI is something far from my competence.
In fact I have ideas to make things easier before GUI tools :
ArchSketch get a Switch :-
To turn its shape into a CellComplex (In fact done) : Currently is another object in SketchArchWorkbench link to the ArchSketch
To turn its shape into an ArchWall : Currently another ArchWall Object is required to build walls based on the ArchSketch
So instead of 3 objects in hierarchical relationship, the ArchSketch perform as all of them :D
'Shape Grammars' is something sounds interesting. But my idea is not to dictate e.g. the placement of windows (this should be architect's call), but e.g. to calculate the minimum size of a Window for natural lighting and/or ventilation based on local code.
This is amazing! Thrilled to see more...
What I personally would like to see/do with Topologic in FreeCAD is basically "put order in the mess". FreeCAD is extremely free-form ans free-method regarding BIM modeling, compared to BlenderBIM. You don't need to structure anything, or relate anything. Most people just model a bunch of objects and place them into groups. This makes it hard, for example, to extract an energy analysis model from a BIM model.
Some things I imagine Topologic could greatly help:
Find the "median face" of walls and slabs, or, a face that would be the division between two spaces on each side of the wall
Find all "reasonably enclosed" spaces in a model (thinking there can be small openings or "unknown objects" in the way), or, build spaces automatically
Find all windows inserted into a wall, even if these windows weren't "declared" as belonging to that wall
In sum, build a proper energy analysis model (spaces + walls + openings) out of a "junk" model which is geometrically correct but where users didn't set up all the proper relationships themselves: They didn't create spaces, the walls and slabs are all unrelated or even generic objects (cubes, whatever), or even one object that represents several walls! and openings are not always clearly defined or related.
I'd be interested in helping there... It might be useful to have a couple of test files with these cases above, I'll build some
@topologic said:
Should I open an issue at github ? :D
Yes sorry, the release is only for windows. You can try to take your linux topologic.pyd and replace the on in the Topologic folder with that.
Not sure I understand - I previously installed Brunopostel's Topologic and Topologic-python packages for Fedora, but find no topoligic.pyd, e.g.
[paullee@fedora ~]$ rpm -qa | grep -i topologic
Topologic-0.0-0.20220131git.fc34.x86_64
[paullee@fedora ~]$ rpm -ql Topologic-0.0-0.20220131git.fc34.x86_64
/usr/lib/.build-id
/usr/lib/.build-id/13
/usr/lib/.build-id/13/e45ca75d67f9e7deb61f4095d0a163a9599c47
/usr/lib64/libTopologicCore.so.0
/usr/lib64/libTopologicCore.so.0.0.0
/usr/share/doc/Topologic
/usr/share/doc/Topologic/README.md
@paullee said:
@topologic said:
Topologic can potentially do all that (in snaptrude).
Is Homemaker though not based on a Sketch doing something similar ? It also remind me of TED.
Homemaker does the same thing, but in 3d, and you are not restricted to 90° angles, you can have different layouts on each floor, double height spaces, attic rooms, all that architecture stuff.
@paullee said:
Not sure I understand - I previously installed Brunopostel's Topologic and Topologic-python packages for Fedora, but find no topoligic.pyd, e.g.
I actually think then you don't need to do anything more. Just delete topologic.cp38-win_amd64.pyd and TopologicCore.dll and try to load the workbench. If FreeCAD can find "import topologic" it should all work.
@topologic said:
@paullee said:
Not sure I understand - I previously installed Brunopostel's Topologic and Topologic-python packages for Fedora, but find no topoligic.pyd, e.g.
I actually think then you don't need to do anything more. Just delete topologic.cp38-win_amd64.pyd and TopologicCore.dll and try to load the workbench. If FreeCAD can find "import topologic" it should all work.
The .pyd
file is for Windows, the equivalent python binding on Linux is called topologic.cpython-310-x86_64-linux-gnu.so
or similar.
Ok, add below to the init.py and somehow it works :D
sys.path.append("/home/paullee/Downloads/Topologic/brunopostle_f34/usr/lib64/python3.9/site-packages")
ok great. To make it more portable, rather than do a sys.path.append, copy the contents of the site-packages folder to the Mod/Topologic folder.
Yes, these are contained in a rpm in Brunopostle's repo on Fedora34
rpm2cpio Topologic-python3-0.0-0.20220131git.fc34.x86_64.rpm | cpio -idmv
but I think it also needs other files in Brunopostle's repo on Fedora 34
rpm -ivh Topologic-0.0-0.20220131git.fc34.x86_64.rpm
And it might be different for other Linux distribution :D
Today's Progress: Added CellComplexDecompose command. You can take a non-manifold FC shape and it will return external/internal/top/bottom horizontal and vertical faces as separate objects.
Watch video at this tweet: https://twitter.com/topologicBIM/status/1517875673754394624?s=20&t=JOpYOfiWorR99mU7rc8LSg
Excited to learn the development is so fast :D
Had been studying for a while :)
Noted the similarity in CellComplexDecompose with :
Wondering -
if item.ExternalBoundary() would be faster in processing ?
EDIT - topologic.Cluster is Part.Compound in FreeCAD Part ?
Thanks :D
That’s the beauty of it. All the code in TopologicSverchok can potentially be ported almost as is to FreeCAD.
As to processing speed, I have not done any comparisons. If you do tests and timings, please share. Thanks.
Works as advertised :D
Further test with Boolean Fragment, generating 'internal faces' :D
@paullee said:
Further test with Boolean Fragment, generating 'internal faces' :D
Just the tip of the iceberg. I can add all the sverchok code, but two things are standing in my way that perhaps someone here can help with:
I don’t know how to get and display alphanumeric values from and to dialog boxes etc in FreeCAD.
I don’t know how to pass output (including topologies) from one button push to the other. Does everything in FreeCAD pass through the viewer or can we stash objects in other data structures?
Thanks for any help you can offer.
@topologic said:
Just the tip of the iceberg. I can add all the sverchok code, but two things are standing in my way that perhaps someone here can help with:
- I don’t know how to get and display alphanumeric values from and to dialog boxes etc in FreeCAD.
- I don’t know how to pass output (including topologies) from one button push to the other. Does everything in FreeCAD pass through the viewer or can we stash objects in other data structures?
Hope FreeCAD expert comes in (maybe posting in FreeCAD forum?), I have not much idea about GUI things in FreeCAD.
For item 2, my 2 cents (as Python and FreeCAD coding beginner :) ), maybe :
instead of "f = doc.addObject("Part::Feature", sel.Name+"_"+names[i]) " for every 'outputs'
create a Part:Feature with App::PropertyLink to 'Source Object' to make thing parametric
" fp.addProperty("App::PropertyLink","Source Object","xxx","yyy")
if not hasattr(fp,"output1"):
fp.addProperty('Part::PropertyPartShape', 'output1', 'vert_faces', "xxx"),8)
if not hasattr(fp,"output2"):
fp.addProperty('Part::PropertyPartShape', 'output2', 'hor_faces', "xxx"),8)
fp.output1 = output1
fp.output2 = output2
Now, other object can refer to these as
TopologicDecomposeObject.output1
TopologicDecomposeObject.output2
...
p.s.
Questions related to python in FreeCAD can goes here :D
See wiki on Scripted Objects for details and available properties :D
(and the thread on Differences between Part::Feature, Part::FeaturePython and App::FeaturePython objects )
I just use Part::FeaturePython
Some codes not tested for reference, rename the attached .txt to .py :)
class TpFcObject():
''' Description '''
def init(self, obj):
''' call self.setProperties '''
self.setProperties(obj)
obj.ViewObject.Proxy=0
return None
def setProperties(self, fp):
''' Add self.properties '''
fp.Proxy = self
if not hasattr(fp,"SourceObject"):
fp.addProperty("App::PropertyLink","SourceObject","xxx","yyy")
if not hasattr(fp,"output1"):
fp.addProperty('Part::PropertyPartShape', 'output1', 'vert_faces', "xxx"),8)
if not hasattr(fp,"output2"):
fp.addProperty('Part::PropertyPartShape', 'output2', 'hor_faces', "xxx"),8)
def execute(self, fp):
''' Features to Run (extract codes from your exsiting library)'''
# algorithm to find the external vertical faces ...etc.
inputShape = fp.SourceObject.Shape
...
fp.output1 = output1
fp.output2 = output2
...
fp.Shape = (can chose to 'display' which output, e.g. depends on a switch)
''' make a FreeCAD 'document object' '''
tpObj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","TpObj")
''' 'apply' the class / create an TpFcObject 'instance' passing the 'document object' to it '''
tpObjInstance = TpFcObject(tpObj)
''' pass the selected obj to the Topologic Object for execution '''
tpObj.SourceObject = Gui.Selection.getSelection()[0]
Hi OSARCH, sorry for being quiet here. Just wanted to let you know that a new version of Topologic has been released. With it comes the addition of node classification for graph machine learning. Imagine you have a graph of your building where a node represents either a space/room or a building component (wall, window etc). Imagine then that some nodes are fully known as what they are, but others are not yet fully specified (what kind of window or door? What room function?). Topologic can now fill in the blanks which means, theoretically, you can pull in the full BIM details of the missing component and auto-complete your project.
None of this has been tested yet. I would love to collaborate if you are interested and have a dataset that can be encoded as a graph. We need at least 500 graphs to get going (or one graph with 500 nodes)
Login or Register to reply.