ネジ部 干渉の件

ネジ部 干渉の件

n-okudaira
Advocate Advocate
1,320件の閲覧回数
12件の返信
メッセージ1/13

ネジ部 干渉の件

n-okudaira
Advocate
Advocate

例えばM6のネジを使用していて、M6のタップ穴をあける場合

現実にはM6の穴はφ5になると思うのですがその場合、M6のねじをジョイントすると干渉になります。

 

何かいい方法はありますか。やはりφ6で穴をあけないといけませんか。

0 件のいいね
解決済み
1,321件の閲覧回数
12件の返信
返信 (12)
メッセージ2/13

adachitech7
Consultant
Consultant

@n-okudaira さん、こんにちは。

 

下の事例はM10のボルトの締結状態をモデリングしたものです。雄ネジと雌ネジの双方にはM10の属性だけを与えて実体化はしていません。

これで干渉チェックをすると確かに干渉していると警告が出るのですが、通常のアセンブリではこのまま設計を進めると思います。

干渉した場合に何が問題かを教えていただければ何か対策を考えられるかもしれません。

01.PNG02.png03.PNG

メッセージ3/13

n-okudaira
Advocate
Advocate

ありがとうございます。

意図としまいては、アセンブリにて干渉チェックを行い干渉なしが表示されるようにしたいです。

ボルトなしで干渉チェックをした場合、穴位置のずれや、ボルト頭等に干渉しているなどが発見できないかと思い

ボルトをアセンブリに追加したいのですが、ボルトと穴が干渉チェックで引っかかるので、何か策はないのかと思い質問しました。

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

adachitech7
Consultant
Consultant

@n-okudaira さん、

 

最初に干渉しない寸法で穴を開けておき、次に目的の大きさでネジの属性を付加、適宜ネジフィーチャーを抑制/抑制解除するという方法でどうでしょうか?
動画と添付データをご確認ください。

 

メッセージ5/13

n-okudaira
Advocate
Advocate

有難うございます。

参考にします。

 

たとばネジ穴が複数あり複数のねじフューチャーを一括で抑制/解除できたりしますか。

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

kandennti
Mentor
Mentor

@n-okudaira さん こんにちは。

 

>複数のねじフューチャーを一括で抑制/解除できたりしますか。

恐らく出来ない気がします。

APIを利用する "ネジ" コマンドのものは切り替えが出来そうな気が

するので、時間が出来たら取り組もうかと思ってます。

(利用するかどうかはご自由に)

 

穴コマンドのネジはちょっと調べて、試してみないと分からないですね・・・。

メッセージ7/13

adachitech7
Consultant
Consultant

@n-okudaira さん、

 

そのものずばりの機能はなかった気がするのですが、モデリングの仕方(運用のやり方/ルール)で対応可能だと思います。

下の事例ではネジフィーチャーを履歴の最後にまとめて作るようにして一挙に抑制/抑制解除ができるように工夫しています。

 

 

このやり方は樹脂成型部品を設計する場合にも有効で、私は運用ルールとしてフィレットを履歴の一番最後にまとめて作るように決めています。モデリングは適宜履歴のロールバック、アップデートを繰り返しながら行います。

メッセージ8/13

ryoji00
Advocate
Advocate
解決済み

@n-okudaira 様

 

既にご存じかもしれませんが、下の動画の9分以降のモデリング方法も参考になるかもしれません。

https://www.youtube.com/watch?v=y0Wso2HdyR4

(^.^)/~~~

 

メッセージ9/13

adachitech7
Consultant
Consultant

@ryoji00 さん、こんにちは。

 

これは面白いやり方ですね。

ネジは既製品を買う訳ですからネジ自体のモデリングを工夫して干渉回避する方が理にかなっている感じがします。

良い情報をありがとうございました。

メッセージ10/13

n-okudaira
Advocate
Advocate

皆様、色々情報有難うございます。

助かりました。参考にさせて頂きます。

メッセージ11/13

kandennti
Mentor
Mentor

@ryoji00 さん

確かに、業務でもネジ部をサーフェスで表現されているデータが

送られてきますね。

図面化した際の断面も、その方法で表現可能なのでそうされている

のだと思います。・・・Fusion360ではNGですが。

 

 

@n-okudaira さん

全てのネジのモデル化ON/OFFを行うスクリプトを作成しました。

# Fusion360API Python script

import traceback
import adsk.fusion
import adsk.core

def run(context):
    ui: adsk.core.UserInterface = None
    try:
        app: adsk.core.Application = adsk.core.Application.get()
        ui = app.userInterface
        des: adsk.fusion.Design = app.activeProduct
        root: adsk.fusion.Component = des.rootComponent
        threads: adsk.fusion.ThreadFeatures = root.features.threadFeatures

        # query
        msg = f'{threads.count}個のモデル化可能なネジが有ります。 '
        msg += f'全てモデル化しますか?\n'
        msg += f'はい:モデル化を実行\n'
        msg += f'いいえ:モデル化を解除\n'
        msg += f'キャンセル:変更しない'

        res = ui.messageBox(
            msg,
            '全てのネジのモデル化切り替え',
            adsk.core.MessageBoxButtonTypes.YesNoCancelButtonType,
            adsk.core.MessageBoxIconTypes.QuestionIconType
        )

        # exec
        if res == adsk.core.DialogResults.DialogYes:
            execModeled(True)
        elif res == adsk.core.DialogResults.DialogNo:
            execModeled(False)

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))


def execModeled(isModeled: bool):
    app: adsk.core.Application = adsk.core.Application.get()
    ui = app.userInterface
    des: adsk.fusion.Design = app.activeProduct
    root: adsk.fusion.Component = des.rootComponent
    sels: adsk.core.Selections = ui.activeSelections

    tl: adsk.fusion.Timeline = des.timeline
    tlPos = tl.markerPosition

    threads: adsk.fusion.ThreadFeatures = root.features.threadFeatures
    thread: adsk.fusion.ThreadFeature
    for thread in threads:
        timeObj: adsk.fusion.TimelineObject = thread.timelineObject

        if thread.linkedFeatures.count < 1:
            # ThreadFeature
            timeObj.rollTo(True)
            if thread.isModeled != isModeled:
                thread.isModeled = isModeled
        else:
            # HoleFeature
            hole =  adsk.fusion.HoleFeature.cast(thread.linkedFeatures[0])
            if not hole:
                continue
            timeObj.rollTo(False)

            isModeledNumber = 1 if isModeled else 0

            sels.clear()
            sels.add(hole)

            app.executeTextCommand(u'Commands.Start FusionDcHoleEditCommand')
            dialogInfo = app.executeTextCommand(u'Toolkit.cmdDialog')
            if 'infoModeled' in dialogInfo:
                app.executeTextCommand(u'Commands.SetBool infoModeled {}'.format(isModeledNumber))
                app.executeTextCommand(u'NuCommands.CommitCmd')

    tl.markerPosition = tlPos
    sels.clear()

・履歴をキャプチャしている場合のみです。

・外部リンクしているコンポーネント内のネジは対象外です。

メッセージ12/13

n-okudaira
Advocate
Advocate

申し訳ございません

fusion360をそこまで深く使用していないので

スクリプトのやり方がわからないです。。

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

kandennti
Mentor
Mentor

@n-okudaira さん

 

こちら記載した "素のコード" の方法で、新たなスクリプトを作成し

(プログラミング言語はpythonをチェック入れて下さい)

上記のコードをコピペしてください。

https://kantoku.hatenablog.com/entry/2021/02/15/161734 

 

使い勝手が悪いため、メニューにボタンを追加して使いやすく

したかったのですが、Fusion360がクラッシュしてしまう為

ボタンにすることは諦めました・・・。