フィット点スプラインのハンドル独立化

フィット点スプラインのハンドル独立化

spidermaYXUYS
Explorer Explorer
331件の閲覧回数
8件の返信
メッセージ1/9

フィット点スプラインのハンドル独立化

spidermaYXUYS
Explorer
Explorer

お世話になります。フィット点スプラインを書いてハンドルを修正する際、両側のハンドルが方向と長さ共に連動します。これを、パワーポイントにおけるフリーフォームの修正のように、片側ずつ独立して操作する方法をご教示ください。

0 件のいいね
解決済み
332件の閲覧回数
8件の返信
返信 (8)
メッセージ2/9

adachitech7
Consultant
Consultant

@spidermaYXUYS さん、

 

フィット点スプラインの制御ハンドルは制御点を中心にして左右対称にしか動かなかったと思います。

0 件のいいね
メッセージ3/9

spidermaYXUYS
Explorer
Explorer

ご返信ありがとうございます。

PPTに慣れてしまっており、他にも頂点の追加ができなかったりなど戸惑っています。

同じような躓きを経た方がいらっしゃらないか、こちらの様子を伺いつつ試行錯誤したいと思います。

0 件のいいね
メッセージ4/9

adachitech7
Consultant
Consultant

@spidermaYXUYS さん、

 

制御点の追加や削除はできるようになっています。

 

曲線を選択して右クリックから「スプラインフィット点を挿入」を選択してください。

01.png

 

 

これで任意の場所に制御点を追加できます。

02.png03.png

 

 

あと曲率と接線方向のコントロールを独立して行うことも可能になっています。

メッセージ5/9

spidermaYXUYS
Explorer
Explorer

ありがとうございます。

言葉足らずで申し訳ございませんでしたが、上で述べた戸惑いというのは、

スプラインのフィット点ではなく線分図形の頂点の追加ができない、という点でした。

0 件のいいね
メッセージ6/9

adachitech7
Consultant
Consultant
解決済み

@spidermaYXUYS さん、

 

破断コマンドを使えば似たようなことはできると思います。一度お試しください。

01.png02.png

メッセージ7/9

kandennti
Mentor
Mentor

@spidermaYXUYS さん こんにちは

偶然ですが発見しました。
ハンドルを選択状態にし、コンテキストメニュー(右クリック)の"曲率ハンドルのアクティブ化"にすると
固定できるようです。

メッセージ8/9

kandennti
Mentor
Mentor
解決済み

”コントロールポイントが多く全てのハンドルを独立したいのに面倒だよ!!”
と言う可能性もありそうだったので、フィット点スプラインの全てのハンドルを切り替えるスクリプトを作りました。

スクリプトを実行しフィット点スプラインを選択するたびに

"接線ハンドルをアクティブ化""正接ハンドルを非アクティブ化"
を繰り返します。終了はESCキーを押してください。
# Fusion360API Python script

import traceback
import adsk.core as core
import adsk.fusion as fusion

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

        msg: str = "スケッチのスプラインを選択して!!"
        selFilter: str = "SketchCurves"

        while True:
            sel: core.Selection = select_ent(msg, selFilter)
            if not sel:
                break

            crv = sel.entity
            if not hasattr(crv, "fitPoints"):
                ui.messageBox("フィット点スプラインを選んで~")
            else:
                if crv.getTangentHandle(crv.fitPoints[0]):
                    for p in crv.fitPoints:
                        l = crv.getTangentHandle(p)
                        l.deleteMe()
                    app.log("正接ハンドルを非アクティブ化")
                else:
                    for p in crv.fitPoints:
                        crv.activateTangentHandle(p)
                    app.log("接線ハンドルをアクティブ化")

        app.log("Done")
                
    except:
        if ui:
            ui.messageBox("Failed:\n{}".format(traceback.format_exc()))


def select_ent(
    msg: str,
    filter: str
) -> core.Selection:

    try:
        app: core.Application = core.Application.get()
        ui: core.UserInterface = app.userInterface
        sel = ui.selectEntity(msg, filter)
        return sel
    except:
        return None

 

メッセージ9/9

spidermaYXUYS
Explorer
Explorer

皆様、ご助力いただきありがとうございます。

PPTのようにポインタで曲線直線を引き平面図形を自由に描いていく、という手法とは根本的に異なるソフトであるという点を改めて理解しました。

カマボコ型や扇形を引くだけでも悪戦苦闘しそうですが、色々試してみたいと思います。