本文整理汇总了Python中mathutils.Vector.negate方法的典型用法代码示例。如果您正苦于以下问题:Python Vector.negate方法的具体用法?Python Vector.negate怎么用?Python Vector.negate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类mathutils.Vector
的用法示例。
在下文中一共展示了Vector.negate方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: spherize
# 需要导入模块: from mathutils import Vector [as 别名]
# 或者: from mathutils.Vector import negate [as 别名]
def spherize(context):
print ("in spherize")
#influence
influence = context.scene['unt_spherifyratio']
#gets the location of the center of the center object
if context.scene.centerobject:
center = bpy.data.objects[context.scene.centerobject].location
else:
center = bpy.context.scene.cursor_location
#get world matrix for the object
worldmatrix = bpy.context.object.matrix_world
ob = bpy.context.object
obdata = ob.data
#mandatory stupid step, calculate normals split, in object mode
bpy.ops.object.mode_set(mode="OBJECT")
obdata.calc_normals_split()
#prepare a list for all the normals. One per "loop"(vertice-per-faace)
normals = [Vector()]*len(obdata.loops)
#loop all the loops (subvertices) in the mesh
for loop in obdata.loops:
#obdata.calc_normals_split()
vertexindex = loop.vertex_index
normals[loop.index] = loop.normal
print ("normal: %s"% normals[loop.index])
#if the vertex is selected, normalize the normal
if obdata.vertices[vertexindex].select:
#get local coordinate of the related vertex
localco = obdata.vertices[vertexindex].co
#calculate the globla coordinates of the vertex
globalco = worldmatrix * obdata.vertices[vertexindex].co
#delta betwen the global location of the vertex and the center of the center object
v= Vector([y-x for x,y in zip(globalco,center)])
v.negate()
v.normalize()
#resulting vector (v*influence + normal*(1-influence))
normals[loop.index] = v * float(influence) + normals[loop.index] * (float(1)-float(influence))
#normals[loop.index].negate()
normals[loop.index].normalize()
print ("new normal: %s"% normals[loop.index])
obdata.normals_split_custom_set(normals)
bpy.ops.object.mode_set(mode="EDIT")
示例2: get_obj_axis
# 需要导入模块: from mathutils import Vector [as 别名]
# 或者: from mathutils.Vector import negate [as 别名]
def get_obj_axis(obj, axis):
ax = 0
if axis == 'Y' or axis == '-Y':
ax = 1
if axis == 'Z' or axis == '-Z':
ax = 2
obj_matrix = obj.matrix_world
axis_tuple = (
obj_matrix[0][ax], obj_matrix[1][ax], obj_matrix[2][ax])
axisResult = Vector(axis_tuple).normalized()
if axis == '-X' or axis == '-Y' or axis == '-Z':
axisResult.negate()
return axisResult
示例3: execute
# 需要导入模块: from mathutils import Vector [as 别名]
# 或者: from mathutils.Vector import negate [as 别名]
def execute(self, context):
if self.reset_values is True:
self.reset_all_values()
active_obj = context.scene.objects.active
bm = bmesh.from_edit_mesh(active_obj.data)
bm.verts.ensure_lookup_table()
#verts = [v for v in bm.verts if v.select]
# get loops
loops = loop_t.get_connected_input(bm)
loops = loop_t.check_loops(loops, bm)
if not loops:
self.report({'WARNING'}, "No Loops!")
return {'CANCELLED'}
first_indexes = []
if isinstance(bm.select_history[0], bmesh.types.BMVert):
for element in bm.select_history:
first_indexes.append(element.index)
elif isinstance(bm.select_history[0], bmesh.types.BMEdge):
for element in bm.select_history:
el_verts = element.verts
first_indexes.append(el_verts[0].index)
first_indexes.append(el_verts[1].index)
for loop in loops:
if loop[1] is True:
continue
loop_verts = []
for ind in loop[0]:
loop_verts.append(bm.verts[ind])
# for the case if we need to reverse it
if loop[0][-1] in first_indexes:
loop_verts = list(reversed(loop_verts))
# reverse again for the direction
if self.reverse_direction is True:
loop_verts = list(reversed(loop_verts))
# positions
first_vert_pos = active_obj.matrix_world * loop_verts[0].co
last_vert_pos = active_obj.matrix_world * loop_verts[-1].co
loop_centr_orig = first_vert_pos.lerp(last_vert_pos, 0.5)
relative_dist = (first_vert_pos - loop_centr_orig).length
sidevec = (first_vert_pos - last_vert_pos).normalized()
obj_matrix = active_obj.matrix_world
obj_matrix_inv = obj_matrix.inverted()
if self.direction_vector == 'Custom':
rot_dir = Vector((self.rotate_axis[0], self.rotate_axis[1], self.rotate_axis[2])).normalized()
elif self.direction_vector == 'MiddleCrossed':
middle_nor = loop_verts[int(len(loop_verts) / 2)].normal.copy().normalized()
middle_nor = ut_base.get_normal_world(middle_nor, obj_matrix, obj_matrix_inv)
rot_dir = middle_nor.cross(sidevec).normalized()
# fix only for MiddleCrossed
if not self.reverse_direction:
rot_dir.negate()
else:
middle_nor = loop_verts[int(len(loop_verts) / 2)].normal.copy().normalized()
middle_nor = ut_base.get_normal_world(middle_nor, obj_matrix, obj_matrix_inv)
middle_nor = middle_nor.cross(sidevec).normalized()
rot_dir = middle_nor.cross(sidevec).normalized()
rot_dir.negate()
upvec = rot_dir.cross(sidevec).normalized()
loop_centr = ( self.upvec_offset * upvec * relative_dist ) + loop_centr_orig
loop_angle = (first_vert_pos - loop_centr).normalized().angle((last_vert_pos - loop_centr).normalized())
if self.upvec_offset > 0:
loop_angle = math.radians( (360 - math.degrees(loop_angle)) )
# even spread
line_data = None
if self.spread_mode == 'Even':
world_verts = [active_obj.matrix_world * vert.co for vert in loop_verts]
line_data = []
line_length = 0.0
for i, vec in enumerate(world_verts):
if i == 0:
line_data.append(0)
else:
line_length += (vec - world_verts[i-1]).length
line_data.append(line_length)
# make arc!
for i, vert in enumerate(loop_verts):
if i != 0 and i != len(loop_verts)-1:
if self.spread_mode == 'Normal':
#.........这里部分代码省略.........
示例4: execute
# 需要导入模块: from mathutils import Vector [as 别名]
# 或者: from mathutils.Vector import negate [as 别名]
#.........这里部分代码省略.........
return {'FINISHED'}
shape_verts = loops[0][0][0]
shape_edges = loops[0][0][1]
if shape_verts:
set_cache(self.as_pointer(), "shape_verts_{}".format(loop_idx), [v.co.copy() for v in shape_verts])
if shape_verts is not None and len(shape_verts) > 0:
if context.space_data.pivot_point == "CURSOR":
center = object.matrix_world.copy() * context.scene.cursor_location.copy()
else:
temp_bm = bmesh.new()
for loop_vert in loop_verts:
temp_bm.verts.new(loop_vert.co.copy())
temp_verts = temp_bm.verts[:]
for i in range(len(temp_verts)):
temp_bm.edges.new((temp_verts[i], temp_verts[(i + 1) % len(temp_verts)]))
temp_bm.faces.new(temp_bm.verts)
temp_bm.faces.ensure_lookup_table()
if context.space_data.pivot_point == 'BOUNDING_BOX_CENTER':
center = temp_bm.faces[0].calc_center_bounds()
else:
center = temp_bm.faces[0].calc_center_median()
del temp_bm
context.scene.perfect_shape.preview_verts_count = loop_verts_len + self.span
if self.projection == "NORMAL":
forward = calculate_normal([v.co.copy() for v in loop_verts])
normal_forward = reduce(
lambda v1, v2: v1.normal.copy() + v2.normal.copy() if isinstance(v1, bmesh.types.BMVert)
else v1.copy() + v2.normal.copy(), loop_verts).normalized()
if normal_forward.angle(forward) - math.pi / 2 > 1e-6:
forward.negate()
else:
forward = Vector([v == self.projection for v in ["X", "Y", "Z"]])
if self.invert_projection:
forward.negate()
matrix_rotation = forward.to_track_quat('Z', 'Y').to_matrix().to_4x4()
matrix_translation = Matrix.Translation(center)
bmesh.ops.scale(shape_bm, vec=Vector((1, 1, 1)) * (1 + self.offset), verts=shape_verts)
bmesh.ops.transform(shape_bm, verts=shape_verts, matrix=matrix_translation * matrix_rotation)
if not is_clockwise(forward, center, loop_verts):
loop_verts.reverse()
loop_edges.reverse()
if not is_clockwise(forward, center, shape_verts):
shape_verts.reverse()
correct_angle_m = 1
shift_m = 1
if context.space_data.pivot_point != "INDIVIDUAL_ORIGINS":
if selection_center.dot(center.cross(forward)) >= 0:
# if (center.cross(forward)).angle(selection_center) - math.pi/2 <= 1e-6:
correct_angle_m = -1
shift_m = -1
loop_verts_co_2d, shape_verts_co_2d = None, None
if loop_verts_co_2d is None:
loop_verts_co_2d = [(matrix_rotation.transposed() * v.co).to_2d() for v in loop_verts]
示例5: execute
# 需要导入模块: from mathutils import Vector [as 别名]
# 或者: from mathutils.Vector import negate [as 别名]
def execute(self, context):
object = context.object
object.update_from_editmode()
object_bm = bmesh.from_edit_mesh(object.data)
selected_edges = [e for e in object_bm.edges if e.select]
selected_verts = [v for v in object_bm.verts if v.select]
selected_verts_fin = []
if len(selected_edges) == 0:
self.report({'WARNING'}, "Please select edges.")
return {'CANCELLED'}
loops = prepare_loops(selected_edges[:])
if loops is None:
self.report({'WARNING'}, "Please select boundary loop(s) of selected area(s).")
return {'CANCELLED'}
object_bvh = mathutils.bvhtree.BVHTree.FromObject(object, context.scene, deform=False)
refresh_icons()
for (loop_verts, loop_edges), is_loop_cyclic, is_loop_boundary in loops:
if len(loop_edges) < 3:
continue
loop_verts_len = len(loop_verts)
context.window_manager.perfect_shape.preview_verts_count = loop_verts_len
if self.projection == "NORMAL":
if is_loop_boundary:
forward = calculate_normal([v.co for v in loop_verts])
else:
forward = reduce(
lambda v1, v2: v1.normal.copy() + v2.normal.copy() if isinstance(v1, bmesh.types.BMVert)
else v1.copy() + v2.normal.copy(), loop_verts).normalized()
else:
forward = Vector([v == self.projection for v in ["X", "Y", "Z"]])
if self.invert_projection:
forward.negate()
shape_bm = bmesh.new()
if context.space_data.pivot_point == "CURSOR":
center = object.matrix_world.copy() * context.scene.cursor_location.copy()
else:
for loop_vert in loop_verts:
shape_bm.verts.new(loop_vert.co.copy())
shape_bm.faces.new(shape_bm.verts)
shape_bm.faces.ensure_lookup_table()
if context.space_data.pivot_point == 'BOUNDING_BOX_CENTER':
center = shape_bm.faces[0].calc_center_bounds()
else:
center = shape_bm.faces[0].calc_center_median()
shape_bm.clear()
matrix_rotation = forward.to_track_quat('Z', 'X').to_matrix().to_4x4()
matrix_translation = Matrix.Translation(center)
shape_bm = bmesh.new()
shape_verts = None
if self.shape == "CIRCLE":
diameter = sum([e.calc_length() for e in loop_edges]) / (2*math.pi)
diameter += self.offset
shape_segments = loop_verts_len + self.span
shape_verts = bmesh.ops.create_circle(shape_bm, segments=shape_segments,
diameter=diameter, matrix=matrix_translation*matrix_rotation)
shape_verts = shape_verts["verts"]
elif self.shape == "RECTANGLE":
if loop_verts_len % 2 > 0:
self.report({'WARNING'}, "An odd number of edges.")
del shape_bm
return {'FINISHED'}
size = sum([e.calc_length() for e in loop_edges])
size_a = (size / 2) / (self.ratio_a + self.ratio_b) * self.ratio_a
size_b = (size / 2) / (self.ratio_a + self.ratio_b) * self.ratio_b
seg_a = (loop_verts_len / 2) / (self.ratio_a + self.ratio_b) * self.ratio_a
seg_b = int((loop_verts_len / 2) / (self.ratio_a + self.ratio_b) * self.ratio_b)
if seg_a % 1 > 0:
self.report({'WARNING'}, "Incorrect sides ratio.")
seg_a += 1
seg_b += 2
seg_a = int(seg_a)
if self.is_square:
size_a = (size_a + size_b) / 2
size_b = size_a
seg_len_a = size_a / seg_a
seg_len_b = size_b / seg_b
for i in range(seg_a):
shape_bm.verts.new(Vector((size_b/2*-1, seg_len_a*i-(size_a/2), 0)))
for i in range(seg_b):
shape_bm.verts.new(Vector((seg_len_b*i-(size_b/2), size_a/2, 0)))
for i in range(seg_a, 0, -1):
shape_bm.verts.new(Vector((size_b/2, seg_len_a*i-(size_a/2), 0)))
for i in range(seg_b, 0, -1):
shape_bm.verts.new(Vector((seg_len_b*i-(size_b/2), size_a/2*-1, 0)))
#.........这里部分代码省略.........