23
23
from mathutils .geometry import interpolate_bezier
24
24
from mathutils import Vector , Matrix
25
25
26
- from sverchok .utils .sv_logging import sv_logger
27
26
from sverchok .utils .geom import interpolate_quadratic_bezier
28
27
from sverchok .utils .sv_curve_utils import Arc
29
28
from sverchok .utils .nurbs_common import SvNurbsMaths
30
29
from sverchok .utils .curve import SvCircle , SvLine , SvBezierCurve , SvCubicBezierCurve
31
30
import sverchok .utils .curve .knotvector as sv_knotvector
32
31
from sverchok .utils .curve .nurbs_solver import SvNurbsCurveControlPoints
33
32
from sverchok .utils .curve .nurbs_solver_applications import prepare_solver_for_interpolation
33
+ from sverchok .utils .sv_logging import get_logger , sv_logger
34
+
35
+ class SvProfileException (Exception ):
36
+ __description__ = "Error in profile definition"
34
37
35
38
def make_functions_dict (* functions ):
36
39
return dict ([(function .__name__ , function ) for function in functions ])
@@ -73,14 +76,15 @@ def __eq__(self, other):
73
76
return isinstance (other , Expression ) and self .string == other .string
74
77
75
78
@classmethod
76
- def from_string (cls , string ):
79
+ def from_string (cls , string , logger = None ):
77
80
try :
78
81
string = string [1 :][:- 1 ]
79
82
expr = ast .parse (string , mode = 'eval' )
80
83
return Expression (expr , string )
81
84
except Exception as e :
82
- print (e )
83
- print (string )
85
+ if logger is None :
86
+ logger = get_logger ()
87
+ logger .warning (f"Cannot parse expression «{ string } »: { e } " )
84
88
return None
85
89
86
90
def eval_ (self , variables ):
@@ -338,7 +342,7 @@ def interpret(self, interpreter, variables):
338
342
v1 = (x , y0 )
339
343
interpreter .position = v1
340
344
verts = self ._interpolate (v0 , v1 , num_segments )
341
- # sv_logger .debug("V0 %s, v1 %s, N %s => %s", v0, v1, num_segments, verts)
345
+ #interpreter.logger .debug("V0 %s, v1 %s, N %s => %s", v0, v1, num_segments, verts)
342
346
for vertex in verts [1 :]:
343
347
v_index = interpreter .new_vertex (* vertex )
344
348
interpreter .new_edge (prev_index , v_index )
@@ -1029,7 +1033,7 @@ def get_variables(self):
1029
1033
def interpret (self , interpreter , variables ):
1030
1034
interpreter .assert_not_closed ()
1031
1035
if not interpreter .has_last_vertex :
1032
- sv_logger . info ("X statement: no current point, do nothing" )
1036
+ interpreter . logger . warning ("X statement: no current point, do nothing" )
1033
1037
return
1034
1038
1035
1039
v0 = interpreter .vertices [0 ]
@@ -1063,7 +1067,11 @@ def get_variables(self):
1063
1067
def interpret (self , interpreter , variables ):
1064
1068
interpreter .assert_not_closed ()
1065
1069
if not interpreter .has_last_vertex :
1066
- sv_logger .info ("X statement: no current point, do nothing" )
1070
+ interpreter .logger .warning ("X statement: no current point, do nothing" )
1071
+ return
1072
+
1073
+ if interpreter .close_first_index >= len (interpreter .vertices ):
1074
+ interpreter .logger .warning ("X statement: curve was not started" )
1067
1075
return
1068
1076
1069
1077
v0 = interpreter .vertices [interpreter .close_first_index ]
@@ -1100,7 +1108,7 @@ def get_optional_inputs(self):
1100
1108
1101
1109
def interpret (self , interpreter , variables ):
1102
1110
if self .name in interpreter .defaults :
1103
- raise Exception ( "Value for the `{}' variable has been already assigned!" . format ( self . name ) )
1111
+ raise SvProfileException ( f "Value for the `{ self . name } ' variable has been already assigned!" )
1104
1112
if self .name not in interpreter .input_names :
1105
1113
value = interpreter .eval_ (self .value , variables )
1106
1114
interpreter .defaults [self .name ] = value
@@ -1133,7 +1141,7 @@ class Interpreter(object):
1133
1141
NURBS = 'NURBS'
1134
1142
BEZIER = 'BEZIER'
1135
1143
1136
- def __init__ (self , node , input_names , curves_form = None , force_curves_form = False , z_axis = 'Z' ):
1144
+ def __init__ (self , node , input_names , curves_form = None , force_curves_form = False , z_axis = 'Z' , logger = None ):
1137
1145
self .position = (0 , 0 )
1138
1146
self .next_vertex_index = 0
1139
1147
self .segment_start_index = 0
@@ -1156,6 +1164,10 @@ def __init__(self, node, input_names, curves_form = None, force_curves_form = Fa
1156
1164
self .curves_form = curves_form
1157
1165
self .force_curves_form = force_curves_form
1158
1166
self .z_axis = z_axis
1167
+ if logger is None :
1168
+ self .logger = get_logger ()
1169
+ else :
1170
+ self .logger = logger
1159
1171
1160
1172
def to3d (self , vertex ):
1161
1173
if self .z_axis == 'X' :
@@ -1175,7 +1187,7 @@ def to3d_np(self, vertex):
1175
1187
1176
1188
def assert_not_closed (self ):
1177
1189
if self .closed :
1178
- raise Exception ("Path was already closed, will not process any further directives!" )
1190
+ raise SvProfileException ("Path was already closed, will not process any further directives!" )
1179
1191
1180
1192
def relative (self , x , y ):
1181
1193
x0 , y0 = self .position
@@ -1210,14 +1222,14 @@ def new_curve(self, curve, statement):
1210
1222
curve = curve .to_nurbs ()
1211
1223
else :
1212
1224
if self .force_curves_form :
1213
- raise Exception (f"Cannot convert curve to NURBS: { statement } " )
1225
+ raise SvProfileException (f"Cannot convert curve to NURBS: { statement } " )
1214
1226
elif self .curves_form == Interpreter .BEZIER :
1215
1227
if not isinstance (curve , (SvBezierCurve , SvCubicBezierCurve )):
1216
1228
if hasattr (curve , 'to_bezier' ):
1217
1229
curve = curve .to_bezier ()
1218
1230
else :
1219
1231
if self .force_curves_form :
1220
- raise Exception ( "Cannot convert curve to Bezier: {statement}" )
1232
+ raise SvProfileException ( f "Cannot convert curve to Bezier: { statement } " )
1221
1233
self .curves .append (curve )
1222
1234
1223
1235
def new_line_segment (self , v1 , v2 ):
@@ -1262,6 +1274,6 @@ def interpret(self, profile, variables):
1262
1274
if not profile :
1263
1275
return
1264
1276
for statement in profile :
1265
- sv_logger .debug ("Interpret: %s" , statement )
1277
+ self . logger .debug ("Interpret: %s" , statement )
1266
1278
statement .interpret (self , variables )
1267
1279
0 commit comments