時間が無い。とりあえず程度のコード。
#Fusion360API Python script #Author-kantoku #Description-3DCurve test import adsk.core, adsk.fusion, traceback def run(context): ui = None try: app :adsk.core.Application = adsk.core.Application.get() ui :adsk.core.UserInterface = app.userInterface des :adsk.fusion.Design = app.activeProduct root :adsk.fusion.Component = des.rootComponent sktNames = [ 'Curvature', 'Tangent', 'FirstDerivative', 'SecondDerivative', 'ThirdDerivative'] msg :str = 'Select SketchCurve' selFiltter :str = 'SketchCurves' sel :adsk.core.Selection = selectEnt(ui, msg ,selFiltter) if not sel: return crv = sel.entity geo = crv.worldGeometry eva = geo.evaluator _, startPnt, endPnt = eva.getEndPoints() _, endPrms = eva.getParametersAtPoints([startPnt, endPnt]) step = 0.1 prms = list(dRange(endPrms[0], endPrms[1], step)) prms.append(endPrms[1]) skts = [initSkt(root, s) for s in sktNames] for skt in skts: skt.isComputeDeferred = True vecs = [None for s in sktNames] for prm in prms: _, pnt = eva.getPointAtParameter(prm) dumpPnt3D(prm, pnt) _, vecs[0], curvature = eva.getCurvature(prm) _, vecs[1] = eva.getTangent(prm) _, vecs[2] = eva.getFirstDerivative(prm) _, vecs[3] = eva.getSecondDerivative(prm) _, vecs[4] = eva.getThirdDerivative(prm) [initLine(skt, pnt, vecs[idx]) for idx, skt in enumerate(skts)] for skt in skts: skt.isComputeDeferred = False ui.messageBox('Done') except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def dumpPnt3D( prm :float, pnt : adsk.core.Point3D): print('{}| x:[{}]y:[{}]z:[{}]'.format(prm,pnt.x,pnt.y,pnt.z)) def dRange(begin, end, step): n = begin while n + step < end: yield n n += step def initLine( skt :adsk.fusion.Sketch, pnt :adsk.core.Point3D, vec :adsk.core.Vector3D): endPnt = pnt.copy() endPnt .translateBy(vec) lins = skt.sketchCurves.sketchLines lins.addByTwoPoints(pnt, endPnt) def initSkt( comp :adsk.fusion.Component, name :str) -> adsk.fusion.Sketch: skt = comp.sketches.add(comp.xYConstructionPlane) skt.name = name return skt def selectEnt( ui :adsk.core.UserInterface, msg :str, filtterStr :str) -> adsk.core.Selection : try: sel = ui.selectEntity(msg, filtterStr) return sel except: return None
スクリプト実行後、スケッチの曲線を選択すると、接戦やら何やらのベクトルを
可視化するためのスケッチを作ります。
(ベクトルのサイズは戻り値のままで、深い意味は調べてません)