From cd4856c3d0432f4b5d99179150af1af956f1e3c0 Mon Sep 17 00:00:00 2001 From: SpectralVectors Date: Fri, 22 Mar 2024 17:54:04 -0400 Subject: [PATCH] Import Fix, funcs moved, refs updated, ocl rename Changed all imports from absolute to relative: - instead of importing the module 'cam' now imports come from '.' the relative parent folder - importing the module into itself resulted in a circular import error, relative imports avoid this Moved Functions, refs updated: - some functions (and 2 variables) only existed on the base level of the module, in the init file, and could not otherwise be accessed, they were moved into the utils file with other similar functions - these were primarily called as update functions for Properties scattered across the addon, these have all been updated to reflect the new location and import convention opencamlib_version rename: - in 2 files there was a local variable named 'opencamlib_version' that was defined by a function called 'opencamlib_version' that returned the opencamlib_version - this seemed to confuse Blender into thinking that it was being called before it was defined, and simply changing the variable name to 'ocl_version' while keeping the function name as 'opencamlib_version' fixed the issue --- scripts/addons/cam/opencamlib/oclSample.py | 15 ++++--- scripts/addons/cam/opencamlib/opencamlib.py | 46 +++++++++++++-------- 2 files changed, 37 insertions(+), 24 deletions(-) diff --git a/scripts/addons/cam/opencamlib/oclSample.py b/scripts/addons/cam/opencamlib/oclSample.py index 2d9a1baf..c9f6e287 100644 --- a/scripts/addons/cam/opencamlib/oclSample.py +++ b/scripts/addons/cam/opencamlib/oclSample.py @@ -11,9 +11,9 @@ import tempfile from io_mesh_stl import blender_utils import mathutils import math -from cam.simple import activate -from cam.exception import * -from cam.async_op import progress_async +from ..simple import activate +from ..exception import * +from ..async_op import progress_async OCL_SCALE = 1000.0 @@ -59,9 +59,11 @@ async def ocl_sample(operation, chunks, use_cached_mesh=False): cutter = None if op_cutter_type == 'END': - cutter = ocl.CylCutter((op_cutter_diameter + operation.skin * 2) * 1000, cutter_length) + cutter = ocl.CylCutter( + (op_cutter_diameter + operation.skin * 2) * 1000, cutter_length) elif op_cutter_type == 'BALLNOSE': - cutter = ocl.BallCutter((op_cutter_diameter + operation.skin * 2) * 1000, cutter_length) + cutter = ocl.BallCutter( + (op_cutter_diameter + operation.skin * 2) * 1000, cutter_length) elif op_cutter_type == 'VCARVE': cutter = ocl.ConeCutter((op_cutter_diameter + operation.skin * 2) * 1000, op_cutter_tip_angle, cutter_length) @@ -89,7 +91,8 @@ async def ocl_sample(operation, chunks, use_cached_mesh=False): for chunk in chunks: for coord in chunk.get_points_np(): - bdc.appendPoint(ocl.CLPoint(coord[0] * 1000, coord[1] * 1000, op_minz * 1000)) + bdc.appendPoint(ocl.CLPoint( + coord[0] * 1000, coord[1] * 1000, op_minz * 1000)) await progress_async("OpenCAMLib sampling") bdc.run() diff --git a/scripts/addons/cam/opencamlib/opencamlib.py b/scripts/addons/cam/opencamlib/opencamlib.py index e7c507a2..7eef7a11 100644 --- a/scripts/addons/cam/opencamlib/opencamlib.py +++ b/scripts/addons/cam/opencamlib/opencamlib.py @@ -13,16 +13,17 @@ import tempfile import numpy as np from subprocess import call -from cam.collision import BULLET_SCALE -from cam import simple -from cam.chunk import camPathChunk -from cam.simple import * -from cam.async_op import progress_async +from ..collision import BULLET_SCALE +from .. import simple +from .. import utils +from ..chunk import camPathChunk +from ..simple import * +from ..async_op import progress_async from shapely import geometry as sgeometry -from .oclSample import get_oclSTL -from cam import utils - -from cam.opencamlib.oclSample import ocl_sample +from .oclSample import ( + get_oclSTL, + ocl_sample +) OCL_SCALE = 1000.0 @@ -84,14 +85,17 @@ def exportModelsToSTL(operation): bpy.ops.object.duplicate(linked=False) # collision_object = bpy.context.scene.objects.active # bpy.context.scene.objects.selected = collision_object - file_name = os.path.join(tempfile.gettempdir(), "model{0}.stl".format(str(file_number))) - bpy.ops.object.transform_apply(location=True, rotation=True, scale=True) + file_name = os.path.join( + tempfile.gettempdir(), "model{0}.stl".format(str(file_number))) + bpy.ops.object.transform_apply( + location=True, rotation=True, scale=True) bpy.ops.transform.resize(value=(OCL_SCALE, OCL_SCALE, OCL_SCALE), constraint_axis=(False, False, False), orient_type='GLOBAL', mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), texture_space=False, release_confirm=False) - bpy.ops.object.transform_apply(location=True, rotation=True, scale=True) + bpy.ops.object.transform_apply( + location=True, rotation=True, scale=True) bpy.ops.export_mesh.stl(check_existing=True, filepath=file_name, filter_glob="*.stl", use_selection=True, ascii=False, use_mesh_modifiers=True, axis_forward='Y', axis_up='Z', global_scale=1.0) bpy.ops.object.delete() @@ -119,7 +123,8 @@ async def oclResampleChunks(operation, chunks_to_resample, use_cached_mesh): sample_index = 0 for chunk, i_start, i_length in chunks_to_resample: - z = np.array([p.z for p in samples[sample_index:sample_index+i_length]]) / OCL_SCALE + z = np.array( + [p.z for p in samples[sample_index:sample_index+i_length]]) / OCL_SCALE pts = chunk.get_points_np() pt_z = pts[i_start:i_start+i_length, 2] pt_z = np.where(z > pt_z, z, pt_z) @@ -149,7 +154,8 @@ def oclGetMedialAxis(operation, chunks): oclWaterlineHeightsToOCL(operation) operationSettingsToOCL(operation) curvesToOCL(operation) - call([PYTHON_BIN, os.path.join(bpy.utils.script_path_pref(), "addons", "cam", "opencamlib", "ocl.py")]) + call([PYTHON_BIN, os.path.join(bpy.utils.script_path_pref(), + "addons", "cam", "opencamlib", "ocl.py")]) waterlineChunksFromOCL(operation, chunks) @@ -164,12 +170,15 @@ async def oclGetWaterline(operation, chunks): op_cutter_tip_angle = operation['cutter_tip_angle'] cutter = None - cutter_length = 150 # TODO: automatically determine necessary cutter length depending on object size + # TODO: automatically determine necessary cutter length depending on object size + cutter_length = 150 if op_cutter_type == 'END': - cutter = ocl.CylCutter((op_cutter_diameter + operation.skin * 2) * 1000, cutter_length) + cutter = ocl.CylCutter( + (op_cutter_diameter + operation.skin * 2) * 1000, cutter_length) elif op_cutter_type == 'BALLNOSE': - cutter = ocl.BallCutter((op_cutter_diameter + operation.skin * 2) * 1000, cutter_length) + cutter = ocl.BallCutter( + (op_cutter_diameter + operation.skin * 2) * 1000, cutter_length) elif op_cutter_type == 'VCARVE': cutter = ocl.ConeCutter((op_cutter_diameter + operation.skin * 2) * 1000, op_cutter_tip_angle, cutter_length) @@ -192,7 +201,8 @@ async def oclGetWaterline(operation, chunks): for l in wl_loops: inpoints = [] for p in l: - inpoints.append((p.x / OCL_SCALE, p.y / OCL_SCALE, p.z / OCL_SCALE)) + inpoints.append( + (p.x / OCL_SCALE, p.y / OCL_SCALE, p.z / OCL_SCALE)) inpoints.append(inpoints[0]) chunk = camPathChunk(inpoints=inpoints) chunk.closed = True