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

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









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

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: カスタムプロパティ取得 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: カスタムプロパティ取得  (閲覧数 5645 回)
ZAKRELLO
Jr. メンバー
**

オフライン

投稿: 12



I'm a llama!

プロファイルを見る
カスタムプロパティ取得
« 投稿日: 2010/02/09 - 12:57:58 »
引用して返信

こんにちは

図面ファイル(slddrw)のカスタムプロパティをAPIで取得したいのですが、うまくいきません。
SolidWorks Document Manager API でSwDMSheet::GetInvisibleCustomProperty
を利用すれば取得できるかと思ったのですが、まずSwDMSheetオブジェクトが取得できませんでした。

図面ファイルにはシートに対してカスタムプロパティがあって、このシートに対するプロパティを取得したいです。
別の手段(API)でカスタムプロパティを取得する方法などご存知の方おられましたら、
ご教授のほどよろしくお願いします。


-ちなみに上手くいかないコード-------------------------------------------------------
        Dim Classfac As SwDMClassFactory
        Dim swDocMgr As SwDMApplication
        Dim swDoc As SwDMDocument
        Dim swDoc4 As SwDMDocument4
        Dim swDoc10 As SwDMDocument10
        Dim nretval As Long

        ' Instantiate a SolidWorks Document Manager session.
        Classfac = CreateObject("SwDocumentMgr.SwDMClassFactory")
        swDocMgr = Classfac.GetApplication("Key")

        swDoc = swDocMgr.GetDocument(strPath, SwDmDocumentType.swDmDocumentDrawing, True, nretval) 

        'アクティブシート名の取得、シート数の取得
        swDoc4 = swDoc
        Dim strActiveSheetName As String = swDoc4.GetActiveSheetName() ' ← 正しく取得できる
        Dim nSheetCount As Integer = swDoc4.GetSheetCount  ' ← Sheet数は、正しく取得できる

        'シートの取得
        swDoc10 = swDoc
        Dim objSheets As Object = swDoc10.GetSheets()  ' ← ここで Nothing が返る
        For nIndex As Integer = 0 To nSheetCount - 1

            Dim swDMSheet As SwDMSheet
            swDMSheet = objSheets(nIndex)
            'アクティブシートに対するプロパティ取得
            If swDMSheet.Name = strActiveSheetName Then
                Dim nCusPropCount As Integer = swDMSheet.GetInvisibleCustomPropertyCount()
                Dim nCusPropNames As Object = swDMSheet.GetInvisibleCustomPropertyNames()

                For i As Integer = 0 To UBound(nCusPropNames)
                    Dim vPropName As String = nCusPropNames(i)
                    Dim vPropType As SwDocumentMgr.SwDmCustomInfoType
                    Dim vPropValue As String = swDMSheet.GetInvisibleCustomProperty(vPropName, vPropType)
                    Debug.Print("vPropName = " & vPropName & " vPropValue = " & vPropValue & " vPropType = " & vPropType)
                Next i

            End If
        Next nIndex
--------------------------------------------------------------------------

開発環境
VB.NET 2005
SolidWorks 2009 SP0.0
SolidWorks Enterprise PDM 9.0
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:カスタムプロパティ取得
« 返信 #1 投稿日: 2010/02/09 - 17:12:20 »
引用して返信

ZAKRELLOさん、こんにちは。

SolidWorks Document Manager APIのサンプルプログラムをダウンロードページにのっけてありますので、
そちらを参照してみてください。

あと、SW2008からSDM1.0ライブラリが使えない!?の情報なども参考にしてみてください。
議長に報告する   記録済み
ZAKRELLO
Jr. メンバー
**

オフライン

投稿: 12



I'm a llama!

プロファイルを見る
Re:カスタムプロパティ取得
« 返信 #2 投稿日: 2010/02/12 - 12:07:10 »
引用して返信

Makoronさん

いつもありがとうございます。返信遅くなりましてすいません。
サンプルプログラムは既に参考にさせていただいていました。
コンフィグレーションのカスタムプロパティの取得は未対応となっていました。

私の表現がよくなかったと思います。
やりたかったことは、PDMのカード情報を取得したいんです。
図面ファイル(slwdrw)だとシートごとにカードがあるので、
シートに対するカードのデータを取得したかったんです。

私の認識では、PDMのカードデータはカスタムプロパティのことで、
カスタムプロパティを取得するAPIでPDMカードデータが取得できると考えました
(サンプルプログラムを動かしたところカードで入力したデータが取得できていたので、)。
これが間違いなのかも知れません。

まだ、ちょっとやりたいことを実現できていません。調査/試行中です。
お忙しいところ対応いただき本当にありがとうございます。
またアドバイスがあったら、よろしくお願い致します。
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:カスタムプロパティ取得
« 返信 #3 投稿日: 2010/02/16 - 14:38:11 »
引用して返信

ZAKRELLOさん、こんにちは。


引用:
私の表現がよくなかったと思います。
やりたかったことは、PDMのカード情報を取得したいんです。
図面ファイル(slwdrw)だとシートごとにカードがあるので、
シートに対するカードのデータを取得したかったんです。

私の認識では、PDMのカードデータはカスタムプロパティのことで、
カスタムプロパティを取得するAPIでPDMカードデータが取得できると考えました
(サンプルプログラムを動かしたところカードで入力したデータが取得できていたので、)。
これが間違いなのかも知れません。

この内容については、多少違っているところがあります。

『SWのカスタムプロパティ』と『EntPDMのカード(変数)データ』は同じものではありません。
『SWのカスタムプロパティ』の値を『EntPDMの変数』にマッピングすることが出来て、
そのマッピングされた『EntPDMの変数』を『EntPDMのカード』に表示できる。
ということが正しい動作になります。
(まあ、このあたりもPDMの環境構築のしかたで変わってきますが・・・)

また、EntPDMで表示される図面のシート情報は、SolidWorksのカスタムプロパティでは管理されておらず、
EntPDMだけが持っている情報になります。
そのため、SolidWorks Document Manager APIではこの図面シートの情報を読み取ることが出来ません。

さらに、PDMボルト内に入っているSolidWorksファイルをプログラムなどで直接操作してしまうと、PDM動作に問題が出てしまう可能性もあります。
出来るだけ、PDMのAPIを使って操作できるものはそちらを利用したほうが良いと思います。
たとえば、チェックイン/チェックアウトや、ステータス、アクセス権なども考慮したカスタマイズも行うことが出来ます。

と、前置きが長くなりましたが、
EntPDMのAPIを使ったサンプル(情報を取得するためだけですが)を
Webmasterさんにダウンロードページに公開していただいたので、
そちらを参考に、EntPDMの情報を直接取得してみてはいかがでしょうか?

『EnterprisePDMExplorer 未完成版』
議長に報告する   記録済み
ZAKRELLO
Jr. メンバー
**

オフライン

投稿: 12



I'm a llama!

プロファイルを見る
Re:カスタムプロパティ取得
« 返信 #4 投稿日: 2010/02/26 - 13:36:21 »
引用して返信

Makoronさん

いつもお世話になっております。
このサイトを訪れるのがご無沙汰になっており、Makoronさんの回答を見れていませんでした。
その間、いろいろ調べたり試したりしているうちに、Makoronさんが説明してくれた認識にいたりました。

引用:

『SWのカスタムプロパティ』と『EntPDMのカード(変数)データ』は同じものではありません。
『SWのカスタムプロパティ』の値を『EntPDMの変数』にマッピングすることが出来て、
そのマッピングされた『EntPDMの変数』を『EntPDMのカード』に表示できる。


EntPDM APIを使って欲しい情報を手に入れられました。
Makoronさんのサンプルは私の環境(EntPDM 2008)では動きませんでした。が
サンプルコード参考にさせていただきます。

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