diff --git a/rhino/aliases/cmd/smart_join.py b/rhino/aliases/cmd/smart_join.py index 80d5db1..0f5b027 100644 --- a/rhino/aliases/cmd/smart_join.py +++ b/rhino/aliases/cmd/smart_join.py @@ -296,80 +296,12 @@ def _l_join_attempt(doc, sel): doc.EndUndoRecord(ur) -def _layer_join_attempt(doc, wand_volumes): - """Layer-Level Join: Versuch BoolUnion zwischen 2 wand_volume Breps. - Wenn beide gleiches Material haben + sich beruehren oder ueberlappen - → mergen zu einem Brep. Behaelt UserStrings (= wand_id, material, - layer_idx) vom ersten Brep.""" - if len(wand_volumes) != 2: return False - br0 = wand_volumes[0].Geometry - br1 = wand_volumes[1].Geometry - if not isinstance(br0, rg.Brep) or not isinstance(br1, rg.Brep): - return False - # Material-Check via UserStrings (= dossier_element_material) - mat0 = wand_volumes[0].Attributes.GetUserString( - "dossier_layer_material") or "" - mat1 = wand_volumes[1].Attributes.GetUserString( - "dossier_layer_material") or "" - if mat0 and mat1 and mat0 != mat1: - print("[SMART-JOIN] Layer-Join: Materialien unterschiedlich " - "({} vs {}), skip.".format(mat0, mat1)) - return False - try: - union = rg.Brep.CreateBooleanUnion([br0, br1], 0.01) - except Exception as ex: - print("[SMART-JOIN] Layer-Join BoolUnion exc:", ex) - return False - if not union or len(union) == 0: - print("[SMART-JOIN] Layer-Join: Breps overlappen nicht " - "(BoolUnion returned None/empty)") - return False - if len(union) > 1: - print("[SMART-JOIN] Layer-Join: Breps overlappen nicht (BoolUnion" - " returned {} pieces, brauche 1)".format(len(union))) - return False - # 1 merged Brep - merged = union[0] - if not merged.IsValid: - print("[SMART-JOIN] Layer-Join: merged Brep invalid") - return False - try: merged.MergeCoplanarFaces(0.01) - except Exception: pass - ur = doc.BeginUndoRecord("DOSSIER Layer-Join") - try: - ok = doc.Objects.Replace(wand_volumes[0].Id, merged) - if ok: - doc.Objects.Delete(wand_volumes[1].Id, True) - return True - return False - finally: - doc.EndUndoRecord(ur) - - def _run(): doc = Rhino.RhinoDoc.ActiveDoc if doc is None: return sel = list(doc.Objects.GetSelectedObjects(False, False)) if not sel: Rhino.RhinoApp.RunScript("_Join", False); return - # Layer-Level Join: wenn GENAU 2 wand_volume Breps selektiert + keine - # wand_axis → versuche Layer-Join (= BoolUnion der zwei Layer-Breps). - _wand_vols = [o for o in sel - if (o.Attributes.GetUserString("dossier_element_type") - or "") == "wand_volume"] - _wand_axes = [o for o in sel - if (o.Attributes.GetUserString("dossier_element_type") - or "") == "wand_axis"] - if (len(_wand_vols) == 2 and len(_wand_axes) == 0 - and len(sel) == 2): - print("[SMART-JOIN] Layer-Join attempt: 2 wand_volume Breps") - try: - if _layer_join_attempt(doc, _wand_vols): - doc.Views.Redraw() - print("[SMART-JOIN] Layer-Join: Breps zu einem gemerged") - return - except Exception as ex: - print("[SMART-JOIN] Layer-Join exc:", ex) # Info-Hint (T-Join unterstuetzt 1-Wand-Modus, L-Join braucht 2) n_wand_axes = sum(1 for o in sel if (o.Attributes.GetUserString("dossier_element_type") diff --git a/rhino/elemente.py b/rhino/elemente.py index b54e8ec..989ca20 100644 --- a/rhino/elemente.py +++ b/rhino/elemente.py @@ -2778,11 +2778,6 @@ class _ClusterVolumeSelectHandler(Rhino.UI.MouseCallback): try: if "Left" not in str(e.MouseButton): return except Exception: pass - # Alt-Click bypassed Cluster-Swap → user kann Layer-Breps - # direkt anwaehlen (= fuer Layer-Smart-Join) - try: - if bool(e.AltKeyDown): return - except Exception: pass view = e.View if view is None: return vp = view.ActiveViewport