C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

もっと短く書けるんじゃないかな?

海外の公開されているcatiaのマクロ(国内は、ほぼ無いけど)もそうなんですが、
Fusion360スクリプトも結構、読みにくいものが多い気がするんです。

とあるサイトで公開されていたものの一部なんですが

・・・
        line1 = adsk.core.Line3D.create(adsk.core.Point3D.create(33, 3, 0),
                                        adsk.core.Point3D.create(37, 3, 0))
        line2 = adsk.core.Line3D.create(adsk.core.Point3D.create(37, 3, 0),
                                        adsk.core.Point3D.create(37, 7, 0))
        line3 = adsk.core.Line3D.create(adsk.core.Point3D.create(37, 7, 0),
                                        adsk.core.Point3D.create(33, 7, 0))
        line4 = adsk.core.Line3D.create(adsk.core.Point3D.create(33, 7, 0),
                                        adsk.core.Point3D.create(33, 3, 0))

        line5 = adsk.core.Line3D.create(adsk.core.Point3D.create(33, 3, 2),
                                        adsk.core.Point3D.create(37, 3, 2))
        line6 = adsk.core.Line3D.create(adsk.core.Point3D.create(37, 3, 2),
                                        adsk.core.Point3D.create(37, 7, 2))
        line7 = adsk.core.Line3D.create(adsk.core.Point3D.create(37, 7, 2),
                                        adsk.core.Point3D.create(33, 7, 2))
        line8 = adsk.core.Line3D.create(adsk.core.Point3D.create(33, 7, 2),
                                        adsk.core.Point3D.create(33, 3, 2))
・・・

まぁインデントがそろっていて綺麗なんですが、ひたすら座標値を指定して
線を作っているだけなんですよね。

オブジェクトのプロパティやメソッドだって理解してれば、
こんな感じにしてしまっても良いと思う。

・・・
        lin3d = adsk.core.Line3D
        pnt3d = adsk.core.Point3D

        line1 = lin3d.create(pnt3d.create(33, 3, 0), pnt3d.create(37, 3, 0))
        line2 = lin3d.create(pnt3d.create(37, 3, 0), pnt3d.create(37, 7, 0))
        line3 = lin3d.create(pnt3d.create(37, 7, 0), pnt3d.create(33, 7, 0))
        line4 = lin3d.create(pnt3d.create(33, 7, 0), pnt3d.create(33, 3, 0))

        line5 = lin3d.create(pnt3d.create(33, 3, 2), pnt3d.create(37, 3, 2))
        line6 = lin3d.create(pnt3d.create(37, 3, 2), pnt3d.create(37, 7, 2))
        line7 = lin3d.create(pnt3d.create(37, 7, 2), pnt3d.create(33, 7, 2))
        line8 = lin3d.create(pnt3d.create(33, 7, 2), pnt3d.create(33, 3, 2))
・・・

もっとも、"lineX" の変数名に意味が有るとは思えないからリストにしても
良いだろうし、座標値見れば四角を2回描きたいのだろうと思うので、
それなりの関数用意しても良いように感じるんですよ。何度も行うのであれば。

”人の事、指摘出来る程のもの書いてるのか?" って言われると辛い。