仕事のカタマリにようこそ!  [ ログイン | ユーザ登録 ]
フォーラムから検索

機械用3D-CAD SolidWorks非公認のユーザサイトです
 
 
Web katamari.org
仕事のカタマリ
ホーム リンク集 ダウンロード フォーラム(掲示板) FAQ お問い合わせ









フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27)
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2024/05/11 - 17:39:19
ホーム ヘルプ 検索 ログイン 登録

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: APIで直径寸法設定できない 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: APIで直径寸法設定できない  (閲覧数 7026 回)
mic20
新人さん
*

オフライン

投稿: 5



I'm a llama!

プロファイルを見る
APIで直径寸法設定できない
« 投稿日: 2008/12/24 - 15:02:45 »
引用して返信

はじめまして、
APIの初心者です。

SolidWorks 2007 SP5でプログラムを書いていますが、なかなかできないことがありますので、皆様からの教示をお願い致します。

やりたいこと:
*部品を回転フィーチャで作成し、保存する
*のそ部品から2D図面を作成する

問題点:
*部品作成する時、回転軸を描き、スケッチを描き、寸法と拘束を入れましたが、中心線までの寸法はどうすれば直径寸法に変わるのでしょうか、色々試しましたがうまくできません。
手入力の場合は、中心線の向こう側にマウスを置くで自動的に変わることは知っていますが、APIではどうすればよいのでしょうか?

なぜ直径寸法がほしいかといいますと、図面を作成するときに、モデルアイテムの挿入だけで全ての寸法、公差が入力されるため(せっかく部品作成するときに公差を入れたので2度手間はちょっと。。。)

部品作成ソースは抜粋して、以下のように書いています:
。。。。変数宣言等
Dim BushOuterRadius = 10
Private Function AutoCreate_CorePin()
    CorePin_BaseDepth = 10
    CorePin_PinDepth = 10
    swApp.SetUserPreferenceToggle swInputDimValOnCreate, False  'Turn off dimension input dialog
   
    Set swModel = swApp.NewPart
    swModel.SetUserPreferenceIntegerValue swUnitsLinear, SwConst.swMM
    Set swSelMgr = swModel.SelectionManager
    Set swFeatMgr = swModel.FeatureManager
   
    swModel.SetAddToDB False                                    'Turn on snapping
    'Sketching
    swModel.InsertSketch2 False
    swModel.CreateLine2(0, 0, 0, 0, 0.03, 0).ConstructionGeometry = True                                                      '中心線
   
    swModel.CreateLine2 0, 0, 0, BushOuterRadius / 1000, 0, 0                                                                'CorePin base line
   
    swModel.CreateLine2 BushOuterRadius / 1000, 0, 0, BushOuterRadius / 1000, CorePin_BaseDepth / 1000, 0                    'CorePin base depth
    '寸法と公差を追加
    boolstatus = swModel.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0, 0.016, 0, True, 0, Nothing, 0)
    '寸法を中心線の左側において、直径寸法になってほしいですが。。。一般寸法しかなりませんでした
    swModel.AddDimension2 -0.005, 0.005, 0
    swModel.EditDimensionProperties2 swTolBILAT, 0, -0.01 / 1000, "", "", 1, 9, 2, 1, 11, 11, "<MOD-DIAM>", "", 1, "", "", 0
'    boolstatus = swModel.Extension.SelectByID2("D1@スケッチ1", "DIMENSIONS", 0, 0.005, 0, True, 0, Nothing, 0)
    'SolidWorks APIヘルプで、swDispDim.Diametricがあって直径寸法に変更できるとかいていますが。。。
    Set swDispDim = swSelMgr.GetSelectedObject5(1)
    'この寸法のタイプは、Linearタイプになっているため、swDispDim.Diametricが利かない  
    Debug.Print swDispDim.GetType
    swDispDim.Diametric = True
    If swDispDim.Diametric Then
        Debug.Print "swDispDim.Diametric = True"
    Else
        Debug.Print "swDispDim.Diametric = False"
    End If
End Function

以上、よろしくお願い致します。
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:APIで直径寸法設定できない
« 返信 #1 投稿日: 2008/12/25 - 11:35:59 »
引用して返信

mic20さん、なじめまして。
Makoronです。

貼り付けてあるコードを基に、私もテストしてみました。
しかし、mic20さんがおっしゃられる様に、swDispDim.Diametric は動作してくれませんでした。
直径寸法にする為の方法をいろいろと考えたり、試してみたりしたのですが、見つかりませんでした・・・ 

そこで、直径寸法を何とか表現できないかと考えてみたところ、穴ウィザードで使っている方法が使えそうな事に気がつきました。
それは、中心線の反対側に、作図線で輪郭線と対称な線を描き、輪郭線と作図線を選択して寸法を作成する。
と言う方法です。
一応、サンプルマクロも作成したので、使えそうであれば参考にしてみてください。

追伸:
多分、この問題は「バグ」というより「仕様」の様な気がします。
なぜなら、穴ウィザードのスケッチも、直径寸法という設定ではなく、対称な作図線をわざわざ使用しているからです。
APIからは操作できない、と言うより、APIからの操作は考えていないか、要望が少ないから作っていない。ではないでしょうか。
ただ、バグかもしれないので代理店に問い合わせしても良いかもしれませんね。
 CreateRevolveProfileSketch.lzh
議長に報告する   記録済み
mic20
新人さん
*

オフライン

投稿: 5



I'm a llama!

プロファイルを見る
Re:APIで直径寸法設定できない
« 返信 #2 投稿日: 2008/12/25 - 13:06:48 »
引用して返信

makoronさん、
早速のご返信、ありがとうございます。

'
引用元: Makoron 投稿日 '.timeformat('1230172559').'   
'
貼り付けてあるコードを基に、私もテストしてみました。
しかし、mic20さんがおっしゃられる様に、swDispDim.Diametric は動作してくれませんでした。
直径寸法にする為の方法をいろいろと考えたり、試してみたりしたのですが、見つかりませんでした・・・ 

そうですか :'(
色々調べていただいて、ありがとうございます。


引用:

そこで、直径寸法を何とか表現できないかと考えてみたところ、穴ウィザードで使っている方法が使えそうな事に気がつきました。
それは、中心線の反対側に、作図線で輪郭線と対称な線を描き、輪郭線と作図線を選択して寸法を作成する。
と言う方法です。
一応、サンプルマクロも作成したので、使えそうであれば参考にしてみてください。

追伸:
多分、この問題は「バグ」というより「仕様」の様な気がします。
なぜなら、穴ウィザードのスケッチも、直径寸法という設定ではなく、対称な作図線をわざわざ使用しているからです。
APIからは操作できない、と言うより、APIからの操作は考えていないか、要望が少ないから作っていない。ではないでしょうか。
ただ、バグかもしれないので代理店に問い合わせしても良いかもしれませんね。

サンプルを試してみました。確かにちょっと手間になりますが、この方法で出来るようになりますね。
ソースも拝見しました。初心者の私と書き方が違いますね。。。参考させていただきます。

で、例の穴ウィザードですが、私のPCでは、対称作図線が見当たりません(ちょっと不思議)。なので、代理店に問い合わせて見ます。

またよろしくお願い致します。
議長に報告する   記録済み
hisa
カタマリの王様!?
*****

オフライン

投稿: 507



PANDA-Z!!

プロファイルを見る WWW
Re:APIで直径寸法設定できない
« 返信 #3 投稿日: 2008/12/25 - 13:09:55 »
引用して返信

mic20さん、はじめまして

回転フィーチャーで作成との事ですが、回転フィーチャーを作成した時点で寸法タイプが
swDiameterDimension(swRadialDimension)へ切り替わるようです。

なので、回転フィーチャー作成後に寸法にアクセスすればswDispDim.Diametricが
動作しました

APIで直径表示を操作した時点では、直径表示が変なことになりますが、スケッチ編集を
終了すれば、正常に戻ります
(追記:おかしくなったのは、直径からswDispDim.Diametricで半径表示にしたときだけでした…)

検証環境はmic20さんと同じです
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:APIで直径寸法設定できない
« 返信 #4 投稿日: 2008/12/25 - 13:18:42 »
引用して返信


引用:
で、例の穴ウィザードですが、私のPCでは、対称作図線が見当たりません(ちょっと不思議)。なので、代理店に問い合わせて見ます。

おっと、早とちりしたかも・・・。
急いで確認したら、基本的な部分は対称線を使ってませんでした。
下きり等の円錐部分に作図線を使ってました。
(間違いです、ごめんなさい。)


引用:
回転フィーチャーで作成との事ですが、回転フィーチャーを作成した時点で寸法タイプが
swDiameterDimension(swRadialDimension)へ切り替わるようです。

hisaさん、さすがです。(フィーチャーを作ってしまう所まで頭がまわりませんでした。)

と言うことで、mic20さん、hisaさんの方法で試して下さいね。
議長に報告する   記録済み
hisa
カタマリの王様!?
*****

オフライン

投稿: 507



PANDA-Z!!

プロファイルを見る WWW
Re:APIで直径寸法設定できない
« 返信 #5 投稿日: 2008/12/25 - 13:46:15 »
引用して返信

'
引用元: Makoron 投稿日 '.timeformat('1230178722').'   
'hisaさん、さすがです。(フィーチャーを作ってしまう所まで頭がまわりませんでした。)


いえいえ^^;

実は、この回答に至るまでにMakoronさんと同じ道を通っていたりします(恐らく
Makoronさんのレスを確認して、「やっぱダメかぁ・・・」と思ってた矢先に、
「あ、確か何かで寸法に勝手にΦやRが付いたなぁ・・・」とかすかな記憶が蘇り、
試してみた結果です
(と言うことは、mic20さんのコードにある、プレフィックスの"<MOD-DIAM>"追加も
省けますね)
議長に報告する   記録済み
mic20
新人さん
*

オフライン

投稿: 5



I'm a llama!

プロファイルを見る
Re:APIで直径寸法設定できない
« 返信 #6 投稿日: 2008/12/25 - 13:54:30 »
引用して返信

hisaさん、Makoronさん

感謝、感謝です。

早速ためしてみます。

回転フィーチャを作成してからスケッチを変更してみたらどうかなって、思ったことありましたが、確認するまでは手がまわりませんでした(ちょっとくやしいい)。もっと頑張らなきゃ。。。 
議長に報告する   記録済み
mic20
新人さん
*

オフライン

投稿: 5



I'm a llama!

プロファイルを見る
Re:APIで直径寸法設定できない
« 返信 #7 投稿日: 2009/01/06 - 15:48:28 »
引用して返信

Makoronさん、hisaさん

hisaさんが教えていただいた方法で、うまくできました  ありがとうございました。

他の方が参考するために書いておきます:
*スケッチを描くときに、寸法を挿入(その時は一般寸法になっています)
*回転フィーチャを作成
*回転フィーチャにアクセスし、寸法タイプを変更する(スケッチを編集しなくてもできるのです)。必要に応じて公差を設定

以下が私が書いたコードです(変数の宣言等省きますので動かないけど参考の程度で。。。):

    Set swFeature = swModel.FirstFeature
    Do While Not swFeature Is Nothing
        '回転フィーチャを探す
        If "Revolution" = swFeature.GetTypeName Then
            Exit Do
        End If
        Set swFeature = swFeature.GetNextFeature
    Loop
    '公差設定+直径寸法に変更
    Set swDispDim = swFeature.GetFirstDisplayDimension
    Do While Not swDispDim Is Nothing
        Set swDim = swDispDim.GetDimension
        If swRadialDimension = swDispDim.GetType Then
            '直径寸法に変更
            swDispDim.Diametric = True
        End If
        '公差設定
        If swDim.Name = "D5" Then
            swDim.SetToleranceType swTolSYMMETRIC
            swDim.SetToleranceValues 0, 0.01 / 1000
        End If
        Set swDispDim = swFeature.GetNextDisplayDimension(swDispDim)
    Loop

---------------------------------------------------
注記:
*このやり方では、全ての半径寸法は直径寸法に変更されます
*Dimension::SetToleranceTypeはDimensionTolerance::Typeにいれられるようですが、面倒(やりかた分かりません)なので無視しています。
やりかたが分かる方、教示していただければ嬉しいですが
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:APIで直径寸法設定できない
« 返信 #8 投稿日: 2009/01/07 - 10:10:24 »
引用して返信

mic20さん、こんにちは。

今までフィーチャーを作るマクロを作ったことが無かったので、勉強も兼ねてサンプルを作ってみました。
前に添付したマクロに、mic20さんコードを取り入れて作りました。
また、DimensionTolerance::Typeを使ってみたので、確認してみてください。
 CreateRevolveProfileSketch2.lzh
議長に報告する   記録済み
hisa
カタマリの王様!?
*****

オフライン

投稿: 507



PANDA-Z!!

プロファイルを見る WWW
Re:APIで直径寸法設定できない
« 返信 #9 投稿日: 2009/01/07 - 13:31:10 »
引用して返信

'
引用元: mic20 投稿日 '.timeformat('1231224508').'   
'注記:
*このやり方では、全ての半径寸法は直径寸法に変更されます


"半径(直径)寸法が定義された元エンティティが2つとなる場合"と限定すれば、
軸径寸法だけ直径表示に切り替えられると思います。

具体的には、
    Do While Not swDispDim Is Nothing
        Set Annotation = swDispDim.GetAnnotation
        If swRadialDimension = swDispDim.GetType And Annotation.GetAttachedEntityCount2 = 2 Then
            '直径寸法に変更
            swDispDim.Diametric = True
        End If
        '公差設定
    If swDim.Name = "D5" Then
            swDim.SetToleranceType swTolSYMMETRIC
            swDim.SetToleranceValues 0, 0.01 / 1000
        End If
        Set swDispDim = Feature.GetNextDisplayDimension(swDispDim)
    Loop

こんな感じです
議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: APIで直径寸法設定できない 前のトピック 次のトピック
ジャンプします: