71 lines
2.1 KiB
Python
71 lines
2.1 KiB
Python
import sys
|
|
from pathlib import Path
|
|
from unittest.mock import MagicMock
|
|
|
|
PROJECT_ROOT = Path(__file__).resolve().parent.parent
|
|
sys.path.append(str(PROJECT_ROOT.parent))
|
|
|
|
class DummyNodeSocket: pass
|
|
class DummyNode: pass
|
|
class DummyObject: pass
|
|
class DummyMesh: pass
|
|
class DummyNodeSocketShader: pass
|
|
class DummyNodeCustomGroup: pass
|
|
class DummyNodeTree: pass
|
|
class DummyOperator: pass
|
|
class DummyMenu: pass
|
|
class DummyPanel: pass
|
|
class DummyPropertyGroup: pass
|
|
|
|
mock_types = MagicMock()
|
|
mock_types.NodeSocket = DummyNodeSocket
|
|
mock_types.Node = DummyNode
|
|
mock_types.Object = DummyObject
|
|
mock_types.Mesh = DummyMesh
|
|
mock_types.NodeSocketShader = DummyNodeSocketShader
|
|
mock_types.NodeCustomGroup = DummyNodeCustomGroup
|
|
mock_types.NodeTree = DummyNodeTree
|
|
mock_types.Operator = DummyOperator
|
|
mock_types.Menu = DummyMenu
|
|
mock_types.Panel = DummyPanel
|
|
mock_types.PropertyGroup = DummyPropertyGroup
|
|
|
|
mock_bpy = MagicMock()
|
|
mock_bpy.context.scene.unit_settings.scale_length = 0.001
|
|
mock_bpy.types = mock_types
|
|
|
|
sys.modules['bpy'] = mock_bpy
|
|
sys.modules['bpy.types'] = mock_types
|
|
sys.modules['bpy.props'] = MagicMock()
|
|
sys.modules['bpy.utils'] = MagicMock()
|
|
sys.modules['bpy.utils.previews'] = MagicMock()
|
|
sys.modules['bpy.app'] = MagicMock()
|
|
sys.modules['bpy.app.handlers'] = MagicMock()
|
|
|
|
import numpy as np
|
|
import time
|
|
from NodeSlicer.core.slice import SlicePaths
|
|
|
|
n_layers = 100
|
|
paths_per_layer = 5
|
|
pts_per_path = 300
|
|
|
|
paths = []
|
|
np.random.seed(42)
|
|
for z in np.linspace(0, 20, n_layers):
|
|
for r in [5.0, 10.0, 15.0, 20.0, 25.0]:
|
|
theta = np.linspace(0, 2*np.pi, pts_per_path)
|
|
x = r * np.cos(theta) + np.random.normal(0, 0.005, pts_per_path)
|
|
y = r * np.sin(theta) + np.random.normal(0, 0.005, pts_per_path)
|
|
x[-1] = x[0]
|
|
y[-1] = y[0]
|
|
p = np.column_stack([x, y, np.full(pts_per_path, z)])
|
|
paths.append(p)
|
|
|
|
sp = SlicePaths(paths)
|
|
print(f"Total paths: {len(sp)}, Total points: {sum(len(p) for p in sp)}")
|
|
|
|
t0 = time.perf_counter()
|
|
res_shapely = sp.simplify(0.05, preserve_topology=True)
|
|
t1 = time.perf_counter()
|
|
print(f"Current Shapely simplify: {t1 - t0:.4f} s, output points: {sum(len(p) for p in res_shapely)}")
|