[Topologic] Redefining BIM through Spatial Topology, Information, and Grammars

1246726

Comments

  • @arquitextonica generating the BIM elements (the things between spaces) is relatively straightforward, especially if you adhere to the convention that floors are horizontal and walls are vertical - I happened to have that code to generate BIM elements lying around, so the difficult bit for me was processing the non-manifold.

    I have thought a lot about these space partition issues; the binary tree subdivision as used by Homemaker is very well suited to automated evolution, but is not conceptually easy for humans to work with; the non-manifold mesh is much easier for a human to understand, but would be hard to use in an evolutionary system.

    I think just drawing cells as a mesh in Blender is fine, though the software could help a bit more to maintain horizonal and vertical and planar faces. I want the BIM objects to be generated in real time, so you can see the building as you edit the cells.

    The face normals in the non-manifold are not important, it isn't possible to have all of them facing the same way, so you can ignore this when drawing your mesh.

    JQLarquitextonica
  • @brunopostle said:
    But in my code these graphs are assembled separately, as this is easy and the 'dual' nature isn't that important to the things we want to do with the graphs.

    I thin dissociating both graphs also allows a deeper structuring of the elements embedded knowledge. One topology can have many associated (dual-like type) graphs.

  • Bruno> @brunopostle said:

    I think just drawing cells as a mesh in Blender is fine, though the software could help a bit more to maintain horizonal and vertical and planar faces. I want the BIM objects to be generated in real time, so you can see the building as you edit the cells.

    This is very interesting. I notice that you also generate doors and windows automatically. What if it was the user that would draw a face in the cells wall and that would define a door, if you erase the face you'd have an opening without door and a face in a facade would also create a door, if you'd erase the face you'd have a window.

    That way user could have an easy way to finetune or shape the cells to place openings, doors and windows and they could be different on exterior walls or interior walls.

    I'm also thinking on finishes and structure and how do they relate in BIM.

    Imagine a wall that splits two rooms. That wall has a structural layer, like brickwork, and might have different finishes on either side, because each room has it's own finish. The different finishes might represent different layers or thicknessess.

    I might be wrong, but the idea I have is that in BIM, when you draw your wall type, you should consider if the type is allowing for the finishes to match what you want on those rooms finishes. The wall type has to change for each room of the building as it is affected by each room finishes and their combinations. However, usually the wall structure type is the same in all the building. So, finishes and their layers, shouldn't be a property that is exclusive from the wall, but that should be also related to a definition from the rooms.

    So, for me the ideal process of wall composition is not that the wall type is predefined with all layers or that we have to change it depending on the two adjoining rooms, but that the adjoining rooms have a finishes definition that adds layers to the wall type. If you change finishes in the rooms, the wall type keeps being the same, but the geometry and layers attached to it change.

    Wall type brickwork would have a "conscience" of the adjoing rooms and add their finishes to itself. We would only have to state each room finish and what kind of wall structure we would have in the building.

    This would also be valid for applying finishes to the building structure models.

    If this would be possible, (maybe it's already working like this in some packages, I don't know), it would make total sense to me at a conceptual level, and makes sense from a cell centric model workflow perspective, imho. It also makes sense at a construction level, because at that level you'll have structure in place, and people will then adhere finishes to it.

    I don't know if this is making sense, I hope so.

    arquitextonicabrunopostle
  • @arquitextonica said:
    I thin dissociating both graphs also allows a deeper structuring of the elements embedded knowledge. One topology can have many associated (dual-like type) graphs.

    That’s correct. In Topologic, the user can derive a dual graph from a topology, but can also customise that dual graph ( pass through apertures, connect to exterior apertures or faces). Then you can add other random edges if you wish. What is important is that the graph is information-loaded in its nodes and edges and you have a robust set of graph methods to query it and analyse it.

    The issue of face normals is a non-issue in non-manifold CellComplexes. We assume all our faces are double-faced and thus can be rendered from both sides. For Cells, we need face normals to point outward to calculate volume etc but it does not mean our Cell is a solid. This is evident when you do Boolean operations on Cells. Merging two intersecting Cells gives you a CellComplex with three Cells rather than the traditional union that would give you a single Cell.
    Theoretically, a building with all its fabric and spaces can be represented as a CellComplex with Cells that have loaded information (CellA is concrete, CellB is brick, CellC is Air). It does not mean that there is one cell for all the air inside a building. You can divide that air into zones with zero thickness faces.

    arquitextonicabrunopostle
  • Attached some screenshots I prepared for the seminar I taught in the Universität Stuttgart. They were done with @topologic framework on grasshopper on Rhino. But I think the workflow would be portable.
    I made a grid of cells and assigned different programs to each one, the wall types are sorted using boolean gates depending on the programs they are in between (if progs are 1 AND 2 then type A). Decks are sorted likewise, program "Patio" i.e. removes the face over it, and so on.
    You can also see the translation of the topologic elements into BIM objects through the archicad-grasshopper plugin.

    If @JQL or @brunopostle or any other of you are interested in discussing further, here I am.






    topologiccarlopavJQLbrunopostle
  • @topologic said:
    It does not mean that there is one cell for all the air inside a building. You can divide that air into zones with zero thickness faces.

    That is what I call high level architectural design (vs. low level construction language in BIM).
    Space is much more than mere construction elements bundled together. What is an atrium? And a loggia? Why is a living room different than a bedroom? All these questions are cognitional and could/should be computable.

    JQLtopologicbruno_perdigaoCGR
  • edited September 2020

    @JQL said:

    This is very interesting. I notice that you also generate doors and windows automatically. What if it was the user that would draw a face in the cells wall and that would define a door, if you erase the face you'd have an opening without door and a face in a facade would also create a door, if you'd erase the face you'd have a window.

    I would prefer to have a door that I can drag sideways to alter the position, taking the opening with it. The door could be deleted or swapped with any other door from a 'library' of doors, similarly swing could be changed from left to right etc.. just by picking options.

    Imagine a wall that splits two rooms. That wall has a structural layer, like brickwork, and might have different finishes on either side, because each room has it's own finish. The different finishes might represent different layers or thicknessess.

    Definitely you should be able to specify different finishes to adjacent rooms and the software should highlight that this wall is a special case that needs a detailed section.

    JQL
  • @JQL In Topologic you can draw (or add) any number of apertures (faces) to other faces (eg walls). These apertures can be windows or doors and their detailed 3D models can be saved inside them as ‘contents’. Not only that, they can have multiple styles of doors and deploy the correct one as needed. For example, if they fall between a living room and a kitchen maybe they use just a simple cased opening While if they fall between a living room and a bathroom they maybe a solid door etc. The size of the aperture can or doesn’t have to relate to the size of the door. It is a positional placeholder.

    JQL
  • @topologic said:
    @JQL In Topologic you can draw (or add) any number of apertures (faces) to other faces (eg walls). These apertures can be windows or doors and their detailed 3D models can be saved inside them as ‘contents’. Not only that, they can have multiple styles of doors and deploy the correct one as needed. For example, if they fall between a living room and a kitchen maybe they use just a simple cased opening While if they fall between a living room and a bathroom they maybe a solid door etc. The size of the aperture can or doesn’t have to relate to the size of the door. It is a positional placeholder.

    That's exactly the spirit! I'm just sorry that I'm sitting here and you're already running 100m ahead. I'll have to get off this chair.

  • @arquitextonica said:
    If @JQL or @brunopostle or any other of you are interested in discussing further, here I am.

    I'll be here, these ideas for varying construction depending in the 'type' of room are implemented in Homemaker (the evolutionary tool), and I have started playing with them using the non-manifold mesh model (though currently all it does is stuff like deleting unwanted doors between toilets and kitchens, or setting external door/fenestration depending on the internal room type).

    arquitextonicaJQLCGR
  • I think the majority of those wishes can be handled through "template" objects/shapes/geometries(/and topologies)
    Even IFC, especially its Psets, and Qtos are "somewhat" template
    Personally I see some "keywords" on Dual Graph that make it hard to me deny it, like "Symmetric", like seeing they have (co-)relation with Voronoi and Delaunay diagrams, ...
    However, today there are other methods that I think have better outcomes than those aforementioned ones, and also BSP or k-d trees, etc
    Methods like Octree, BVH, etc

  • @JQL said:
    So, for me the ideal process of wall composition is not that the wall type is predefined with all layers or that we have to change it depending on the two adjoining rooms, but that the adjoining rooms have a finishes definition that adds layers to the wall type. If you change finishes in the rooms, the wall type keeps being the same, but the geometry and layers attached to it change.

    What you are describing is inter-object communication and since Topologic is object-oriented, these types of workflows are what it is designed to do. Obviously, as said before, this is not something that would be available out of the box. A computational designer would create these rules and workflows using the Topologic API.

    JQL
  • So I read one of those beginner's guides, and my first python script is a Blender add-on:

    JesusbillMoultbruno_perdigaopaulleebasweincarlopavJanFJQLCyrilCGR
  • So you do exercise sorcery ... I knew it from the moment i saw Homemaker.
    Not an architect but I feel this could end up having a great value for them. Excited to see how this will evolve!
    I'd actually fancy some of your magic for structural engineering as well ... let's see in the near future if there is any possibility.
    Keep Rocking @brunopostle !!

    brunopostle
  • @brunopostle you're an absolute wizard! Awesome work! This could pave the way to a FOSS alternative to early stage feasibility analysis, and test fits for parking, office layouts, residential ...

    brunopostlecarlopavCGRtheoryshaw
  • Congratulations @brunopostle !

    This is uncanny. A bit scary too. You have to share where did you read those beginer guides...

    As an architect I don't want to be thrown out of the equation, but I could clearly see myself having a decision making job over the stuff that is magically being thrown at me.

    How do you envision changes to style, placement of windows, other stair layouts, etc?

    Do you think users will be able to define some sort of parameters? Some sort of mix between direct modelling, some constraints and sorcery?

    CGR
  • JQLJQL
    edited October 2020

    @arquitextonica said:
    Attached some screenshots I prepared for the seminar I taught in the Universität Stuttgart. They were done with @topologic framework on grasshopper on Rhino. But I think the workflow would be portable.
    I made a grid of cells and assigned different programs to each one, the wall types are sorted using boolean gates depending on the programs they are in between (if progs are 1 AND 2 then type A). Decks are sorted likewise, program "Patio" i.e. removes the face over it, and so on.
    You can also see the translation of the topologic elements into BIM objects through the archicad-grasshopper plugin.

    If @JQL or @brunopostle or any other of you are interested in discussing further, here I am.






    Hi @arquitextonica I'm very much interested in discussing this. It seems like the perfect workflow as a progress to what I do which seems to be the same thing without an automation in the middle, as you can see a very basic example here:

    https://community.osarch.org/discussion/211/basic-ifc2x3-model-exported-from-sketchup#latest

    I wouldn't know where to start asking but maybe, so I get things clear, the last image is from a model automatically generated from something like the first 4 image models right?

  • edited October 2020

    @JQL said:

    This is uncanny. A bit scary too. You have to share where did you read those beginer guides...

    I read one that was posted here a few weeks ago.

    How do you envision changes to style, placement of windows, other stair layouts, etc?

    I currently have two styles, this one and a 'courtyard' style. This one has six different size windows, several doors, columns, and three shop fronts, which get used depending on available space. The spacing between windows, columns and doors is set in a 'stylesheet', which is configurable with some inheritance, so you can subclass a style by making small or large tweaks. The mouldings are also set (or not) in the style, with the actual profiles defined in 2D DXF files.

    This is an interactive tool, so it won't design your building, you need to consider room sizes and ceiling heights etc.. if you are concerned about proportion and composition. I want it to give interactive feedback based on a pattern language, daylighting etc.. hints that you can choose to ignore (it should also price the building as you go, why not?). There is a lot to do, somebody still needs to create a python Topologic API to do this properly.

    JQL
  • How can this fit to the technical parts coming into the building? Instead of Walls, it would be an electrical plug? The constraints would be: set plugs at 30cm above floorground and 20cm from wall edges, have 7 of them in a living-room, 2 in bathrooms.. the whole cable tree would be installed automatically? (some modelica add-on would calculate the right cable size for the needed current values acording to distances, the distribution board ready made?)
    need a new job.

  • @brunopostle said:

    I currently have two styles, this one and a 'courtyard' style. This one has six different size windows, several doors, columns, and three shop fronts, which get used depending on available space. The spacing between windows, columns and doors is set in a 'stylesheet', which is configurable with some inheritance, so you can subclass a style by making small or large tweaks. The mouldings are also set (or not) in the style, with the actual profiles defined in 2D DXF files.

    This is an interactive tool, so it won't design your building, you need to consider room sizes and ceiling heights etc.. if you are concerned about proportion and composition. I want it to give interactive feedback based on a pattern language, daylighting etc.. hints that you can choose to ignore (it should also price the building as you go, why not?). There is a lot to do, somebody still needs to create a python Topologic API to do this properly.

    I understand that after you generated the base cell mesh you can regenerate the model and it is blazing fast too.

    What if we use those base windows, doors and columns and we change them? Would it work? Would it change on the fly? Or are they defined by code?

    And what if we wanted to change width or placement point after they are set on place? Would it be direct modelling on blender or would that placement point change according to the new geometry of the base cell model?

    Sorry for the amount of questions, but you shouldn't have made this so interesting

  • @JQL said:
    I understand that after you generated the base cell mesh you can regenerate the model and it is blazing fast too.

    It's not quite blazing fast, the larger models have some frames cut from the video for artistic purposes ;). The add-on writes temp files and blenderbim is importing the resulting IFC file - which as we know takes time. If and when the topology code is running within the add-on it will be possible to generate IFC data for just the elements that have changed, this will be blazing fast and will scale to very large models.

    What if we use those base windows, doors and columns and we change them? Would it work? Would it change on the fly? Or are they defined by code?

    Yes I can see that the predefined style will need to be modified per project, and you will want to do this after you have started modelling in 3D. You can change the files (they are just DXF meshes, though if Blender gets a new asset manager then it would make sense to use this), or you can add new files and alter the stylesheet to point at them.

    And what if we wanted to change width or placement point after they are set on place? Would it be direct modelling on blender or would that placement point change according to the new geometry of the base cell model?

    Ultimately I want to be able to nudge a window, delete or swap it with another, though this needs to be a generic functionality shared between all the architectural tools - once a model has IFC semantic data and we can tell the difference between a window and a pot plant programmatically then all windows should have functionality for swapping, sliding etc...

    JQLJesusbill
  • @lukas said:
    How can this fit to the technical parts coming into the building? Instead of Walls, it would be an electrical plug? The constraints would be: set plugs at 30cm above floorground and 20cm from wall edges, have 7 of them in a living-room, 2 in bathrooms.. the whole cable tree would be installed automatically? (some modelica add-on would calculate the right cable size for the needed current values acording to distances, the distribution board ready made?)
    need a new job.

    There are limits to how much of this can be automated, but certainly these non-manifold Topologic style meshes are the canvas where services should be planned - at least for domestic buildings.

    JQL
  • I hope you achieve your goals! This is really going to be a blast!

  • I think there're no limits, just we should change our minds, and see things differently, you observe things from a point that is good but not well
    Limitations are solvable, but this is a "multimillion-dollar" challenge, so many don't share the solution publicly, especially in open source projects
    Just some guidance:

  • edited October 2020

    @brunopostle said:

    @JQL said:

    This is uncanny. A bit scary too. You have to share where did you read those beginer guides...

    I read one that was posted here a few weeks ago.

    How do you envision changes to style, placement of windows, other stair layouts, etc?

    I currently have two styles, this one and a 'courtyard' style. This one has six different size windows, several doors, columns, and three shop fronts, which get used depending on available space. The spacing between windows, columns and doors is set in a 'stylesheet', which is configurable with some inheritance, so you can subclass a style by making small or large tweaks. The mouldings are also set (or not) in the style, with the actual profiles defined in 2D DXF files.

    This is an interactive tool, so it won't design your building, you need to consider room sizes and ceiling heights etc.. if you are concerned about proportion and composition. I want it to give interactive feedback based on a pattern language, daylighting etc.. hints that you can choose to ignore (it should also price the building as you go, why not?). There is a lot to do, somebody still needs to create a python Topologic API to do this properly.

    This is indeed uncanny. You read a few Python tutorials and made this during down time between running clothes through the washing mashing and mowing your lawn? Yes sorcery is indeed another correct term.

    I came to the forum to see if there was a thread for Homemaker where I could ask a couple of questions and now this!
    I tried my hands at Homemaker after the meetup where you presented it and even read up a bit about Perl but didn't successfully get Homemaker to run. I can't remember the bugs I was getting anymore as I never went back to it, but I was still hoping to crack it at some point. Just yesterday I thought to ask if you thought Homemaker could be ported to Python to make it work it's magic directly with the Bpy module. Is there any specific reason why it's better suited to Perl? Not that it's a bad thing to have it in Perl and take the output into Blender, but I just wondered about opening up its capabilities even more within the Blender ecosystem, given the important the work you've done with it and the potential therein. What you've done with Topologise is surreal, especially because you only just started and it's also surreal how Homemaker, BlenderBIM, Archipack, Topologic, Andrew Peel's work with asset management in Blender and everything else is just interconnecting in interesting ways. It's a beauty to see all this emerging. I'm in awe.

    baswein
  • @DADA_universe said:

    This is indeed uncanny. You read a few Python tutorials and made this during down time between running clothes through the washing mashing and mowing your lawn? Yes sorcery is indeed another correct term.

    The add-on is just a little Python wrapper that still calls the Perl tools in the background - this is a problem, particularly on Windows where these kind of connections don't really work - I have spent much of the last week answering questions on youtube, twitter, linkedin and bitbucket from people trying to get it working on Windows (with I think one success).

    I came to the forum to see if there was a thread for Homemaker where I could ask a couple of questions and now this!
    I tried my hands at Homemaker after the meetup where you presented it and even read up a bit about Perl but didn't successfully get Homemaker to run. I can't remember the bugs I was getting anymore as I never went back to it, but I was still hoping to crack it at some point. Just yesterday I thought to ask if you thought Homemaker could be ported to Python to make it work it's magic directly with the Bpy module. Is there any specific reason why it's better suited to Perl?

    There is absolutely nothing about Perl that makes it suited to this sort of thing, it was just the tool I had to hand when I started the project, learning Python would have been a better option in retrospect, but you can't do everything all at once.

    Not that it's a bad thing to have it in Perl and take the output into Blender, but I just wondered about opening up its capabilities even more within the Blender ecosystem, given the important the work you've done with it and the potential therein.

    Homemaker itself is non-interactive and takes hours to evolve results, so there isn't much to gain from adding it into blender. The topologise tool though doesn't actually use much code from Homemaker, mainly the IFC compiler (Molior and File::IFC), and could conceivably be ported entirely to a blender add-on, or at least ported a bit at a time. I need to write a post setting out what I think needs to be done, and I think there is demand for a tool like this, but I'm not capable of doing it all.

  • Started to look at python implementation, but i'm struggeleing at some things like perl's Graph implemetation replacement so far. And now dev settle down till next year as i've no real opportunity for any serious coding task like this one.

    DADA_universe
  • @brunopostle said:
    [The topologise code] could conceivably be ported entirely to a blender add-on, or at least ported a bit at a time. I need to write a post setting out what I think needs to be done, and I think there is demand for a tool like this, but I'm not capable of doing it all.

    Currently the Topologise tool is six things strung together:

    1. A simple python blender add-on that has just one function that feeds any and all selected meshes to the other tools and displays the output. This structure is very limiting, the add-on should allow the user to assign properties such as room types, wall types and styles; it should be able to display feedback from processing; and it should understand enough about the model to only regenerate IFC entities for parts of the building that have changed (otherwise it won't scale).
    2. A Perl library that analyses a non-manifold mesh to identify cells and build a model where nodes, faces, edges and cells can be queried as network graphs. This is loosely based on some of the functionality of the C++ Topologic library; a future Topologic Python interface could remove the need for this Perl library, but this requires some C++/Python skills. Another possibility is that the COMPAS project seems to have a Python library for handling these cellular volume meshes, but as far as I can tell it doesn't have the ability to analyse a non-manifold mesh to identify cells, now my Perl code for doing this bit is only about 150 lines, so it might be simple enough to just add this functionality to COMPAS.
    3. Some Perl code that searches the graphs in the topology model for rooms, walls, eaves, floors etc.. This isn't very sophisticated and could be easily rewritten in Python, though ultimately it wants to be able to identify parts of the building that have changed (see above).
    4. A Perl library for assembling IFC data. There is nothing special here, if everything else was Python, this could be replaced by the IfcOpenShell Python library.
    5. Another Perl library that actually generates the IFC geometry, places windows and doors etc.. this is a bit more of a problem as this is about 1500 lines of complicated code.
    6. Finally Topologise uses blenderbim to import the IFC into blender.

    So 2, 3, 4 and 5 are Perl code that could usefully be rewritten in Python. Note that this could be done in stages: 2 & 3 can be ported separately from 4 & 5. In fact porting 4 & 5 is only really necessary to get this stack working on Windows, or if it needed to make use of a future blender asset manager (currently all the assets are simple DXF files, this isn't ideal).

    All this would only reproduce the functionality of the current proof-of-concept, but it would provide a foundation for further work, it could provide a tool that people could use to design buildings, and it could work in FreeCAD too.

    JQLbasweinCGRDADA_universe
  • We are working on a SWIG interface for Topologic. It is going slow because we all have day jobs and we have not used SWIG before. Will update the community once this is accomplished. Once done, my next task would be to write a front end in python per @brunopostle suggestion in step 1. I’m not worried about duplicating efforts. Let’s compare the approaches and discuss what works better once we get there. We need more people to help! 🙂

    JQLbrunopostleCGRDADA_universe
  • Is there any chance this means topologic is getting adapted to sverchok for example? That would be sweet!

    topologic
Sign In or Register to comment.