shamoji
Full メンバー
オフライン
投稿: 45
I'm a llama!
|
|
線種の設定
« 投稿日: 2011/03/14 - 10:39:18 » |
|
皆様こんにちは。 いつもお世話になってます。
DrawingDocにて、線種の設定について教えてください。
まず、マクロで図面に指定した線種でスケッチを描きたいです。
現状は、スケッチを描いた後に
swModel.SetLineWidth 0 swModel.SetLineStyle "CONTINUOUS"
で変更しております。 この場合スケッチを描く度に線種を変更しているので無駄な時間が多く掛かってしまいます。 そこで、予め設定を変更しておいてスケッチを描きたいのですがマクロからの設定方法が分かりません。
どなたか分かる方いらっしゃいましたらご回答宜しくお願いします。
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:線種の設定
« 返信 #1 投稿日: 2011/03/14 - 20:08:31 » |
|
shamojiさん、こんにちは。
APIでの処理を見つけられなかったので、レジストリ設定の場所を書きます。 (図面を操作しているときに、何も選択していない状態で、線幅や線種を変更すると 次から描くスケッチの設定が変わりますが、そのレジストリ設定の内容です。)
[HKEY_CURRENT_USER\Software\SolidWorks\SolidWorks 2009\Drawings] "Line Color"=dword:ffffffff "Line Width"=dword:00000009 "Line Style"="BYLAYER"
もし、マクロで処理する場合には、マクロからレジストリの値を変更してあげると うまくいくのではないかと思います。 (試したことがないので、正しく動作するかわかりませんが・・・。)
|
|
|
|
shamoji
Full メンバー
オフライン
投稿: 45
I'm a llama!
|
|
Re:線種の設定
« 返信 #2 投稿日: 2011/03/15 - 11:41:18 » |
|
makoron様 ご回答有難うございます。 やはりAPIでの処理は無いのでしょうか。。
そこで早速下記レジストリを確認させて頂きました。
引用: [HKEY_CURRENT_USERSoftwareSolidWorksSolidWorks 2009Drawings] "Line Color"=dword:ffffffff "Line Width"=dword:00000009 "Line Style"="BYLAYER"
|
そこで、SW起動中にレジストリエディタにて書き換えてみたのですが、変更内容が反映されませんでした。 確かに、線種を選びなおしてSWを終了するとレジストリに反映されました。 SW起動前にレジストリを書き換えた場合は、その変更が反映されました。
SWの設定の問題でしょうか? 因みに私の環境はSW2009 SP4.0です。
素人考えですが、結果からみるとSW実行中は、レジストリが読み込まれているメモリの値を書き換える必要があるみたいです。(想像ですが) ですが、その方法が分かりません。 もし、分かるようでしたらご教授お願いします。
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:線種の設定
« 返信 #3 投稿日: 2011/03/16 - 09:44:28 » |
|
引用:そこで、SW起動中にレジストリエディタにて書き換えてみたのですが、変更内容が反映されませんでした。 確かに、線種を選びなおしてSWを終了するとレジストリに反映されました。 SW起動前にレジストリを書き換えた場合は、その変更が反映されました。
SWの設定の問題でしょうか? 因みに私の環境はSW2009 SP4.0です。 |
shamojiさん、ごめんなさい。 私が紹介した方法はマクロ内では意味がない方法でした。 レジストリはSolidWorksの起動時にのみ読込まれるので、 SolidWorks起動中にレジストリの値を変更しても何もかわりません・・・。
お役に立てないのも悲しいので、解決策がないかを調べてみました。
マクロを組んで試してみると、確かにswModel.SetLineWidth の処理は遅いですね。 早くする方法を探してみて、スケッチの処理の前に swModelView.EnableGraphicsUpdate = False をいれるのが一番効果がでました。 swModelDoc2.SetAddToDB(True)も速くなるのですが、 作成するスケッチに自動拘束が必要なばあいはこの設定は難しいですね。
****** 一応サンプル ***** Code:Sub main() Dim swApp As SldWorks.SldWorks Set swApp = Application.SldWorks
Dim swModelDoc2 As SldWorks.ModelDoc2 Set swModelDoc2 = swApp.ActiveDoc Dim swModelView As SldWorks.ModelView Set swModelView = swModelDoc2.ActiveView swModelView.EnableGraphicsUpdate = False Call swModelDoc2.SetAddToDB(True) Dim i As Long Dim swSketchSegment(50) As SldWorks.SketchSegment For i = 0 To 49 Set swSketchSegment(i) = swModelDoc2.SketchManager.CreateLine(50 / 1000, (80 + i) / 1000, 0#, 100 / 1000, (80 + i) / 1000, 0#) Call swModelDoc2.SetLineWidth(3) Next
Call swModelDoc2.SetAddToDB(False) swModelView.EnableGraphicsUpdate = True
End Sub
|
|
|
|
|
shamoji
Full メンバー
オフライン
投稿: 45
I'm a llama!
|
|
Re:線種の設定
« 返信 #4 投稿日: 2011/03/16 - 11:26:18 » |
|
Makoron様 ご回答有難うございます。
早速確認してみました。
swModelView.EnableGraphicsUpdate = False swModelView.EnableGraphicsUpdate = True
を書き加えてみたところ、かなり速くなりました。 一つずつ表示しなくするだけでこれほど変わるとは驚きました。 ビューの数が多い重たい組図などの時はかなりの効果がありました。
swModelDoc2.SetAddToDB は、自動拘束が必要なので今回はいじませんでした。
余談ですが、私はCallを省略してしまっておりますが、Callも記述した方が良いのでしょうか?
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:線種の設定
« 返信 #5 投稿日: 2011/03/16 - 17:00:54 » |
|
引用:余談ですが、私はCallを省略してしまっておりますが、Callも記述した方が良いのでしょうか? |
Callは記述しなくても問題ないです。 というより、ほとんどの人は記述しないと思います。
私がなぜCallを入れるかというと、 1.Callを入れない場合にメソッドと括弧の間にスペースが入ってしまい、他のメソッドと見た目が変わってしまう。 2.メソッドの戻り値を受け取りたくない場合にCallを使うことがあるので、その書き方と合わせるという意味もあります。
結局、見た目が気になってCallをつける癖がついただけです。
|
|
|
|
shamoji
Full メンバー
オフライン
投稿: 45
I'm a llama!
|
|
Re:線種の設定
« 返信 #6 投稿日: 2011/03/17 - 10:47:04 » |
|
Makoron様
ご回答有難うございます。
確かにCallを付けて()付の形にした方が見た感じ分かりやすいですね。
多少書ける様になってきたので、見やすさなどにも気を遣えるように頑張ってみます。
ありがとうございました。
|
|
|
|