From 6e94ee270d4831c7e61f320c737944cabcc1a828 Mon Sep 17 00:00:00 2001 From: pullusb Date: Mon, 11 Nov 2024 16:23:11 +0100 Subject: [PATCH] point attribute co to position --- GP_guided_colorize/OP_line_closer.py | 35 +++++++++++++++------------- OP_copy_paste.py | 4 ++-- OP_eraser_brush.py | 14 +++++------ OP_file_checker.py | 2 +- OP_flat_reproject.py | 10 ++++---- OP_layer_picker.py | 4 ++-- OP_material_picker.py | 20 ++++++++-------- OP_realign.py | 14 +++++------ utils.py | 8 +++---- 9 files changed, 57 insertions(+), 54 deletions(-) diff --git a/GP_guided_colorize/OP_line_closer.py b/GP_guided_colorize/OP_line_closer.py index d6bec51..d39438a 100644 --- a/GP_guided_colorize/OP_line_closer.py +++ b/GP_guided_colorize/OP_line_closer.py @@ -53,11 +53,14 @@ def create_gap_stroke(f, ob, tol=10, mat_id=None): encounter = defaultdict(list) plist = [] matrix = ob.matrix_world - for s in f.strokes:#add first and last + for s in f.strokes: #add first and last smat = ob.material_slots[s.material_index].material - if not smat:continue#no material on line - if smat.grease_pencil.show_fill:continue# skip fill lines -> #smat.grease_pencil.show_stroke - if len(s.points) < 2:continue#avoid 0 or 1 points + if not smat: + continue #no material on line + if smat.grease_pencil.show_fill: + continue # skip fill lines -> #smat.grease_pencil.show_stroke + if len(s.points) < 2: + continue #avoid 0 or 1 points plist.append(s.points[0]) plist.append(s.points[-1]) # plist.extend([s.points[0], s.points[-1])# is extend faster ? @@ -70,7 +73,7 @@ def create_gap_stroke(f, ob, tol=10, mat_id=None): for op in plist:#other points if p == op:# print('same point') continue - gap2d = vector_length_2d(location_to_region(matrix @ p.co), location_to_region(matrix @ op.co)) + gap2d = vector_length_2d(location_to_region(matrix @ p.position), location_to_region(matrix @ op.position)) # print('gap2d: ', gap2d) if gap2d > tol: continue @@ -102,7 +105,7 @@ def create_gap_stroke(f, ob, tol=10, mat_id=None): encounter[p].append(op) - simple_draw_gp_stroke([p.co, op.co], f, width = 2, mat_id = mat_id) + simple_draw_gp_stroke([p.position, op.position], f, width = 2, mat_id = mat_id) ctl += 1 print(f'{ctl} line created') @@ -143,9 +146,9 @@ def is_deviating_by(s, deviation=0.75): pb = s.points[-2] pc = s.points[-3] - a = location_to_region(pa.co) - b = location_to_region(pb.co) - c = location_to_region(pc.co) + a = location_to_region(pa.position) + b = location_to_region(pb.position) + c = location_to_region(pc.position) #cb-> compare angle with ba-> angle = (b-c).angle(a-b) @@ -158,16 +161,16 @@ def extend_stroke_tips(s,f,ob,length, mat_id): '''extend line boundary by given length''' for id_pair in [ [1,0], [-2,-1] ]:# start and end pair ## 2D mode - # a = location_to_region(ob.matrix_world @ s.points[id_pair[0]].co) - # b_loc = ob.matrix_world @ s.points[id_pair[1]].co + # a = location_to_region(ob.matrix_world @ s.points[id_pair[0]].position) + # b_loc = ob.matrix_world @ s.points[id_pair[1]].position # b = location_to_region(b_loc) # c = extrapolate_points_by_length(a,b,length)#print(vector_length_2d(b,c)) # c_loc = region_to_location(c, b_loc) # simple_draw_gp_stroke([ob.matrix_world.inverted() @ b_loc, ob.matrix_world.inverted() @ c_loc], f, width=2, mat_id=mat_id) ## 3D - a = s.points[id_pair[0]].co# ob.matrix_world @ - b = s.points[id_pair[1]].co# ob.matrix_world @ + a = s.points[id_pair[0]].position# ob.matrix_world @ + b = s.points[id_pair[1]].position# ob.matrix_world @ c = extrapolate_points_by_length(a,b,length)#print(vector_length(b,c)) simple_draw_gp_stroke([b,c], f, width=2, mat_id=mat_id) @@ -188,15 +191,15 @@ def change_extension_length(ob, strokelist, length, selected=False): ## Change length of current length to designated # Vector point A to point B (direction), push point B in this direction - a = s.points[-2].co + a = s.points[-2].position bp = s.points[-1]#end-point - b = bp.co + b = bp.position ab = b - a if not ab: continue # new pos of B is A + new length in the AB direction newb = a + (ab.normalized() * length) - bp.co = newb + bp.position = newb ct += 1 return ct diff --git a/OP_copy_paste.py b/OP_copy_paste.py index e4d9322..7f2bc50 100644 --- a/OP_copy_paste.py +++ b/OP_copy_paste.py @@ -347,7 +347,7 @@ def add_stroke(s, frame, layer, obj, select=False): for k, v in pt.items(): if k == 'co': setattr(ns.points[i], k, v) - ns.points[i].co = ob_mat_inv @ mat @ ns.points[i].co # invert of object * invert of layer * coordinate + ns.points[i].position = ob_mat_inv @ mat @ ns.points[i].position # invert of object * invert of layer * coordinate else: setattr(ns.points[i], k, v) if select: @@ -358,7 +358,7 @@ def add_stroke(s, frame, layer, obj, select=False): for k, v in pt.items(): if k == 'co': setattr(ns.points[i], k, v) - ns.points[i].co = ob_mat_inv @ ns.points[i].co# invert of object * coordinate + ns.points[i].position = ob_mat_inv @ ns.points[i].position# invert of object * coordinate else: setattr(ns.points[i], k, v) if select: diff --git a/OP_eraser_brush.py b/OP_eraser_brush.py index 9b42631..23f128d 100644 --- a/OP_eraser_brush.py +++ b/OP_eraser_brush.py @@ -231,7 +231,7 @@ class GPTB_OT_eraser(Operator): hld_stroke.points.add(count=1) p = hld_stroke.points[-1] - p.co = mat_inv @ mouse_3d + p.position = mat_inv @ mouse_3d p.pressure = search_radius * 2000 #context.scene.cursor.location = mouse_3d @@ -309,18 +309,18 @@ class GPTB_OT_eraser(Operator): bpy.ops.gpencil.stroke_subdivide(number_cuts=number_cuts, only_selected=True) new_p1 = stroke.points[p1_index+1] - new_p1.co = mat_inv@intersects[0] + new_p1.position = mat_inv@intersects[0] new_points += [(stroke, p1_index+1)] #print('number_cuts', number_cuts) if number_cuts == 2: new_p2 = stroke.points[p1_index+2] - new_p2.co = mat_inv@( (intersects[0] + intersects[1])/2 ) + new_p2.position = mat_inv@( (intersects[0] + intersects[1])/2 ) #new_points += [new_p2] new_p3 = stroke.points[p1_index+3] - new_p3.co = mat_inv@intersects[1] + new_p3.position = mat_inv@intersects[1] new_points += [(stroke, p1_index+3)] #print('subdivide', time() - t3) @@ -448,15 +448,15 @@ class GPTB_OT_eraser(Operator): print('get_gp_points', time()-t0) t0 = time() - #points_data = [(s, f, m, p, get_screen_co(p.co, matrix)) for s, f, m in points_data for p in reversed(s.points)] - points_data = [(s, f, m, p, org + ((matrix @ p.co)-org).normalized()*1) for s, f, m in points_data for p in reversed(s.points)] + #points_data = [(s, f, m, p, get_screen_co(p.position, matrix)) for s, f, m in points_data for p in reversed(s.points)] + points_data = [(s, f, m, p, org + ((matrix @ p.position)-org).normalized()*1) for s, f, m in points_data for p in reversed(s.points)] print('points_to_2d', time()-t0) #print(points_data) self.points_data = [(s, f, m, p, co) for s, f, m, p, co in points_data if co is not None] #for s, f, m, p, co in self.points_data: - # p.co = co + # p.position = co t0 = time() diff --git a/OP_file_checker.py b/OP_file_checker.py index f9fcfec..913557d 100755 --- a/OP_file_checker.py +++ b/OP_file_checker.py @@ -18,7 +18,7 @@ def remove_stroke_exact_duplications(apply=True): stroke_list = [] for s in reversed(f.strokes): - point_list = [p.co for p in s.points] + point_list = [p.position for p in s.points] if point_list in stroke_list: ct += 1 diff --git a/OP_flat_reproject.py b/OP_flat_reproject.py index 6e9b2a8..69ec22b 100644 --- a/OP_flat_reproject.py +++ b/OP_flat_reproject.py @@ -40,7 +40,7 @@ def batch_flat_reproject(obj, proj_type='VIEW', all_strokes=True, restore_frame= for s in f.strokes: for p in s.points: - p.co = obj.matrix_world.inverted() @ region_to_location(location_to_region(obj.matrix_world @ p.co), scn.cursor.location) + p.position = obj.matrix_world.inverted() @ region_to_location(location_to_region(obj.matrix_world @ p.position), scn.cursor.location) if restore_frame: bpy.context.scene.frame_current = oframe @@ -68,7 +68,7 @@ def batch_flat_reproject(obj): plane_co = scn.cursor.location for s in f.strokes: - points_co = [obj.matrix_world @ p.co for p in s.points] + points_co = [obj.matrix_world @ p.position for p in s.points] points_co = [mat_inv @ intersect_line_plane(origin, p, plane_co, plane_no) for p in points_co] points_co = [co for vector in points_co for co in vector] @@ -76,8 +76,8 @@ def batch_flat_reproject(obj): s.points.add(1) # update s.points.pop() # update #for p in s.points: - # loc_2d = location_to_region(obj.matrix_world @ p.co) - # p.co = obj.matrix_world.inverted() @ region_to_location(loc_2d, scn.cursor.location) + # loc_2d = location_to_region(obj.matrix_world @ p.position) + # p.position = obj.matrix_world.inverted() @ region_to_location(loc_2d, scn.cursor.location) """ def batch_flat_reproject(obj): @@ -103,7 +103,7 @@ def batch_flat_reproject(obj): if f.frame_number != scn.frame_current: f = l.frames.copy(f) # duplicate content of the previous frame for s in f.strokes: - points_co = [obj.matrix_world @ p.co for p in s.points] + points_co = [obj.matrix_world @ p.position for p in s.points] points_co = [mat_inv @ intersect_line_plane(origin, p, plane_co, plane_no) for p in points_co] points_co = [co for vector in points_co for co in vector] diff --git a/OP_layer_picker.py b/OP_layer_picker.py index e48322b..69b85a4 100644 --- a/OP_layer_picker.py +++ b/OP_layer_picker.py @@ -86,7 +86,7 @@ class GP_OT_pick_closest_layer(Operator): continue elif self.stroke_filter == 'FILL' and not self.ob.data.materials[s.material_index].grease_pencil.show_fill: continue - self.point_pair += [(Vector((*location_to_region(mat @ p.co), 0)), layer_id) for p in s.points] + self.point_pair += [(Vector((*location_to_region(mat @ p.position), 0)), layer_id) for p in s.points] else: # [s for l in gp.layers if not l.lock and not l.hide for s in l.active_frame.stokes] @@ -98,7 +98,7 @@ class GP_OT_pick_closest_layer(Operator): continue elif self.stroke_filter == 'FILL' and not self.ob.data.materials[s.material_index].grease_pencil.show_fill: continue - self.point_pair += [(Vector((*location_to_region(mat @ p.co), 0)), layer_id) for p in s.points] + self.point_pair += [(Vector((*location_to_region(mat @ p.position), 0)), layer_id) for p in s.points] if not self.point_pair: self.report({'ERROR'}, 'No stroke found, maybe layers are locked or hidden') diff --git a/OP_material_picker.py b/OP_material_picker.py index cf6eea8..3942c49 100644 --- a/OP_material_picker.py +++ b/OP_material_picker.py @@ -39,14 +39,14 @@ class GP_OT_pick_closest_material(Operator): def filter_stroke(self, context): # get stroke under mouse using kdtree - point_pair = [(p.co, s) for s in self.stroke_list for p in s.points] # local space + point_pair = [(p.position, s) for s in self.stroke_list for p in s.points] # local space kd = mathutils.kdtree.KDTree(len(point_pair)) for i, pair in enumerate(point_pair): kd.insert(pair[0], i) kd.balance() - ## Get 3D coordinate on drawing plane according to mouse 2d.co on flat 2d drawing + ## Get 3D coordinate on drawing plane according to mouse 2d.position on flat 2d drawing _ob, hit, _plane_no = get_3d_coord_on_drawing_plane_from_2d(context, self.init_mouse) if not hit: @@ -62,7 +62,7 @@ class GP_OT_pick_closest_material(Operator): ## find point index in stroke self.idx = None for i, p in enumerate(s.points): - if p.co == co: + if p.position == co: self.idx = i break @@ -116,8 +116,8 @@ class GP_OT_pick_closest_material(Operator): self.report({'WARNING'}, 'No coord found') return {'CANCELLED'} - self.depth = self.ob.matrix_world @ self.stroke.points[self.idx].co - self.init_pos = [p.co.copy() for p in self.stroke.points] # need a copy otherwise vector is updated + self.depth = self.ob.matrix_world @ self.stroke.points[self.idx].position + self.init_pos = [p.position.copy() for p in self.stroke.points] # need a copy otherwise vector is updated ## directly use world position ? # self.pos_world = [self.ob.matrix_world @ co for co in self.init_pos] self.pos_2d = [location_to_region(self.ob.matrix_world @ co) for co in self.init_pos] @@ -144,7 +144,7 @@ class GP_OT_pick_closest_material(Operator): # if event.type in {'RIGHTMOUSE', 'ESC'}: # # for i, p in enumerate(self.stroke.points): # reset position - # # self.stroke.points[i].co = self.init_pos[i] + # # self.stroke.points[i].position = self.init_pos[i] # context.area.tag_redraw() # return {'CANCELLED'} @@ -172,7 +172,7 @@ class GP_OT_pick_closest_material(Operator): def filter_stroke(self, context): # get stroke under mouse using kdtree - point_pair = [(p.co, s) for s in self.stroke_list for p in s.points] # local space + point_pair = [(p.position, s) for s in self.stroke_list for p in s.points] # local space kd = mathutils.kdtree.KDTree(len(point_pair)) for i, pair in enumerate(point_pair): @@ -195,7 +195,7 @@ class GP_OT_pick_closest_material(Operator): ## find point index in stroke self.idx = None for i, p in enumerate(s.points): - if p.co == co: + if p.position == co: self.idx = i break @@ -274,8 +274,8 @@ class GP_OT_pick_closest_material(Operator): self.report({'WARNING'}, 'No coord found') return {'CANCELLED'} - # self.depth = self.ob.matrix_world @ stroke.points[self.idx].co - # self.init_pos = [p.co.copy() for p in stroke.points] # need a copy otherwise vector is updated + # self.depth = self.ob.matrix_world @ stroke.points[self.idx].position + # self.init_pos = [p.position.copy() for p in stroke.points] # need a copy otherwise vector is updated # self.pos_2d = [location_to_region(self.ob.matrix_world @ co) for co in self.init_pos] # self.plen = len(stroke.points) diff --git a/OP_realign.py b/OP_realign.py index ac6c802..6d83899 100644 --- a/OP_realign.py +++ b/OP_realign.py @@ -86,13 +86,13 @@ def batch_reproject(obj, proj_type='VIEW', all_strokes=True, restore_frame=False # world_co_3d = utils.matrix_transform(coords.reshape((nb_points, 3)), matrix) ## list comprehension method - world_co_3d = [obj.matrix_world @ p.co for p in s.points] + world_co_3d = [obj.matrix_world @ p.position for p in s.points] new_world_co_3d = [intersect_line_plane(origin, p, plan_co, plane_no) for p in world_co_3d] ## Basic method (Slower than foreach_set) # for i, p in enumerate(s.points): - # p.co = obj.matrix_world.inverted() @ new_world_co_3d[i] + # p.position = obj.matrix_world.inverted() @ new_world_co_3d[i] ## Ravel new coordinate on the fly new_local_coords = [axis for p in new_world_co_3d for axis in matrix_inv @ p] @@ -141,7 +141,7 @@ def align_global(reproject=True, ref=None, all_strokes=True): for f in l.frames: for s in f.strokes: ## foreach - coords = [p.co @ mat.inverted() @ new_mat for p in s.points] + coords = [p.position @ mat.inverted() @ new_mat for p in s.points] # print('coords: ', coords) # print([co for v in coords for co in v]) s.points.foreach_set('co', [co for v in coords for co in v]) @@ -152,11 +152,11 @@ def align_global(reproject=True, ref=None, all_strokes=True): # for p in s.points: ## GOOD : - # world_co = mat @ p.co - # p.co = new_mat.inverted() @ world_co + # world_co = mat @ p.position + # p.position = new_mat.inverted() @ world_co ## GOOD : - # p.co = p.co @ mat.inverted() @ new_mat + # p.position = p.position @ mat.inverted() @ new_mat if o.parent: o.matrix_world = new_mat @@ -218,7 +218,7 @@ def align_all_frames(reproject=True, ref=None, all_strokes=True): for s in f.strokes: ## foreach - coords = [p.co @ mat.inverted() @ new_mat for p in s.points] + coords = [p.position @ mat.inverted() @ new_mat for p in s.points] # print('coords: ', coords) # print([co for v in coords for co in v]) s.points.foreach_set('co', [co for v in coords for co in v]) diff --git a/utils.py b/utils.py index f796462..c241c7d 100644 --- a/utils.py +++ b/utils.py @@ -31,7 +31,7 @@ def get_matrix(ob) : def set_matrix(gp_frame,mat): for stroke in gp_frame.strokes : for point in stroke.points : - point.co = mat @ point.co + point.position = mat @ point.position # get view vector location (the 2 methods work fine) def get_view_origin_position(): @@ -173,7 +173,7 @@ def simple_draw_gp_stroke(pts, frame, width = 2, mat_id = 0): # for i, pt in enumerate(pts): # stroke.points.add() # dest_point = stroke.points[i] - # dest_point.co = pt + # dest_point.position = pt return stroke ## OLD - need update @@ -457,7 +457,7 @@ def get_active_frame(layer_name=None): def get_stroke_2D_coords(stroke): '''return a list containing points 2D coordinates of passed gp stroke object''' - return [location_to_region(p.co) for p in stroke.points] + return [location_to_region(p.position) for p in stroke.points] '''#foreach method for retreiving multiple other attribute quickly and stack them point_nb = len(stroke.points) @@ -474,7 +474,7 @@ def get_all_stroke_2D_coords(frame): ## using modification from get_stroke_2D_coords func' return [get_stroke_2D_coords(s) for s in frame.strokes] ## direct - #return[[location_to_region(p.co) for p in s.points] for s in frame.strokes] + #return[[location_to_region(p.position) for p in s.points] for s in frame.strokes] def selected_strokes(frame): '''return all stroke having a point selected as a list of strokes objects'''