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

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









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

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: フィーチャーツリーの材料設定 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: フィーチャーツリーの材料設定  (閲覧数 5030 回)
pepper
新人さん
*

オフライン

投稿: 10



I'm a llama!

プロファイルを見る
フィーチャーツリーの材料設定
« 投稿日: 2008/09/03 - 09:19:14 »
引用して返信

いつもお世話になっております。

Excelで
・A1にパートファイル名
・A2に材料名
が入力されているシートがあるときに

A1セルのパートファイルを開いて、
A2セルと同じ名前の材料がフィーチャーツリーの材料にあった場合、
フィーチャーツリーでその材料を設定するマクロを
作りたいと考えています。

ファイルを開くことはできましたが、
セルの文字列と登録されている材料を比較して設定する方法が
わかりません。
どなたか分かる方がいらっしゃいましたらお知恵をお借し下さい。
よろしくお願いします。
議長に報告する   記録済み
hisa
カタマリの王様!?
*****

オフライン

投稿: 507



PANDA-Z!!

プロファイルを見る WWW
Re:フィーチャーツリーの材料設定
« 返信 #1 投稿日: 2008/09/03 - 10:04:43 »
引用して返信

お早う御座います、hisaです

材料取得及び設定は、

取得:MaterialName = PartDoc.GetMaterialPropertyName2 (ConfigName, Database)

設定:PartDoc.SetMaterialPropertyName2 (ConfigName, Database, MaterialName)

となります。

流れとしては、
1.GetMaterialPropertyName2でMaterialNameを取得
2.セルの材料名と比較
3.一致すれば、SetMaterialPropertyName2で設定
という具合かと思います。

上記のMaterialNameが材料名(例:炭素鋼(普通))です。
デフォルトのコンフィギュレーションの場合はConfigNameは空の文字列となります。
設定の場合のDataBaseは、デフォルトのSolidWorks材料(solidworks materials.sldmat)を
使用する場合、空の文字列でOKです。
そうでない場合は、材料データベースのフルパスを指定します。

詳しくはヘルプを参照してみて下さい
議長に報告する   記録済み
pepper
新人さん
*

オフライン

投稿: 10



I'm a llama!

プロファイルを見る
Re:フィーチャーツリーの材料設定
« 返信 #2 投稿日: 2008/09/03 - 18:39:19 »
引用して返信

hisa様

早速ご回答いただきありがとうございます。
ヘルプを参照して取り組んでみます。
議長に報告する   記録済み
pepper
新人さん
*

オフライン

投稿: 10



I'm a llama!

プロファイルを見る
Re:フィーチャーツリーの材料設定
« 返信 #3 投稿日: 2008/10/01 - 21:40:06 »
引用して返信

いつもお世話になっております。

先日、hisa様に材料取得及び設定の方法を教えていただきました。
その節はお世話になりました。

その後、ヘルプを参照しつつ取り組んで参りましたが、
フィーチャーツリー上の材料がうまく変わらずに悩んでおります。
どうにも解決策がわからないので、再度相談させていただければと思います。

症状は、サンプルのマクロを動かすと以下1〜4の状態になります。
そのため、そのまま上書き保存すると(そのようなマクロを加えると)、
材料は”材料<未指定>”で保存されます。
材料を変更して上書き保存するようにしたいのですが、どの様にすればよいのでしょうか。
不足の点等、ご指摘いただければ助かります。

---サンプルマクロ適用後の状態---
1.フィーチャーツリーでは材料が変わっておらず、”材料<未指定>”となっている。
2.”材料<未指定>”を右クリックして”材料編集”を選ぶと設定したかった材料(SS400)になっている。
3.なにもせずに”キャンセル”するとフィーチャーツリーの材料が「SS400」に変わっている。
4.”キャンセル”ではなく”OK”としてもフィーチャーツリーの材料が「SS400」に変わっている。

以下のサンプルはSolidWorks上でマクロを記録してすぐ停止し、
記述を3行加えただけのものです。
Dim myPart As PartDoc
Set myPart = Part
myPart.SetMaterialPropertyName2 "default", "material.sldmat", "SS400"

---サンプル---
-----------------------------------------------------------
Dim swApp As Object
Dim Part As Object
Dim myPart As PartDoc

Dim SelMgr As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim Feature As Object
Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set myPart = Part
Set SelMgr = Part.SelectionManager
swApp.ActiveDoc.ActiveView.FrameState = 1

myPart.SetMaterialPropertyName2 "default", "material.sldmat", "SS400"

End Sub
-----------------------------------------------------------

よろしくお願いします。
議長に報告する   記録済み
pepper
新人さん
*

オフライン

投稿: 10



I'm a llama!

プロファイルを見る
Re:フィーチャーツリーの材料設定
« 返信 #4 投稿日: 2008/10/01 - 21:56:39 »
引用して返信

追加ですみません。

材料データベースについてですが、
SetMaterialPropertyName2で指定するDatabaseは
システムオプションであらかじめパスを設定しておかなければいけないようなのですが、
このシステムオプションをマクロで設定することはできるのでしょうか。
たしかオプションはsendkeyの方法でないと操作できなかったと記憶しています。

設定:PartDoc.SetMaterialPropertyName2 (ConfigName, Database, MaterialName)

どなたかわかる方がいらっしゃればご教授いただきたくお願い申し上げます。
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:フィーチャーツリーの材料設定
« 返信 #5 投稿日: 2008/10/02 - 09:11:07 »
引用して返信

Makoronです。

少し調べてみました。
pepperさんのサンプルでテストすると同じ結果になりましたが、
myPart.SetMaterialPropertyName2 "default", "material.sldmat", "SS400"
の "default" を "デフォルト"又は""(Null)にしてあげると、上手くいきました。

他のメソッドでも、コンフィギュレーションの値をNULLにすると、アクティブなコンフィギュレーションに対して行うと言うような動きをする物があります。

今回のpepperさんのマクロでも、"デフォルト"のようにコンフィギュレーション名を指定するより、NULLを指定した方が良いかもしれませんね。

もし、複数のコンフィギュレーションに対応したい場合であれば、先にコンフィギュレーション名を指定する処理を入れるといいと思います。
議長に報告する   記録済み
pepper
新人さん
*

オフライン

投稿: 10



I'm a llama!

プロファイルを見る
Re:フィーチャーツリーの材料設定
« 返信 #6 投稿日: 2008/10/02 - 09:42:25 »
引用して返信

Makaron様ありがとうございます。

おかげさまで材料変更できました!
ありがとうございます。涙が出そうです。。。

冷静になって改めて読むと、
hisa様の返信にも同様のことが書いてありました。
申し訳ありません。
>デフォルトのコンフィギュレーションの場合はConfigNameは空の文字列となります。

ヘルプのExampleに"default"と記述されており、
その通りに記述してできなかったので、頭が凝り固まっていました。
本当にありがとうございます。
議長に報告する   記録済み
hisa
カタマリの王様!?
*****

オフライン

投稿: 507



PANDA-Z!!

プロファイルを見る WWW
Re:フィーチャーツリーの材料設定
« 返信 #7 投稿日: 2008/10/02 - 12:01:54 »
引用して返信

hisaです

じっくり読み返していたら、ミス回答が…

引用:
A1セルのパートファイルを開いて、
A2セルと同じ名前の材料がフィーチャーツリーの材料にあった場合、
フィーチャーツリーでその材料を設定するマクロを
作りたいと考えています。


よく考えたら、材料データベース内でマッチした材料が見つかったら材料を設定するということですよね。

引用:
1.GetMaterialPropertyName2でMaterialNameを取得
2.セルの材料名と比較
3.一致すれば、SetMaterialPropertyName2で設定
という具合かと思います。


1.でパートから材料名取得って…割り当てられていないのに比較してマッチしたら設定とか、
意味不明でしたね

解決しているかもしれませんが、材料データベースの材料名取得に関して以下に示します。

Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim swMtrlDBPath As Variant
    Dim xDoc As New DOMDocument
    Dim xElmnt As IXMLDOMElement
    Dim xNode As IXMLDOMNodeList
    Dim xChldnode As IXMLDOMNodeList
    Dim xAttribute As IXMLDOMAttribute
    Dim node As IXMLDOMNode
    Dim i, j As Integer
   
    Set swApp = Application.SldWorks
   
    swMtrlDBPath = swApp.GetMaterialDatabases

    'sldmat(XML)読み込み
    xDoc.async = False
    xDoc.Load (swMtrlDBPath(0)) '例としてデータベースの1番目(Index0)を読み込み
   
    '要素取り出し
    Set xElmnt = xDoc.documentElement

    'トップノード取り出し
    Set xNode = xElmnt.childNodes

    '子のノード巡回
    For i = 0 To xNode.Length - 1
        Set xChldnode = xNode.Item(i).childNodes
        Debug.Print xNode.Item(i).Attributes(0).Text
        For j = 0 To xChldnode.Length - 1
            Set node = xChldnode.Item(j)
            If node.nodeName = "material" Then
                Set xAttribute = node.Attributes(0)  '材料名は1番目の属性なのでIndex0指定
                Debug.Print "  " & node.nodeName & " = " & xAttribute.Value 'Valueの値を比較対象とすれば良い
            End If
        Next j
    Next i
   
End Sub

材料データベースはXML形式で書かれているので、XMLとして読み込んで値を取り出します。
(結果はDebug.printで出力しています)
xAttribute.Valueの値を、Excelのセルと比較すればpepperさんのやりたいことは出来るのではと思います

<注意>
XML関連のオブジェクトを扱うには、参照設定で"Microsoft XML, vX.X"を参照する必要があります。

ご参考まで。

<12:22 追記>

引用:
デフォルトのコンフィギュレーションの場合はConfigNameは空の文字列となります。

実はこれもミス回答…
厳密には、Makoronさんの仰るとおりアクティブなコンフィギュレーションです

更に更に、

引用:
システムオプションをマクロで設定することはできるのでしょうか。

については、
SldWorks.SetUserPreference〜Value (〜は、設定する値によってそれぞれ)で設定できます。
材料データベースのパス設定を例に挙げれば、
SldWorks.SetUserPreferenceStringValue swFileLocationsMaterialDatabases, DataBase名
となります。
議長に報告する   記録済み
pepper
新人さん
*

オフライン

投稿: 10



I'm a llama!

プロファイルを見る
Re:フィーチャーツリーの材料設定
« 返信 #8 投稿日: 2008/10/02 - 21:32:51 »
引用して返信

hisa様ありがとうございます。

XMLの読み込みは高度ですね。勉強します。
私は単純にExcelシートにXMLを読み込んで
文字列を比較していました。

また、システムオプションの設定についても
現在のデータベース名を取得して
指定のデータベースがなかったら、
設定するようにしたいと考えています。

ありがとうございました。
議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: フィーチャーツリーの材料設定 前のトピック 次のトピック
ジャンプします: