I’m trying to understand Topologic better and am working on developing a script that can determine wall and non-wall boundaries between conceptual spaces.
Using Generic Models as a ‘planning element’ i’m able to find the cells created by the overlapping elements:
translates to
i think the next part is to define a new cell complex with these elements, (really, this needs to be a cluster of cell complexes). I think what i’m trying to get is the 1-manifold that represents the cell complex? the wire that passes through cell centroids and the centroids on non-manifold faces (this isn’t completely right because it doesn’t generate the true endpoints)
Not completely sure that is a problem.
I guess my question is: ‘is this a reasonable approach? am i going in the right direction?’
@Wassim_Jabi
1 Like
Hi @mclough Hard to understand fully what you are after, but if you have managed to build a CellComplex where the cells are the wall fragments then Graph.ByTopology should give you the wire are looking for. You might want to slice the CellComplex with a horizontal face and get a Shell (a 2D version of a CellComplex). Feed that to Graph.ByTopology and then do Graph.Topology etc. happy to jump on a zoom session to walk you through it.
My objective is to create a list of curves that represent the ‘centerlines’ of conceptual partitions so i can create walls in revit. The concept of centerline is sort of ambiguous (specifically a cell with a square crossection), especially with a branching network of ‘walls’/cells so i think the more generic approach is to try and describe this topologically. Sorry if i’m not describing this well.
I had looked at the Graph.ByTopology node, and it seems like a piece of the puzzle. The ‘wall segments’ that arent ‘straight’ elements seems to throw that approach off. Maybe i need to figure out how to split them to the individual segments.
if you have time for a call that would be awesome.
I’m just going to vomit some words here and maybe it will make the solution clearer. I think i can create a temporary solution for the specific case of the L shape element, which is the ‘complicated’ one that i should get due to the input geometry.
for the L shape, you can make an observation sort of like this:
the ‘corner’ can be identified as the new edge, contained within the surface, in the set of edges constructed by the ordered pairs that make up parallel lines in the representation of the L shape as a regular hexagon.
this isn’t the best way to phrase it, but i think it’s the most direct way to make a solution, so it’ll be something like this:
get verticies
generate three groups of edges
(5,0) (1,4) (2,3)
(1,0) (2,5) (3,4)
(2,1) (3,0) (4,5)
remove the edges that already exist in the set
select the edge that is contained within the geometry
i think this prevents the requirement any contextual information about the surface in order to determine which vertices to connect.
so this mostly works. representing the graph with the viaSharedTopologies doesn’t give the result i was expecting, but it’s a step in the direction.
edges marked in red are added to define the ‘corners’ in the L-shape pieces. this is displaying the default graph.
In Graph.ByTopology try via shared topologies
Email me at info@topologic.app to schedule a zoom
getting somewhere
the viaShareTopologies option only seems to work with CellComplexes, didn’t work with the 2d representation. Just have to figure out how to extend the graph wires to the end of the branch (of if that’s even necessary), then make sure all of this can work for disconnected cell complexes representing walls
I wanted to follow up with some things that came out of this attempt. The ultimate solution changed a good amount from where i started, and eventually went with a solution that didn’t use topologic.
For this approach to use ‘viaSharedTopologies’ to generate the curves, I had to identify convex verticies and split the solids by adjacent normals at that vertex. This results in dedicated nodes at ever change of direction. Thanks to @jabiw3SXRW for that idea.
1 Like
Could you share the solution, please?