MCPcopy Create free account
hub / github.com/IfcOpenShell/IfcOpenShell / Clasher

Class Clasher

src/ifcclash/ifcclash/ifcclash.py:79–349  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

77
78
79class Clasher:
80 def __init__(self, settings: ClashSettings):
81 self.settings = settings
82 self.geom_settings = ifcopenshell.geom.settings()
83 self.clash_sets: list[ClashSet] = []
84 self.logger = self.settings.logger
85 self.groups: dict[str, ClashGroup] = {}
86 self.ifcs: dict[str, ifcopenshell.file] = {}
87 self.tree = None
88
89 def clash(self) -> None:
90 for clash_set in self.clash_sets:
91 self.process_clash_set(clash_set)
92
93 def process_clash_set(self, clash_set: ClashSet) -> None:
94 self.tree = ifcopenshell.geom.tree()
95 self.create_group("a")
96 for source in clash_set["a"]:
97 source["ifc"] = self.load_ifc(source["file"])
98 self.add_collision_objects("a", source["ifc"], source)
99
100 if "b" in clash_set and clash_set["b"]:
101 self.create_group("b")
102 for source in clash_set["b"]:
103 source["ifc"] = self.load_ifc(source["file"])
104 self.add_collision_objects("b", source["ifc"], source)
105 b = "b"
106 else:
107 b = "a"
108
109 mode = clash_set["mode"]
110 if mode == "intersection":
111 assert "tolerance" in clash_set and "check_all" in clash_set
112 results = self.tree.clash_intersection_many(
113 list(self.groups["a"]["elements"].values()),
114 list(self.groups[b]["elements"].values()),
115 tolerance=clash_set["tolerance"],
116 check_all=clash_set["check_all"],
117 )
118 elif mode == "collision":
119 assert "allow_touching" in clash_set
120 results = self.tree.clash_collision_many(
121 list(self.groups["a"]["elements"].values()),
122 list(self.groups[b]["elements"].values()),
123 allow_touching=clash_set["allow_touching"],
124 )
125 elif mode == "clearance":
126 assert "clearance" in clash_set and "check_all" in clash_set
127 results = self.tree.clash_clearance_many(
128 list(self.groups["a"]["elements"].values()),
129 list(self.groups[b]["elements"].values()),
130 clearance=clash_set["clearance"],
131 check_all=clash_set["check_all"],
132 )
133 else:
134 assert_never(mode)
135
136 processed_results: dict[str, ClashResult] = {}

Callers 1

__main__.pyFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected