ボディの中心(重心?)を基準に尺度変更したい

ボディの中心(重心?)を基準に尺度変更したい

kotttk
Collaborator Collaborator
2,657件の閲覧回数
18件の返信
メッセージ1/19

ボディの中心(重心?)を基準に尺度変更したい

kotttk
Collaborator
Collaborator

尺度の変更をボディの中心からやりたいのですが、

それは可能でしょうか??

0 件のいいね
解決済み
2,658件の閲覧回数
18件の返信
返信 (18)
メッセージ2/19

TerukiObara
Mentor
Mentor

尺度コマンドの中に点を入力するところがあると思うので、

事前に中心の点や重心点を作成しておいて、その点を入力するとできると思います。

図1.png

 

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

kotttk
Collaborator
Collaborator

ありがとうございます。

 

やはり事前に点を打つのですね。

例えばスカルプトで作った有機的な形状の場合、

中心や重心がわかりにくいと思うのですが、

このような形状の場合中心や重心を起点にすることは

難しいのでしょうか?

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

TerukiObara
Mentor
Mentor
解決済み

ボディを右クリックしてプロパティから重心は出てきます。

図1.png

 

以前にコミュニティで紹介されていますが、点を作成してくれるアドインスクリプトがあります。

forums.autodesk.com/t5/fusion-360-ri-ben-yu/ren-yi-diannoxyz-zuo-biao-zhi-ru-liwo-ke-nengnisuruadoin...

 

こちらの機能を使用すると良いと思います。

 

 

0 件のいいね
メッセージ5/19

kandennti
Mentor
Mentor

プロパティの数値を入力するのが手間なので、アクティブなコンポーネントの重心に

点を作成するマクロを(一か八かで)作成してみました。

 

#Create_ActiveComponent_COGPoint Bykantoku
#DirectDesignType Only
#Python 

import adsk.core, adsk.fusion, traceback

def run(context):
    ui = None
    try:
        app = adsk.core.Application.get()
        ui  = app.userInterface
        product = app.activeProduct
        design = adsk.fusion.Design.cast(product)
        actComp = design.activeComponent
        
        #designTypeCheck
        if design.designType == adsk.fusion.DesignTypes.ParametricDesignType:
            ui.messageBox('ダイレクトモードしか、点の作り方わかって無いんだよ!!')  
            return
            
        #GetCOG
        physicalProperties = actComp.getPhysicalProperties(adsk.fusion.CalculationAccuracy.VeryHighCalculationAccuracy);   
        cog = physicalProperties.centerOfMass
        
        #CreatePoint
        pointInput = actComp.constructionPoints.createInput()
        pointInput.setByPoint(adsk.core.Point3D.create(cog.x, cog.y, cog.z))
        point = actComp.constructionPoints.add(pointInput)        

        ui.messageBox('[X:'+str(cog.x*10)+' Y:'+str(cog.y*10)+' Z:'+str(cog.z*10)+']\nに、点を作ったよ!')
    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

・あくまで "アクティブなコンポーネントの重心" です。(ボディの指定の仕方がわからず・・・)

・パラメトリックデザイン時に実行すると、怒られます。(実行可能なのは、ダイレクトデザイン時のみです)

 (Fusion360のデフォルト単位はCm何ですかね?)

20.png

 

 

 

メッセージ6/19

TerukiObara
Mentor
Mentor
マクロつくれるんですね!!
すごいです!!!
0 件のいいね
メッセージ7/19

kandennti
Mentor
Mentor

Fusion360の場合、マクロではなくスクリプトでしたね。 すいません。

 

>マクロつくれるんですね!!

イヤ、わかって無いです。 2種類のサンプルのコードをつなぎ合わせただけなんです。

ボディ指定やパラメトリックでも実行できるようになったら、再度Upします。

0 件のいいね
メッセージ8/19

kotttk
Collaborator
Collaborator

すごいですね!

ぜひ試してみたいのですが、

このスクリプトというのは

どうやれば使えるようになるのでしょうか?

 

どこかにコピペでしょうか??

 

よろしくお願いします1

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

kandennti
Mentor
Mentor

こちらの動画が一番わかりやすいかと思います。

https://www.youtube.com/watch?v=F5WI8R-HGw0

 

上記のコードはPython(日本では何故か不人気)になっています。

0 件のいいね
メッセージ10/19

kotttk
Collaborator
Collaborator

ありがとうございます!

実行できました。

 

実行するにはダイレクトモードにしてからってことですよね??

複数ボディがある時、1つだけ選んで実行してみたのですが、

全体の重心のような場所に点ができたのですが、

個別ボディには対応してないですか?

 

よろしくお願いします。

 

 

0 件のいいね
メッセージ11/19

kandennti
Mentor
Mentor
解決済み

>実行するにはダイレクトモードにしてからってことですよね??

そうです。 現状はエラーで止まらないようにするのが精一杯でした。

何れはどちらでも動くようにしたいと思っています。

 

>個別ボディには対応してないですか?

一応、 "あくまで "アクティブなコンポーネントの重心" です" と、しました。

まだ、始めたばかりなのでわからないので。

 

0 件のいいね
メッセージ12/19

kotttk
Collaborator
Collaborator
ありがとうございます!
活用させていただきます!
対応が増えるのも楽しみにしております!
0 件のいいね
メッセージ13/19

kandennti
Mentor
Mentor

パラメトリック・ダイレクトどちらでも利用可能で、ボディを指定するたびに

重心に点を作成するスクリプトが出来ました。

もし良ければご利用ください。

 

http://kantoku.hatenablog.com/entry/2016/09/17/012259

メッセージ14/19

yujifujimura
Autodesk
Autodesk

こんにちは

 

こちらのスクリプトをFusion 360のSNSでご紹介させていただきたいのですが、よろしいでしょうか?

その際のご紹介名や、同時に宣伝されたいURLなどはございますか?

 

宜しくお願いいたします!

0 件のいいね
メッセージ15/19

kandennti
Mentor
Mentor

yujifujimuraさん こんにちは

 

>こちらのスクリプトをFusion 360のSNSでご紹介させていただきたいのですが、よろしいでしょうか?

構いませんよ。

 

>その際のご紹介名や、同時に宣伝されたいURLなどはございますか?

特にはありません。

0 件のいいね
メッセージ16/19

kotttk
Collaborator
Collaborator

個別にできました!

ありがとうございます!

 

今回質問の内容は尺度変更だったのですが、

実は重心の点が一番欲しい機能だったので

大変感謝しております。

 

使わせていただきます。

ありがとうございました!

 

0 件のいいね
メッセージ17/19

kotttk
Collaborator
Collaborator

たびたび失礼します。

 

重心についてですが、例えばこんな重心も求められるのかなと思い

メッセージさせていただきました。

 

添付のように異なるマテリアルを合わせた重心を表示するようなことも可能なのでしょうか?

(例えば上の赤がプラスチック、下のグレーが鉄など)

 

スクリプトの知識がないのでそれが可能なのかも検討もつかず

失礼な質問になっていたら申し訳ありません。

 

よろしくお願いします。

 

 

0 件のいいね
メッセージ18/19

kandennti
Mentor
Mentor

Fusion360は複合材のような物理マテリアルは、提供されていないのでは

無いのかな? と思っています。 その為リンク先のスプリクトは、単一ボディ用のため出来ません。

 

 

20.png

 

同一コンポーネント内に二つのボディを作成。 片方を鉄、もう片方を紙とし

最初のスクリプトを実行(左)。

両方を鉄にした上で再度実行(右)してみました。

 

 

 

厳密にはわかりませんが、物理マテリアルの変更だけで数値が変わっているので

コンポーネント単位であれば可能だと思いますよ。

 

0 件のいいね
メッセージ19/19

kotttk
Collaborator
Collaborator

説明が下手で申し訳ありません。

やりたかったことはまさにこれです!!

ありがとうございます!

0 件のいいね