C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

点・曲線をインポートするスプリクト 修正1

先日、何とか3DCAD中間ファイルの3Dな点・曲線をインポートするスプリクトを
Upしました。
3DCAD中間ファイルの3Dな点・曲線をインポートするスプリクト - Autodesk Community


多数ある問題点の一つなのですが、円・円弧をNurbs曲線として
インポートしている部分の修正を考えています。

#FusionAPI_python
#Author-kantoku
#Description-ArcTest

import adsk.core, traceback

def run(context):
    ui = None
    try:
        app = adsk.core.Application.get()
        ui  = app.userInterface
        
        #円弧作成
        center = [1107.3813777445, -361.18476278735, 87.096588591886]
        normal = [-0.54635392414872, -0.83754953013075, -0.00285904618013]
        referenceVector = [0.83755440991454, -0.54635074096564, -0.00186501447709]
        radius = 5.0881512938029 * 0.1
        startAngle = 3.138255565834
        endAngle = 6.2798482194238
        
        arc = adsk.core.Arc3D.createByCenter(
            create_Point(center), 
            create_Vector(normal), 
            create_Vector(referenceVector), 
            radius, 
            startAngle, 
            endAngle)
        
        #スケッチ作成
        des = adsk.fusion.Design.cast(app.activeProduct)
        comp = des.rootComponent
        skt = comp.sketches.add(comp.xYConstructionPlane)
        skt.name = "NurbsCurve"
        
        #円弧取り込み-NurbsCurve
        sfs = include_BSc(arc.asNurbsCurve, skt)
        skt.include(sfs)
        sfs.deleteMe()
        
        
        #スケッチ作成
        skt = comp.sketches.add(comp.xYConstructionPlane)
        skt.name = "Arc"
        
        #円弧取り込み-Arc
        ac = include_Arc(arc, skt)
        skt.include(ac)
        ac.deleteMe()
        
        
        ui.messageBox('Done')
    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

def create_Vector(lst):
    return adsk.core.Vector3D.create(
        lst[0], lst[1], lst[2])
        
def create_Point(lst):
    return adsk.core.Point3D.create(
        lst[0] * 0.1, lst[1] * 0.1, lst[2] * 0.1)
        
def include_BSc(geo, skt):
    fs = skt.sketchCurves.sketchFittedSplines.addByNurbsCurve(geo)
    fs.isFixed = True
    return fs
    
def include_Arc(geo, skt):
    eva = geo.evaluator
    (reValue, sParam, eParam) = eva.getParameterExtents()
    (reValue, midpnt) = eva.getPointAtParameter((sParam + eParam) * 0.5)
    ac = skt.sketchCurves.sketchArcs.addByThreePoints(
        geo.startPoint, midpnt, geo.endPoint)
        
    return ac

1つのArc3Dオブジェクトを
最初は、今までの方法でNurbs曲線として取り込み
後では、3点通過の円弧として取り込みます。

最初のものをマウスでクリックすると
f:id:kandennti:20170912154021p:plain
右下に曲線の長さが表示されます。

後のものをマウスでクリックすると
f:id:kandennti:20170912154042p:plain
右下には半径が表示され、中心部分に点が作成されました。

と言う事で、円弧に関しては何とかなりそうです。