C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)※記載されている内容は個人の意見であり、所属する団体等を代表する意見では御座いません・・・・よ!

毛を生やす2

こちらの続きです。
毛を生やす1 - C#ATIA

前回は曲面で行いました。・・・非常に眠かったです。
曲面だとフサフサなのですが、境界線が直線の平面の場合はがっかりです。

ん!僕の頭を見ないで欲しい。

要はMeshManagerを使うと、STLでエクスポートした際の頂点や頂点の法線が
エクスポートすることなく手に入ります。

でも、これではさすがに寂しい。毛量が欲しい。

そこでもう少し調べると、TriangleMeshCalculatorオブジェクトがあり、Mesh生成の条件が
調整できそうです。
Help

そこで、MyExecutePreviewHandlerクラスのnotifyメソッドを修正します。
(数値的にどれぐらいが理想的かわかりませんが)

・・・
class MyExecutePreviewHandler(core.CommandEventHandler):
    def __init__(self):
        super().__init__()

    def notify(self, args: core.CommandEventArgs):
        core.Application.get().log(args.firingEvent.name)

        global _selFace
        face: fusion.BRepFace = _selFace.selection(0).entity

        des: fusion.Design = face.body.parentComponent.parentDesign
        root: fusion.Component = des.rootComponent

        # triMesh: fusion.TriangleMesh = face.meshManager.displayMeshes[0]
        meshCalculator: fusion.TriangleMeshCalculator = face.meshManager.createMeshCalculator()
        meshCalculator.maxAspectRatio = 1.0
        meshCalculator.maxSideLength = 1.0
        triMesh: fusion.TriangleMesh = meshCalculator.calculate()

        nodes = list(triMesh.nodeCoordinates)
        normals = list(triMesh.normalVectors)

        skt: fusion.Sketch = root.sketches.add(root.xYConstructionPlane)
        skt.isComputeDeferred = True
        skt.arePointsShown = False
        for p1, v in zip(nodes, normals):
            p2: core.Point3D = p1.copy()
            p2.translateBy(v)

            skt.sketchCurves.sketchLines.addByTwoPoints(p1, p2)
        skt.isComputeDeferred = False
・・・

これで面を選択すると

おぉ素晴らしい!! 育毛効果抜群じゃないですか!

もちろん曲面だってフサフサのまま。

未来は明るい。