本文整理汇总了Python中lib.GeoMath.getEdgesFromPoints方法的典型用法代码示例。如果您正苦于以下问题:Python GeoMath.getEdgesFromPoints方法的具体用法?Python GeoMath.getEdgesFromPoints怎么用?Python GeoMath.getEdgesFromPoints使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类lib.GeoMath
的用法示例。
在下文中一共展示了GeoMath.getEdgesFromPoints方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: intersect_bounding_box_3D
# 需要导入模块: from lib import GeoMath [as 别名]
# 或者: from lib.GeoMath import getEdgesFromPoints [as 别名]
def intersect_bounding_box_3D(self, bounding_box, DISPLAY=False):
try:
if not self.get_prim():
raise Errors.CantBeNoneError("Prim cant be none", "We need a prim to calculate tbn some steps after")
except Errors.CantBeNoneError as e:
Errors.Error.display_exception(e)
exit()
if not self.get_points_tangent_space():
self.create_3D_to_2D_rectangle(self.get_prim())
this_point_relative = self.get_tbn_class().get_point_which_is_relative()
this_tbn_inverse_matrix = self.get_tbn_class().get_tbn_inverse()
param_bounding_box_points_in_this_tangent_space = []
for point in bounding_box.get_rectangle_object_space():
point_relative = GeoMath.vecSub(point, this_point_relative)
this_tbn_inverse_matrix.printAttributes()
point_tangent_space = this_tbn_inverse_matrix.mulPoint3ToMatrix3(point_relative)
param_bounding_box_points_in_this_tangent_space.append(point_tangent_space)
intersections = GeoMath.getIntersectionsBetweenEdges2D(
GeoMath.getEdgesFromPoints(self.get_rectangle_tangent_space()),
GeoMath.getEdgesFromPoints(param_bounding_box_points_in_this_tangent_space),
)
if DISPLAY:
# TEMP: exit
1 / 0
exit()
for intersection in intersections:
this_tbn_matrix = self.get_tbn_class().get_tbn()
point_object_space = this_tbn_matrix.mulPoint3ToMatrix3(intersection)
point_absolute = GeoMath.vecPlus(point_object_space, this_point_relative)
self.to_display_intersections.append(point_absolute)
self.display_intersections()
return intersections
示例2: intersections_with_crack
# 需要导入模块: from lib import GeoMath [as 别名]
# 或者: from lib.GeoMath import getEdgesFromPoints [as 别名]
def intersections_with_crack(self, crack, path_ordered):
reload(GeoMath)
intersections = []
edges_floor = GeoMath.getEdgesFromPoints(self.get_absolute_points())
prev_intersection = None
next_intersection = None
#=======================================================================
# we group the intersections in pairs, because after we'll have a different
# destruction in the floor for each pair of intersection
#=======================================================================
for infoPrim in path_ordered:
patterns = crack[infoPrim.getPrim()]
for pattern in patterns:
pattern_edges = GeoMath.getEdgesFromPoints(pattern.getPoints())
may_intersect, pattern_edge_inter, floor_edge_inter = GeoMath.bolzanoIntersectionEdges2_5D(pattern_edges, edges_floor)
if(may_intersect):
# FIXME: HACK: we take one point of the pattern edge and put the y of the floor.
# We are assuming the edge is perpendicular to the floor.
# TEMP:
point_intersection = [pattern_edge_inter[0][0], floor_edge_inter[0][1], pattern_edge_inter[0][2]]
logging.debug("Intersection bef" + str(point_intersection))
logging.debug("fllor_edge_inter " + str(floor_edge_inter))
#point2DToProjectOntoXZ = [point_intersection[0], 0, point_intersection[2]]
#floorEdge2DToCalculateProjectionOntoXZ = [[floor_edge_inter[0][0],0 , floor_edge_inter[0][2]], [floor_edge_inter[1][0], 0, floor_edge_inter[1][2]]]
#point_intersection = GeoMath.getPointProjectionOnLine(floorEdge2DToCalculateProjectionOntoXZ, point2DToProjectOntoXZ)
#point_intersection = [point_intersection[0], floor_edge_inter[0][1], point_intersection[2]]
logging.debug("Intersection " + str(point_intersection))
if(not prev_intersection):
prev_intersection = point_intersection
break
elif(not GeoMath.pointEqualPoint(point_intersection, prev_intersection)):
next_intersection = point_intersection
new_intersection = [prev_intersection, next_intersection]
intersections.append(new_intersection)
prev_intersection = None
next_intersection = None
break
return intersections
示例3: intersect_bounding_box_with_limits_3D
# 需要导入模块: from lib import GeoMath [as 别名]
# 或者: from lib.GeoMath import getEdgesFromPoints [as 别名]
def intersect_bounding_box_with_limits_3D(self, bounding_box, DISPLAY=False):
try:
if not self.get_prim():
raise Errors.CantBeNoneError("Prim cant be none", "We need a prim to calculate tbn some steps after")
except Errors.CantBeNoneError as e:
Errors.Error.display_exception(e)
exit()
if not self.get_points_tangent_space():
self.convert_3D_to_2D(self.get_prim())
this_point_relative = self.get_tbn_class().get_point_which_is_relative()
this_tbn_inverse_matrix = self.get_tbn_class().get_tbn_inverse()
param_bounding_box_points_in_this_tangent_space = []
for point in bounding_box.get_rectangle_object_space():
point_relative = GeoMath.vecSub(point, this_point_relative)
point_tangent_space = this_tbn_inverse_matrix.mulPoint3ToMatrix3(point_relative)
param_bounding_box_points_in_this_tangent_space.append(point_tangent_space)
intersections = GeoMath.getIntersectionsBetweenEdges2D(
self.get_edges_tangent_space(), GeoMath.getEdgesFromPoints(param_bounding_box_points_in_this_tangent_space)
)
# =======================================================================
# work in object space because we only has to know if the bounding boxes
# share some edge between
# =======================================================================
edges_shared_between_bounding_boxes = GeoMath.getEdgesBetweenEdges(
self.get_edges_tangent_space(), GeoMath.getEdgesFromPoints(param_bounding_box_points_in_this_tangent_space)
)
if DISPLAY:
# TEMP: exit
1 / 0
exit()
for intersection in intersections:
this_tbn_matrix = self.get_tbn_class().get_tbn()
point_object_space = this_tbn_matrix.mulPoint3ToMatrix3(intersection)
point_absolute = GeoMath.vecPlus(point_object_space, this_point_relative)
self.to_display_intersections.append(point_absolute)
self.display_intersections()
return intersections, edges_shared_between_bounding_boxes
示例4: create_3D_to_2D_rectangle
# 需要导入模块: from lib import GeoMath [as 别名]
# 或者: from lib.GeoMath import getEdgesFromPoints [as 别名]
def create_3D_to_2D_rectangle(self, prim):
try:
if not prim:
raise Errors.CantBeNoneError(
"Prim cant be none", "We need a" + " prim to calculate tbn some" + " steps after"
)
except Errors.CantBeNoneError as e:
Errors.Error.display_exception(e)
exit()
tbn_class = CreateTBN.CreateTBN(prim)
tbn_class.do(scale=True)
tbn_matrix = tbn_class.get_tbn()
tbn_inverse_matrix = tbn_class.get_tbn_inverse()
temporary_list = []
for point in self.get_points_object_space():
point_relative = GeoMath.vecSub(point, tbn_class.get_point_which_is_relative())
point_tangent_space = tbn_inverse_matrix.mulPoint3ToMatrix3(point_relative)
temporary_list.append(point_tangent_space)
self.set_points_tangent_space(temporary_list)
self.calculate_bounding_box_tangent_space()
# =======================================================================
# Tranform to object space
# =======================================================================
rectangle_tangent_space = self.create_rectangle("tangent")
rectangle_object_space = []
for point_tangent_space in rectangle_tangent_space:
point_object_space_relative = tbn_matrix.mulPoint3ToMatrix3(point_tangent_space)
point_object_space = GeoMath.vecPlus(point_object_space_relative, tbn_class.get_point_which_is_relative())
rectangle_object_space.append(point_object_space)
self.set_rectangle_object_space(rectangle_object_space)
bounding_box_object_space_size = GeoMath.vecSub(rectangle_object_space[2], rectangle_object_space[0])
self.set_vector_size_object_space(bounding_box_object_space_size)
self.set_rectangle_tangent_space(rectangle_tangent_space)
self.set_edges_object_space(GeoMath.getEdgesFromPoints(rectangle_object_space))
self.set_edges_tangent_space(GeoMath.getEdgesFromPoints(rectangle_tangent_space))
self.tbn_class = tbn_class
示例5: findUpperTextureContainingPoint
# 需要导入模块: from lib import GeoMath [as 别名]
# 或者: from lib.GeoMath import getEdgesFromPoints [as 别名]
def findUpperTextureContainingPoint(self, point):
if(not self.reverseListOfTextures):
# Get ordered layers
layers = list(self.getLayers())
# We want to start from the upper texture, so we inverse the list
layers.reverse()
self.reverseListOfTextures = layers
layerInPoint = None
for layer in self.reverseListOfTextures:
if(layer.pointInTexture(point)):
if(GeoMath.pointInEdges(point, GeoMath.getEdgesFromPoints(layer.get_absolute_points()))):
# Warning!!! point are in the edge of a texture, so if you call this method to know
# the next texture be careful, it will be error
logging.warning('Method findUpperTextureContainingPoint, Point lie in a edge of texture')
layerInPoint = layer
break
if(not layerInPoint):
layerInPoint = self.getDefaultTexture()
return layerInPoint
示例6: apply_noise
# 需要导入模块: from lib import GeoMath [as 别名]
# 或者: from lib.GeoMath import getEdgesFromPoints [as 别名]
def apply_noise(cls, points, normal, height, for_edge, frequency="little",):
logging.debug("Class Add_noise, method apply_noise")
if(not cls.curve_node):
logging.debug("Class GlassDynamicPatternGenerator, creating new nodes")
# Create nodes to generate a pattern
curve_node = cls.node_geo.createNode('curve')
edge_divide_node = cls.node_geo.createNode('edgedivide')
point_node = cls.node_geo.createNode('point')
mountain_node = cls.node_geo.createNode('mountain')
# connect it
edge_divide_node.setNextInput(curve_node)
point_node.setNextInput(edge_divide_node)
mountain_node.setNextInput(point_node)
# The first group, if we don't put the value, it doesnt work
edge_divide_node.parm('group').set('0')
else:
curve_node = cls.curve_node
edge_divide_node = cls.edge_divide_node
point_node = cls.point_node
mountain_node = cls.mountain_node
final_points = []
if (for_edge):
# If we want a noise for each edge, we can get all edges from points
edges = GeoMath.getEdgesFromPoints(points)
# Delete last edge, because we are working with no closed pattern
edges.pop()
else:
# If not, we apply noise to all points at the same time
edges = [points]
logging.debug("Class add noise")
logging.debug("points" + str(points))
logging.debug("normal" + str(normal))
logging.debug("height" + str(height))
logging.debug("for_edge" + str(for_edge))
for points_for_iteration in edges:
'''
pointI = points_for_iteration[0]
pointF = points_for_iteration[len(points_for_iteration) - 1]
points_for_iteration = [pointI, pointF]
'''
pointsString = ""
for point in points_for_iteration:
pointsString = pointsString + str(point[0]) + "," + str(point[1]) + "," + str(point[2]) + " "
curve_node.parm('coords').set(pointsString)
# Set edge divisions, we set for a constant of 50, but it may to be any number
# Only if we apply noise for each edge
if(for_edge):
multiplier_number_of_points = 1
edge_divide_node.parm('numdivs').set(int(cls.calculate_frequency(frequency) * multiplier_number_of_points))
else:
point_node.setInput(0, curve_node)
# Put the parameters
point_node.parm('donml').set('on')
point_node.parm('nx').deleteAllKeyframes()
point_node.parm('ny').deleteAllKeyframes()
point_node.parm('nz').deleteAllKeyframes()
point_node.parm('nx').set(normal[0])
point_node.parm('ny').set(normal[1])
point_node.parm('nz').set(normal[2])
# Set parameters to mountain node
# self.sizex*50=number of points_for_iteration in the curve
mountain_node.parm('height').set(height)
frequency_number = cls.calculate_frequency(frequency)
mountain_node.parm('freq1').set(frequency_number)
mountain_node.parm('freq2').set(frequency_number)
mountain_node.parm('freq3').set(frequency_number)
# Put random offset to get random points_for_iteration
mountain_node.parm('offset1').set(random.random() * 100)
mountain_node.parm('offset2').set(random.random() * 100)
mountain_node.parm('offset3').set(random.random() * 100)
# We get the generate pattern
pointI = points_for_iteration[0]
pointF = points_for_iteration[len(points_for_iteration) - 1]
mountain_node.cook()
generated_pattern = [list(p.position()) for p in mountain_node.geometry().points()]
#===================================================================
# Important: If we do a division of edges, the points are numered in
# this manner:
# We get a edge numered as first point with number 0 and last point
# with number 1. when we do a division, each division are numered from
# point 0 to ndivision, but the point number 1 is still the number one
# so for example, in a edge [0,1] with 5 divions the number are
# [0,2,3,4,1].
#===================================================================
if(for_edge):
#===============================================================
# fix the above issue
#===============================================================
last_point = generated_pattern[1]
del generated_pattern[1]
generated_pattern.append(last_point)
#.........这里部分代码省略.........
示例7: intersect_bounding_box_without_limits_3D
# 需要导入模块: from lib import GeoMath [as 别名]
# 或者: from lib.GeoMath import getEdgesFromPoints [as 别名]
def intersect_bounding_box_without_limits_3D(self, bounding_box, DISPLAY=False):
global littleEpsilon
try:
if not self.get_prim():
raise Errors.CantBeNoneError("Prim cant be none", "We need a prim to calculate tbn some steps after")
except Errors.CantBeNoneError as e:
Errors.Error.display_exception(e)
exit()
if not self.get_points_tangent_space():
self.convert_3D_to_2D(self.get_prim())
this_point_relative = self.get_tbn_class().get_point_which_is_relative()
this_tbn_inverse_matrix = self.get_tbn_class().get_tbn_inverse()
param_bounding_box_points_in_this_tangent_space = []
for point in bounding_box.get_rectangle_object_space():
point_relative = GeoMath.vecSub(point, this_point_relative)
point_tangent_space = this_tbn_inverse_matrix.mulPoint3ToMatrix3(point_relative)
param_bounding_box_points_in_this_tangent_space.append(point_tangent_space)
intersections = GeoMath.getIntersectionsBetweenEdges2D(
self.get_edges_tangent_space(), GeoMath.getEdgesFromPoints(param_bounding_box_points_in_this_tangent_space)
)
if intersections:
# ===============================================================
# Check if the limits are touching and if it are touching it,
# check if the intersection is in there. If it is in there,
# the intersection lie in the limit, so we dont consider an
# intersection
# ===============================================================
edges_shared_between_bounding_boxes = GeoMath.getEdgesBetweenEdges(
self.get_edges_tangent_space(),
GeoMath.getEdgesFromPoints(param_bounding_box_points_in_this_tangent_space),
)
inside = False
print "Edges shared between"
print edges_shared_between_bounding_boxes
for intersection in intersections:
inside = GeoMath.pointInEdges(intersection, edges_shared_between_bounding_boxes)
if not inside:
break
# ===============================================================
# If all intersections lie in the edges shared between bounding
# boxes we discart its
# ===============================================================
if inside:
intersections = []
else:
# check if intersections are in the corner, because we consider corner as limit
shared_points_between_bounding_boxes = GeoMath.getSharedPoints(
self.get_rectangle_tangent_space(), param_bounding_box_points_in_this_tangent_space
)
# If all intersections lie in the corner we doen't consider intersections as intersections
true_intersections = list(intersections)
for intersection in intersections:
for corner in shared_points_between_bounding_boxes:
if GeoMath.vecModul(GeoMath.vecSub(corner, intersection)) <= littleEpsilon:
true_intersections.remove(intersection)
break
intersections = true_intersections
if DISPLAY:
# TEMP: exit
1 / 0
exit()
for intersection in intersections:
this_tbn_matrix = self.get_tbn_class().get_tbn()
point_object_space = this_tbn_matrix.mulPoint3ToMatrix3(intersection)
point_absolute = GeoMath.vecPlus(point_object_space, this_point_relative)
self.to_display_intersections.append(point_absolute)
self.display_intersections()
return intersections