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

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









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

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: 図面シートフォーマット名の取得 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: 図面シートフォーマット名の取得  (閲覧数 7380 回)
rabby
新人さん
*

オフライン

投稿: 5





プロファイルを見る
図面シートフォーマット名の取得
« 投稿日: 2004/08/04 - 20:38:28 »
引用して返信

いつも拝見させていただいております。
初めての書き込みさせていただきます。

当方、図面テンプレートのシートフォーマットに
選択した注記を書き込むプログラムを作っております。
図面のシートフォーマットにはパーツやアセンブリからのプロパティリンクが張られているので、
一般ユーザーにはシートフォーマット編集をさせない為に、このようなプログラムを作っています。

基本的な動作は、
選択した文字を図面の決められた場所に決められた注記名で書き込みます。
また、書き込んだ注記を注記名をもとに選択し修正・削除するプログラムです。

書き込みは問題無いのですが、
修正・削除の場合、目的の注記を選択する為にSelectByIDを使用しているのですが、
オブジェクト名で必要な現在アクティブなシートのシートフォマット名が取得できずに困っています。
シートがデフォルトで用意されるものしか使用しなければ、
"シート フォーマット1"で良いのですが複数になった場合に対応できません。
どなたか図面のシートフォマット名を取得する方法をご存知ではないでしょうか?
よろしくお願いします。
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:図面シートフォーマット名の取得
« 返信 #1 投稿日: 2004/08/05 - 08:36:15 »
引用して返信

rabbyさん、はじめまして。

こんな感じでどうでしょうか?
 Sample.lzh
議長に報告する   記録済み
rabby
新人さん
*

オフライン

投稿: 5





プロファイルを見る
Re:図面シートフォーマット名の取得
« 返信 #2 投稿日: 2004/08/05 - 14:32:06 »
引用して返信

Makaronさん、サンプルありがとうございます。

早速サンプル拝見させていただきました。
せっかく時間をさいて作っていただいたのですが、
私の説明がわかりにくかった為、誤解を招いてしまったみたいです。
申し訳ございません。

つまづいている部分を具体的に申しますと、
書き込まれた注記を選択する際、
DrawingDoc.Extension.SelectByID "Note@シート フォーマット1", "NOTE", 0, 0, 0, False, 0, Nothing)
としています。
上の例で"Note@シート フォーマット1"の「@」前は、名前を付けて書き込んでいるので問題無く指定できます。
問題は「@」以下で、図面シートに書き込まれた注記であれば
DrawingDoc.GetSheetNames或いは、Sheet.GetNameで取得出来ると思います。
しかし、今回のように図面テンプレートに書き込まれた注記の場合の取得に困っています。
またまたわかりにくい説明ですが、よろしくお願いします。

それと、使用バージョンを明記していなかったので追記しておきます。
SW2003 SP5
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:図面シートフォーマット名の取得
« 返信 #3 投稿日: 2004/08/05 - 15:50:17 »
引用して返信

'
引用元: rabby 投稿日 '.timeformat('1091683926').'   
'
しかし、今回のように図面テンプレートに書き込まれた注記の場合の取得に困っています。

ここで書かれている 『図面テンプレート』とは、SolidWorksで言う図面のテンプレート(drwdot)ファイルのことですか?
もし、そうだとしたら、なぜdrwdotを直接開いて処理するのでしょうか?
通常の図面を指定保存でdrwdotにしてしまえば、OKな様な気がします。

もう一つ確認させてください。
  通常の図面(slddrw)の『図面シート』と『シートフォーマット』はOK。
  テンプレート(drwdot)の『図面シート』はOK、『シートフォーマット』はNG。
ということでしょうか?

すみません、質問を質問で返してますが、どうでしょうか?
議長に報告する   記録済み
rabby
新人さん
*

オフライン

投稿: 5





プロファイルを見る
Re:図面シートフォーマット名の取得
« 返信 #4 投稿日: 2004/08/05 - 17:14:41 »
引用して返信

なかなかうまく説明できないですねー。

'
引用元: Makoron 投稿日 '.timeformat('1091688617').'   
'
ここで書かれている 『図面テンプレート』とは、SolidWorksで言う図面のテンプレート(drwdot)ファイルのことですか?


図面ファイル(*.slddrw)を開いて、右クリックの「シートフォーマット編集」を選んだ状態です。
APIヘルプで「図面テンプレート」と表現されていたのでこのように書きました。
最初の書き込みと表現を変えてしまった為、さらに混乱させてしまったようです。申し訳ありません。

やりたいことは、
「シートフォーマット編集状態で(図面テンプレートに)書き込まれた注記をプログラムから選択したい」
ということです。


引用:

もう一つ確認させてください。
  通常の図面(slddrw)の『図面シート』と『シートフォーマット』はOK。
  テンプレート(drwdot)の『図面シート』はOK、『シートフォーマット』はNG。
ということでしょうか?


通常の図面、テンプレートともに、『シートフォーマット』はNGです。
テンプレート(*.drwdot)を直接開いて処理する作業はありませんので、
通常の図面(*.slddrw)を開いての作業だけを前提としています。


引用:

すみません、質問を質問で返してますが、どうでしょうか?


いえいえ、私の説明がわかりにくくお手数をかけてしまってスミマセン。
こんな感じでわかりますでしょうか?
まだ、わかりにくい点がありましたらどんどん突っ込んでください。

参考にJpgを添付します。
取得したいのは赤丸をつけた部分です。
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:図面シートフォーマット名の取得
« 返信 #5 投稿日: 2004/08/05 - 17:43:42 »
引用して返信

もしかして、DrawingDoc::EditTemplateが抜けているのではないでしょうか。

私が使用しているのはSolidWorks2004sp4.1なので正確かどうかわかりませんが、
図面を作成し、図面シートとシートフォーマットに注記を作成して、マクロの記録を行ってみました。
  (1)図面シート上の注記を選択
  (2)シートフォーマット編集に入る
  (3)シートフォーマット上の注記を選択
の手順で記録しました。

以下がそのマクロです。(不要な部分は消してあります。)
Sub main()
    Dim swApp As Object
    Dim Part As Object
   
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
   
    '(1)図面シート上の注記を選択
    boolstatus = Part.Extension.SelectByID("詳細アイテム195@シート1", "NOTE", 0, 0, 0, False, 0, Nothing)
    '(2)シートフォーマット編集に入る
    Part.EditTemplate
    '(3)シートフォーマット上の注記を選択
    boolstatus = Part.Extension.SelectByID("詳細アイテム196@シート フォーマット1", "NOTE", 0, 0, 0, False, 0, Nothing)
    '(図面シート編集に戻る)
    Part.EditSheet
End Sub


この部分が原因であれば良いのですが...
どうでしょうか?
議長に報告する   記録済み
rabby
新人さん
*

オフライン

投稿: 5





プロファイルを見る
Re:図面シートフォーマット名の取得
« 返信 #6 投稿日: 2004/08/05 - 18:47:01 »
引用して返信

'
引用元: Makoron 投稿日 '.timeformat('1091695422').'   
'
boolstatus = Part.Extension.SelectByID("詳細アイテム196@シート フォーマット1", "NOTE", 0, 0, 0, False, 0, Nothing)


この部分で困っています。
プログラムから選択する場合、「詳細アイテム196@シート フォーマット1」の「シート フォーマット1」が指定できないでいます。
現在アクティブなシートのシートフォーマット名(?)が取得出来ていない状況です。

例えば、
===(省略)===
Part.EditTemplate
set sheet=Part.GetCurrentSheet()
strName=sheet.GetName ()
==========

こんな風にしても、返ってくるのは「シート1」とかの普通のシート名ですし…。(当然ですね)
ちなみに、オブジェクト名("詳細アイテム196@シート フォーマット1"の部分)を正しく指定していれば、
図面シート編集中でも図面シートフォーマットのオブジェクトを選択できるようです。
こんな状況なんですが、何か良い方法はないものでしょうか?
議長に報告する   記録済み
webmaster
管理人
議長
カタマリの王様!?
*****

オフライン

投稿: 649





プロファイルを見る WWW メールアドレス
Re:図面シートフォーマット名の取得
« 返信 #7 投稿日: 2004/08/05 - 19:43:22 »
引用して返信

ものすごく力技ですが、こんな方法はどうでしょう。

注記の挿入は問題なくできているようですから、挿入するときに直接文字列を入れずに、図面のカスタムプロパティのリンクを入れて、プロパティに表示させたい文字列を入力します。

これで変更したいときはそのカスタムプロパティを変更するだけですみます。
削除はわかりません。
議長に報告する   記録済み

webmaster (仕事のカタマリ管理人)
Tama
Jr. メンバー
**

オフライン

投稿: 12



I'm a llama!

プロファイルを見る
Re:図面シートフォーマット名の取得
« 返信 #8 投稿日: 2004/08/05 - 22:55:59 »
引用して返信

こんばんは〜、Tamaです。

アクティブなシートのシートフォーマットがわかればいいのですよね?

私のSW API虎の巻(むか〜し作った書類です)によると、シートのサブフィーチャーにシートフォーマットがあるからその名前を調べればよい、とあります。

サブフィーチャーをループして調べるときに、サブフィーチャーのTypeNameが"DrTemplate"かどうかで判断します。
(シートフォーマットフィーチャーのTypeNameが"DrTemplate"です)

SW2001の頃調べたので最近のバージョンでは動作しないかもしれません。
そのときはごめんなさい。
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:図面シートフォーマット名の取得
« 返信 #9 投稿日: 2004/08/06 - 10:11:18 »
引用して返信

rabbyさん、こんにちわ。

私は、このシートフォーマット名にの取得に断念してしまいました。
(Tamaさんの方法でうまくいくと良いですね。)

で、別の方法を考えてみました。
『DrawingDoc.Extension.SelectByID "Note@シート フォーマット1", "NOTE", 0, 0, 0, False, 0, Nothing)』
(retval = ModelDocExtension.SelectByID ( Name, Type, X, Y, Z, Append, Mark, Callout ))
で注記を選択しに行くことが出来るということは、
「Nameが確定している」か「X,Y,Zが確定している」のどちらかだと思います。

そこで、以下のコードで代用できないかと思って作ってみました。
Sub main()
    Dim swApp          As SldWorks.SldWorks
    Dim swModelDoc2    As SldWorks.ModelDoc2
    Dim swDrawingDoc    As SldWorks.DrawingDoc
    Dim swView          As SldWorks.View
    Dim swNote          As SldWorks.note
    Dim vntPoint        As Variant
    Dim strMsg          As String
   
    '***** 図面オブジェクトを取得 *****
    Set swApp = Application.SldWorks
    Set swModelDoc2 = swApp.ActiveDoc
    Set swDrawingDoc = swModelDoc2
   
    '***** ビューオブジェクトの取得 *****
    Set swView = swDrawingDoc.GetFirstView()
   
    '***** シート&シートフォーマット上の注記を取得 *****
    Set swNote = swView.GetFirstNote
   
    '***** シート&シートフォーマット上の注記がなくなるまでループ *****
    Do While Not swNote Is Nothing
        '***** 注記の内容を表示 *****
        vntPoint = swNote.GetTextPoint
        strMsg = ""
        strMsg = strMsg & "Name    =" & swNote.GetName & vbCrLf
        strMsg = strMsg & "Text    =" & swNote.GetText & vbCrLf
        strMsg = strMsg & "TagName  =" & swNote.TagName & vbCrLf
        strMsg = strMsg & "TextPoint=" & vntPoint(0) & "," & vntPoint(1) & "," & vntPoint(2)
        MsgBox strMsg
        '***** 注記を操作 *****
        swNote.SetText "文字追加" & swNote.GetText
        swNote.SetText swNote.GetText & "文字追加"
        swNote.SetText Replace(swNote.GetText, "文字追加", "置き換え")
        swNote.SetText Replace(swNote.GetText, "置き換え", "")
        '***** 次の注記を取得 *****
        Set swNote = swNote.GetNext
    Loop
End Sub

これに、「Name」か「X,Y,Z」のIF文を追加して、Noteオブジェクトを特定してから編集や削除が行えると思います。






議長に報告する   記録済み
rabby
新人さん
*

オフライン

投稿: 5





プロファイルを見る
Re:図面シートフォーマット名の取得
« 返信 #10 投稿日: 2004/08/06 - 15:36:34 »
引用して返信

管理人さん、Tamaさん、Makoronさんこんにちは。
皆様の意見を参考に色々試してみました。

管理人さん>
最初はカスタムプロパティに書き込むことも考えました。
しかし、書き込む文字は決められた枠内に収めなければならず、時には複数行になることもあり、
そのときはカスタムプロパティは一行しか表現できないと思い込んでおり断念していました。
今改めて試してみると、SolidWorksからプロパティウィンドウを開いて
書き込む場合は複数行書けなさそうですが、プログラムからCustominfo2で書き込めば複数行書ける事を確認しました。
削除の場合は、とりあえず空白文字でも入ておけば実用できそうですね。

Tamaさん>
私もツリー表示されているので、サブフィーチャーを調べて
Feature.Nameで取得できないか試してみたことがありました。
例えば、表示されているツリーが

Draw1
 ├アノテートアイテム
 ├ブロック登録
 └モデル
   └シートフォーマット1

の場合、
「モデル」の最初の子フィーチャーの名前を取得すると「平面1」となってしまい、
てっきりパートモデルの子フィーチャーを見に行っているものと勘違いしてあきらめていました。
今回、同列の子フィーチャー全てを調べてみたら最後のフィーチャーで「シートフォーマット1」を取得できました。
今から考えると、今一歩だったんですね。
しかし、他のフィーチャー「平面1」、「スケッチ1」、「詳細フォルダー1」は何でしょうね。

Makoronさん>
はっ!
注記は必ず決められた場所に書き込まれるので、座標からオブジェクトの取得は出来きますね。
「灯台下暗し」でした。


このように、皆様のおかげで無事解決できました。
どうもありがとうございました。
解決できたところか、2つもお土産をいただいてしまって…。感謝です。
これからどの方法を使おうか、また悩んでしまいそうです。

最後に、今更ながらですが途中の書き込みで、添付し忘れていましたね。スミマセン。
議長に報告する   記録済み
Tama
Jr. メンバー
**

オフライン

投稿: 12



I'm a llama!

プロファイルを見る
Re:図面シートフォーマット名の取得
« 返信 #11 投稿日: 2004/08/06 - 22:48:02 »
引用して返信

うまく動いたようで、よかったです。
私も、SolidWorks 2003,2004で試してシートフォーマット名が取れるのがわかったので安心しました。

「平面1」、「スケッチ1」などのフィーチャーはSolidWorksの3Dと2Dの動作を同じ処理で実現するためのつじつま合わせのためにあるのではないかと思います。APIを触られているとわかると思いますが、モデルでのスケッチと図面でのスケッチは同じものですし、図面ビューはモデルの特定の表示方向を投影することで実現しているようにみえます。通常は図面で平面やスケッチが見えていても仕方がないので隠してあるのだと想像します。


もうひとつの方法のことですけど、図面で注記を座標を元に選択しようとすると、図面が全体表示されているようなときは選択に失敗することがあります。実はこれでかなり困った経験があります。

注記の名前かタグ名をたとえば"NOTE_MATERIAL"のように変更しておけば、どのサイズの図面でも同じ処理で動かせるようになりますよ。
議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: 図面シートフォーマット名の取得 前のトピック 次のトピック
ジャンプします: