Pre-warm OpenNURBS native libs am Plugin-Start
Beim install_listeners() werden dummy Curve.Offset, Extrusion.Create und Brep.CreateBooleanUnion/Difference Aufrufe gemacht damit der lazy-loaded native code geladen ist. Soll den First-Call-Lag bei der ersten echten Wand-Operation reduzieren. In der Praxis hilft das bei der Tech-Drawing-Failure nicht (das ist eine Rhino-interne Limitation der Hidden-Line-Analyse die mit rapid brep Delete+Add nicht klar kommt) — aber schadet auch nicht und kann andere Cold-Start-Edge-Cases verbessern.
This commit is contained in:
@@ -2751,6 +2751,43 @@ class _ClusterVolumeSelectHandler(Rhino.UI.MouseCallback):
|
||||
_STICKY_CLUSTER_SELECT = "_dossier_cluster_select_handler"
|
||||
|
||||
|
||||
def _prewarm_native_libs():
|
||||
"""Beim Plugin-Start native OpenNURBS-Operationen einmal triggern damit
|
||||
der lazy-loaded native Code geladen ist. Eliminiert den First-Call-Lag
|
||||
bei der ersten echten Wand-Verbindung (Boolean-Union, Curve.Offset,
|
||||
Extrusion.Create — alle laden ihren native code beim ersten Aufruf)."""
|
||||
try:
|
||||
# Dummy Curve-Offset (laedt native offset code)
|
||||
line = rg.LineCurve(rg.Point3d(0, 0, 0), rg.Point3d(1, 0, 0))
|
||||
try: line.Offset(rg.Plane.WorldXY, 0.1, 0.001,
|
||||
rg.CurveOffsetCornerStyle.Sharp)
|
||||
except Exception: pass
|
||||
# Dummy Extrusion (laedt native extrude code)
|
||||
try:
|
||||
poly = rg.Polyline([rg.Point3d(0, 0, 0), rg.Point3d(1, 0, 0),
|
||||
rg.Point3d(1, 1, 0), rg.Point3d(0, 1, 0),
|
||||
rg.Point3d(0, 0, 0)])
|
||||
pc = rg.PolylineCurve(poly)
|
||||
ext = rg.Extrusion.Create(pc, 1.0, True)
|
||||
if ext is not None:
|
||||
ext.ToBrep()
|
||||
except Exception: pass
|
||||
# Dummy Boolean-Union (laedt native boolean code — DAS war wahrscheinlich
|
||||
# der grosse First-Call-Lag bei Wand-Verbindung)
|
||||
try:
|
||||
b1 = rg.Brep.CreateFromBox(rg.BoundingBox(
|
||||
rg.Point3d(0, 0, 0), rg.Point3d(1, 1, 1)))
|
||||
b2 = rg.Brep.CreateFromBox(rg.BoundingBox(
|
||||
rg.Point3d(0.5, 0, 0), rg.Point3d(1.5, 1, 1)))
|
||||
if b1 and b2:
|
||||
rg.Brep.CreateBooleanUnion([b1, b2], 0.001)
|
||||
rg.Brep.CreateBooleanDifference([b1], [b2], 0.001)
|
||||
except Exception: pass
|
||||
print("[ELEMENTE] Native libs pre-warmed (offset/extrude/boolean)")
|
||||
except Exception as ex:
|
||||
print("[ELEMENTE] prewarm:", ex)
|
||||
|
||||
|
||||
def install_cluster_select_handler():
|
||||
"""Idempotent: alten Handler disable, neuen installieren."""
|
||||
try:
|
||||
@@ -17421,6 +17458,13 @@ def _install_listeners(bridge):
|
||||
install_cluster_select_handler()
|
||||
except Exception as ex:
|
||||
print("[ELEMENTE] cluster-select install:", ex)
|
||||
# Pre-Warm: native OpenNURBS-Libraries beim Plugin-Start laden um den
|
||||
# First-Call-Lag zu vermeiden (User-Meldung: beim ersten Wand-Verbinden
|
||||
# haengt das UI kurz, danach nicht mehr → native code wird lazy-loaded).
|
||||
try:
|
||||
_prewarm_native_libs()
|
||||
except Exception as ex:
|
||||
print("[ELEMENTE] prewarm native:", ex)
|
||||
|
||||
|
||||
def _bridge_factory():
|
||||
|
||||
Reference in New Issue
Block a user