reconstructing interior walls
vedant41patel opened this issue · comments
Hi there!
Firstly, I'd like to express my appreciation for the fantastic work on the Points2Poly—it's truly impressive!
Now, onto my main question: I recently attempted to run Points2Poly on a simple structure with a water-tight layout and one internal wall. However, the output file didn't include the internal wall. I'm curious to know if it's possible to reconstruct internal walls and components like stairs using Points2Poly. If so, could you guide me on the necessary modifications in the code and where specifically in the codebase I should make these changes?
here is the simple model that i tried:
- this is my original model made of simple geometries.
![image](https://private-user-images.githubusercontent.com/154316198/294878400-2b3d2b0b-cff7-4c98-af45-bfe16016f7cd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjUwMTkwMzEsIm5iZiI6MTcyNTAxODczMSwicGF0aCI6Ii8xNTQzMTYxOTgvMjk0ODc4NDAwLTJiM2QyYjBiLWNmZjctNGM5OC1hZjQ1LWJmZTE2MDE2ZjdjZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODMwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgzMFQxMTUyMTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMTg5MDgwYzY2MGI0NDBkZjY3OTlhNjMxM2UzODg3MDk2MzE2YTZhNjY3YTdjZTQ3MzljYjA0NjIxNzYzYmZjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.YuHNJCED6gTiXpzdnvG5bpMbDKUn4PBPKKc7b9l3sH4)
- here is the the internal wall.
![image](https://private-user-images.githubusercontent.com/154316198/294879301-f3f98f4a-c6fc-4abb-86f0-dac370dab1c9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjUwMTkwMzEsIm5iZiI6MTcyNTAxODczMSwicGF0aCI6Ii8xNTQzMTYxOTgvMjk0ODc5MzAxLWYzZjk4ZjRhLWM2ZmMtNGFiYi04NmYwLWRhYzM3MGRhYjFjOS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODMwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgzMFQxMTUyMTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yYWNhYzdiZWU2NmY3YWQ3NjhmNDhmMWY0NjA2ZjRlNjJlNmE4MGU2MjU5MGE1NjUxZTcwZDFiMTIwMjNkOWQ0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.PIDrG6Uf-wiPzq_Bh_ZPAxZkk43kqr43s2TkjPF2uFk)
- here is the point cloud:
![image](https://private-user-images.githubusercontent.com/154316198/294878751-90eb0a73-d502-4c04-aaf5-0579cc572ec1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjUwMTkwMzEsIm5iZiI6MTcyNTAxODczMSwicGF0aCI6Ii8xNTQzMTYxOTgvMjk0ODc4NzUxLTkwZWIwYTczLWQ1MDItNGMwNC1hYWY1LTA1NzljYzU3MmVjMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODMwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgzMFQxMTUyMTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wMTA5OWY1ZTQ0YzI1NDQzMTQ3NThlMTA3YjY0NGZmMzE3MjUxMWY5NzA0NGU4NDQ4NzczN2Q4MjA0ZDI3OTVkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.k0TGxLLd-O0Xa6PnpcmaS2WZYlgOVavDGTteMxQkCBY)
- here is the output with the cut cross section of wall area.
![image](https://private-user-images.githubusercontent.com/154316198/294878956-e683955e-18dd-454b-81c1-1387760bd4b1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjUwMTkwMzEsIm5iZiI6MTcyNTAxODczMSwicGF0aCI6Ii8xNTQzMTYxOTgvMjk0ODc4OTU2LWU2ODM5NTVlLTE4ZGQtNDU0Yi04MWMxLTEzODc3NjBiZDRiMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODMwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgzMFQxMTUyMTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yM2U4OWI1M2RkOGQ1MmExZDI2OGEwNzU1Yjc1YmUyNjE0ODAxMzVkMzdjY2Q5NDBlMDg5ZWEyNDA3OGFlNzE5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.Hi9TnlB8VL8QkTxykrm9TYAUtwhvUJ3UPF5GdQ-QGoM)
as you can see there is no wall in the output. can you explain this please!
Hi @vedant41patel, this is an interesting usecase. The internal wall, though having points attached, is not part of the boundary: the two cells connected via this wall are both labeled as inside, therefore the cut will not touch there. One simple way to recover the internal wall is to make it a volumetric cell (e.g., by appending a perpendicular plane with small offset to create a thin cell), and then mark this cell as inside (adding the cell into AdjacencyGraph.reachable
), after the cut.
sorry to bother you again, but i tried adding offset internal wall in the 3d model and tried it. it still not working. can you explain it in more detail what i have to do in this case? and where to add AdjuncencyGraph.reachable
and where to mark the cell as inside cell. i am lost here can you please help me.
You would first need to make sure a cell of the internal wall does exist in the cell complex, then perform the cut, and finally mark this cell as inside by adding the cell index to AdjacencyGraph.reachable
, followed by AdjacencyGraph.save_surface_obj
.
Hi, did you create the model by hand in Sketchup? How did you obtain the corresponding point cloud?
@vedant41patel
I first created the 3d model of the houses for training in blender and then i used blensor to create the point cloud from the 3d model of the building. However because of some issues with training the whole point cloud on points2surf, so I created 3d model of each room of building and then used it to train points2surf. Also I used 3Dbag dataset to add more training data.
"Hello, can I directly use model to reconstruct my point clouds? I noticed that your point cloud datasets are generated from meshes, but my point clouds are obtained through laser scanning." @vedant41patel