OSArch Community

4th July 20:00 UTC Monthly Meetup

  1. B

    @paullee I would start at the end result and work your way back.

    This is a visualisation of a network graph (it's the building I evolved during my presentation):

    ..the image itself is generated from a text file by the GraphViz tool with a command like this:

    neato -Tsvg -Gpage="4,4" -Gsize="4,4" -Gratio=fill -Gcenter=1 < graph.dot > graph.svg

    The input text file used by GraphViz is a good example of how you describe an undirected (possibly cyclic) graph. There are two types of objects defined: nodes, and edges between nodes:

    strict graph G {

    label="15aee6eef927b01955152d43aa8504d5";

    graph [overlap=false];

    "0/ll\nOutside" [color="#ddddff",style=filled];

    "0/rl\nLiving" [color="#99ff99",style=filled];

    "0/lr\nKitchen" [color="#9999ff",style=filled];

    "0/rr\nCirculation" [color="#ffff99",style=filled];

    "0/rr\nCirculation"--"1/rr\nCirculation" [label="Stair",style=dashed];

    "1/rr\nCirculation"--"2/rr\nCirculation" [label="Stair",style=dashed];

    "0/rr\nCirculation"--"0/ll\nOutside" [label="2.9"];

    "0/rl\nLiving"--"0/lr\nKitchen" [label="4.3"];

    "0/ll\nOutside"--"0/lr\nKitchen" [label="2.8"];

    "0/rl\nLiving"--"0/rr\nCirculation" [label="4.0"];

    "0/ll\nOutside"--"0/c\nStreet" [label="Entry"];

    "0/rr\nCirculation"--"0/ll\nOutside" [label="Entry"];

    "1/rl\nBedroom" [color="#ff9999",style=filled];

    "1/lr\nOutside" [color="#ddddff",style=filled];

    "1/rr\nCirculation" [color="#ffff99",style=filled];

    "1/ll\nToilet" [color="#ff99ff",style=filled];

    "1/rr\nCirculation"--"1/ll\nToilet" [label="2.9"];

    "1/rl\nBedroom"--"1/lr\nOutside" [label="4.3"];

    "1/rl\nBedroom"--"1/rr\nCirculation" [label="4.0"];

    "2/ll\nOutside" [color="#ddddff",style=filled];

    "2/rl\nBedroom" [color="#ff9999",style=filled];

    "2/rr\nCirculation" [color="#ffff99",style=filled];

    "2/ll\nOutside"--"2/rr\nCirculation" [label="2.9"];

    "2/rr\nCirculation"--"2/rl\nBedroom" [label="4.0"];

    }

    It appears that the way you model a network graph in python is very similar. The advantage of using a graphing library is that you can query the graph: check it for cycles or unconnected nodes, find the shortest distance between nodes etc..

  1. P

    Thanks for the detailed explanation and pointer, need more time to study @brunopostle !

    It seems 'nodes' in a graph are rooms / spaces; ... 'edges' is the connecting doors at common wall between 2 spaces / rooms ?

    Wondering, checking, if it can contain information like ?

    • which walls / windows define the 'node' (rooms / spaces)

    • which are common walls of 2 adjacent spaces

    • 'elements' / 'other information' of the 'node' (e.g. furnitures, finishes, area, height, peoples accommodating...etc.)

    Similar problems for a geographic maps - finding the common boundaries of 2 countries e.g.

    Too many questions :)

  1. B

    @paullee for a building like Villa Savoye, no CAD is going to figure out automatically where one room starts and another finishes.

    I don't know how freecad does this, but for IFC I think you are usually expected to manually assign walls as boundaries for spaces. i.e you have to declare that wall A is a boundary for space B, and separately that wall A is a boundary for space C - so the fact that spaces B and C are adjacent is implicit rather than declared directly. I also suspect that when constructing a circulation graph, you would have to check if each wall has a door in order to decide whether to add an edge.

    [edit] Thinking about this problem with IFC, a wall can be any length and can span multiple spaces, and there is nothing to indicate which space a door is related-to. So if you wanted to construct a circulation graph, you have to resolve the 3d position of the door, and then make an assumption from this about which spaces it connects.

  1. P

    Thanks again, really have lots to study now !

  1. Page 1
  2. 2

Login or Register to reply.