Fusion360APIです。
平面を強調表示するためにカスタムグラフィックを利用したいです。
今までカスタムグラフィックはボディや面、スケッチの要素はあるの
ですが、平面は行ったことがありません。
CATIAと違って、Fusion360の平面は有限なんですよね。
違和感しかありません。
取りあえずこんな感じで出来ました。
# Fusion360API Python script import traceback import adsk.core as core import adsk.fusion as fusion import itertools def run(context): ui: core.UserInterface = None try: app: core.Application = core.Application.get() ui = app.userInterface des: fusion.Design = app.activeProduct root: fusion.Component = des.rootComponent constPlane: fusion.ConstructionPlane = root.constructionPlanes[0] points = get_plane_points(constPlane) coordArray = list( itertools.chain.from_iterable( [p.asArray() for p in points] ) ) coords = fusion.CustomGraphicsCoordinates.create(coordArray) vertexIndices = [0,1,2, 0,2,3] normal = constPlane.geometry.normal.asArray() normalIndices = [0,0,0, 0,0,0] cgGroup: fusion.CustomGraphicsGroup = root.customGraphicsGroups.add() meshPlane = cgGroup.addMesh(coords, vertexIndices, normal, normalIndices) meshPlane.color = fusion.CustomGraphicsSolidColorEffect.create( core.Color.create(255,0,0,127) ) except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def get_plane_points( plane: fusion.ConstructionPlane, ) -> list[core.Point3D]: geo: core.Plane = plane.geometry uVec: core.Vector3D = geo.uDirection uVec.normalize() vVec: core.Vector3D = geo.vDirection vVec.normalize() bBox: core.BoundingBox2D = plane.displayBounds xLst = [ bBox.maxPoint.x, bBox.minPoint.x, bBox.minPoint.x, bBox.maxPoint.x, ] yLst = [ bBox.maxPoint.y, bBox.maxPoint.y, bBox.minPoint.y, bBox.minPoint.y, ] vecLst = [uVec.copy() for _ in range(4)] [v.scaleBy(x) for v, x in zip(vecLst, xLst)] vVecLst = [vVec.copy() for _ in range(4)] [v.scaleBy(y) for v, y in zip(vVecLst, yLst)] [u.add(v) for u, v in zip(vecLst, vVecLst)] points = [geo.origin.copy() for _ in range(4)] [p.translateBy(v) for p, v in zip(points, vecLst)] return points
直接カスタムグラフィックとして表示する方法が無いと思う為、
二つの三角形を表示させました。
平面から境界となる4点を求めているのが、get_plane_points関数なの
ですが、もっと簡単な方法があるのかな・・・。