您的位置:首页 > 产品设计 > UI/UE

Fuison 360 API: 判断一个点是否在某曲面上

2016-07-25 12:26 351 查看
原文链接: http://modthemachine.typepad.com/my_weblog/2016/05/is-point-on-face.html

没有直接的方法,不过可以借用SurfaceEvaluator.isParameterOnFace。该方法可返回某个曲面参数是否在曲面上。首先需要知道某个点对应的曲面参数。而getParameterAtPoint返回的是曲面上最接近给定点的点的曲面参数。所以拿到最接近点还得验证一下是否是给定点。以下是个代码测试。

def isPointOnFace():
app = adsk.core.Application.get()
ui  = app.userInterface

selections = app.userInterface.activeSelections
sketchPoint = selections.item(0).entity
face = selections.item(1).entity

evaluator = face.evaluator
point = sketchPoint.worldGeometry
ui.messageBox(
"point, x=" + str(point.x) +
"; y=" + str(point.y) +
"; z=" + str(point.z))
(returnValue, parameter) = evaluator.getParameterAtPoint(point)
ui.messageBox(
"parameter, u=" + str(parameter.x) +
"; v=" + str(parameter.y))

if not returnValue:
# could not get the parameter for it so
# it's probably not on the face
ui.messageBox("Point not on face\n(Could not get parameter)")
return

(returnValue, projectedPoint) = evaluator.getPointAtParameter(parameter)
ui.messageBox(
"projectedPoint, x=" + str(projectedPoint.x) +
"; y=" + str(projectedPoint.y) +
"; z=" + str(projectedPoint.z))
if not projectedPoint.isEqualTo(point):
# the point has been projected in order to get
# a parameter so it's not on the face
ui.messageBox(
"Point not on face\n(Point was projected in order to get parameter)")
return

returnValue = evaluator.isParameterOnFace(parameter)
if not returnValue:
ui.messageBox("Point not on face\n(isParameterOnFace says so)")
return

ui.messageBox("Point on face")


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: