インスタンスプロパティの自動作成

インスタンスプロパティの自動作成

masaya.sekido
Advocate Advocate
1,678件の閲覧回数
14件の返信
メッセージ1/15

インスタンスプロパティの自動作成

masaya.sekido
Advocate
Advocate

INVENTOR 2022より実装された機能があります

インスタンスプロパティ 

ですが

 

この機能を使って、条件に適合するすべてのオカレンス(主に購入品のセンサ、アクチュエータなど)が、どのような特性をもっているかの説明を自動入力して、3Dデータを見るだけで、制御担当などにわかるようにしようとしています。

 

以下は 名称 目的 とした例ですが、他にも型式などから自動識別した項目を追加。

 

Sub main
	
Dim oInvApp As Inventor.Application
 oInvApp = ThisApplication
Dim oDoc As Document
 oDoc = oInvApp.ActiveDocument

If oDoc.DocumentType <> DocumentTypeEnum.kAssemblyDocumentObject Then
 	MsgBox("このルールはアセンブリ以外では実行できません。",MsgBoxStyle.Exclamation,"ファイルエラー")
	Exit Sub
End If
 
Dim oAdoc As AssemblyDocument
 oAdoc = oInvApp.ActiveDocument
Dim oAcomDef As AssemblyComponentDefinition
 oAcomDef = oAdoc.ComponentDefinition
Dim oCo As ComponentOccurrence
Dim index As Integer=1

Dim strDocName As String
Dim instancePropSet As PropertySet
Dim instanceProp As [Property]

Try
	
	For Each oco In oAcomDef.Occurrences'オカレンス内
		 If oCo.Suppressed=False Then''省略でない場合のみ
			 If Strings.Left(oCo.Name, 2) = "9M"  Then
		       oCo.OccurrencePropertySetsEnabled = True
		 		instancePropSet = oCo.OccurrencePropertySets(1)
				instanceProp = instancePropSet.Add("", "01_名称")
				instanceProp = instancePropSet.Add("", "02_目的")
			 End If
	   	End If
		 index = index + 1
	Next

Catch ex As Exception
 MsgBox(ex.Message)
End Try

End Sub

消去はこの逆で oCo.OccurrencePropertySetsEnabled = Falseにするのみ

 

部品点数 数百点となっただけでも非常に時間がかかるのですが

iLogicで走らせると クルクルが出るのみで、終了時のメッセージを出すくらいしか

進捗がわかりません。

 

そのうちアドインなどにしたいのはありますが

とりあえずiLogic運用で高速化の方法などありませんかね。

 

0 件のいいね
解決済み
1,679件の閲覧回数
14件の返信
返信 (14)
メッセージ2/15

HideoYamada
Advisor
Advisor

高速化ではないですけど、

 


@masaya.sekido さんは書きました:

 

iLogicで走らせると クルクルが出るのみで、終了時のメッセージを出すくらいしか

進捗がわかりません。

iLogicでうまくいくか確認していませんが、StatusBarにメッセージを表示する方法はありますよ。

ダークテーマを使っているとInventorのバグによりほとんど読めないですが・・・

 

=====
Freeradical
 Hideo Yamada
https://www.freeradical.jp
メッセージ3/15

masaya.sekido
Advocate
Advocate

返信ありがとうございます。

ステータスバー出来るんですね・・。

iLogicだと モデルブラウザのオカレンスの名称の後ろにドットがはいるのも

見えなかったので(外部アプリからだと更新される様子が確認可能)できないかもしれないですね。

0 件のいいね
メッセージ4/15

HideoYamada
Advisor
Advisor
解決済み

やってみたところ、更新されました。

For i As Integer = 0 To 10000
	ThisApplication.StatusBarText = i
Next i

 ただし、先ほどの書込みの通りダークテーマでは非常に見難いです。

 

高速化の件は、見たところコードには無駄はなさそうですね。

試してみないと分からないですけど、アドイン化しても速くならないパターンかも。

 

=====
Freeradical
 Hideo Yamada
https://www.freeradical.jp
メッセージ5/15

masaya.sekido
Advocate
Advocate

ありがとうございました。まだ使ったことないですが、オカレンスのカウントなどで一度やってみます。

なるべくインスタンスプロパティを必要最小限に絞るようにして

処理時間も短くなるようにします。

0 件のいいね
メッセージ6/15

HideoYamada
Advisor
Advisor
解決済み

試してみました。1000オカレンスで30秒ぐらい。

頻繁に実行するわけではないだろうし、この程度なら許されるかなぁと思ったり。

 

空のPart1.iptをパターンで1000個に増やしました。

HideoYamada_0-1691642561336.png

 

テスト用にコードを少し触りました。

Option Explicit On

Sub Main
	Dim oInvApp As Inventor.Application = ThisApplication
	Dim oDoc As Document = oInvApp.ActiveEditDocument
	
	If oDoc.DocumentType <> DocumentTypeEnum.kAssemblyDocumentObject Then
	 	MsgBox("このルールはアセンブリ以外では実行できません。",MsgBoxStyle.Exclamation,"ファイルエラー")
		Exit Sub
	End If
	 
	Dim oAdoc As AssemblyDocument = oInvApp.ActiveDocument
	Dim oAcomDef As AssemblyComponentDefinition = oAdoc.ComponentDefinition
	Dim index As Integer = 0
	
	Dim strDocName As String
	Dim instancePropSet As PropertySet
	Dim instanceProp As [Property]
	
	Try
		For Each oCo As ComponentOccurrence In oAcomDef.Occurrences'オカレンス内
			index = index + 1
			If oCo.Suppressed Then Continue For
			'If Strings.Left(oCo.Name, 2) <> "9M" Then Continue For
			oCo.OccurrencePropertySetsEnabled = True
			instancePropSet = oCo.OccurrencePropertySets(1)
			instanceProp = instancePropSet.Add("名称" + index.ToString(), "01_名称")
			instanceProp = instancePropSet.Add("目的" + index.ToString(), "02_目的")
		Next oCo
	Catch ex As Exception
		MsgBox(ex.Message)
	End Try
End Sub

 

2024ですけど、テストしたデータセットを添付しておきます。

1000個に対してoCo.OccurrencePropertySetsEnabled = Falseするのに、

変更前がTrueだと30秒ぐらい、

変更前が既にFalseだと一瞬、

なので、AddIn化しても速くならないかもしれませんね。

 

=====
Freeradical
 Hideo Yamada
https://www.freeradical.jp
メッセージ7/15

masaya.sekido
Advocate
Advocate

奇麗にまとめられていますね。ありがとうございました。

 

 

0 件のいいね
メッセージ8/15

masaya.sekido
Advocate
Advocate

スミマセン ちなみに index という変数は 古いコード上のただのゴミです

0 件のいいね
メッセージ9/15

Octave.Lab
Advocate
Advocate

@masaya.sekido @HideoYamada 

 

  • プロパティ情報のRWは、ApprenticeServer のAPIを使うと高速です。
    インスタンスプロパティに対応しているかどうかは要調査。

Inventor Apprentice Sever API については、以下に説明があります。

Inventor Apprentice Sever APIリファレンスはどこに有りますか? 

 

  • プログラムの進捗状況をみるのは、iLogicのログメッセージを使います。
Logger.Debug("oCo.Name = {0}", oCo.Name)

をループ内に仕込んでおいて、iLogicエディタの下にあるログレベルを Debug にすると、iLogicタブにログが表示されます。この場合はオカレンスの名前が表示されます。この場合、1000件もあると画面が下に流れてしまうので、工夫した方が良いかもしれない。

-YO
Octave.Lab
https://note.com/yo420186 
メッセージ10/15

masaya.sekido
Advocate
Advocate

 ありがとうございます。アペレンティスは、非ライセンス保持者向けにサンプルをさらっと見ただけで

まだ勉強していないので今後見てみたいと思います。

Vault導入予定なのでThinclientが使えれば仕事上ではやらないかもしれません・・。

個人的には勉強してみます・・。

0 件のいいね
メッセージ11/15

HideoYamada
Advisor
Advisor

Apprentice試してみたけど、

occ.OccurrencePropertySetsEnabled = true;

で例外が出ました。

実装されていません (0x80004001 (E_NOTIMPL))

 残念・・・

 

=====
Freeradical
 Hideo Yamada
https://www.freeradical.jp
メッセージ12/15

Octave.Lab
Advocate
Advocate

@HideoYamada 


@HideoYamada さんは書きました:

Apprentice試してみたけど、

 

occ.OccurrencePropertySetsEnabled = true;

 

で例外が出ました。

 

実装されていません (0x80004001 (E_NOTIMPL))

 

 残念・・・

 


わざわざ確認ありがとうございます。残念。

後で、自分でも確認してみます。

-YO
Octave.Lab
https://note.com/yo420186 
0 件のいいね
メッセージ13/15

masaya.sekido
Advocate
Advocate

@HideoYamada @Octave.Lab 

色々と有難うございます。iPropertyは変えれても

変えれないんですね。iPropertyはコンテキストメニューからも変えれますからね・・。

そんな感じでしょうか。

 

一応書いときましたが おっしゃるとおりダークテーマの人は誰も気が付きません。(-_-;)

Dim remaining As Integer
Try
   remaining = oAcomDef.Occurrences.Count
	For Each oco In oAcomDef.Occurrences'オカレンスを全て
'------------省略

	remaining-=1
	ThisApplication.StatusBarText = remaining

 

0 件のいいね
メッセージ14/15

Octave.Lab
Advocate
Advocate

@HideoYamada 

やってみました。駄目ですね。調べると、

バーチャルコンポーネント等に対してocc.OccurrencePropertySetsEnabled = Trueを実行した場合、実行時エラーとなります。 https://www.autodesk.co.jp/support/technical/article/caas/tsarticles/ts/17k2x3QD6lP5oSkhLL2b9W.html

Apperenticeで開いたドキュメントはバーチャル扱いになるみたいですね。

-YO
Octave.Lab
https://note.com/yo420186 
メッセージ15/15

HideoYamada
Advisor
Advisor

へぇ~、Virtual Componentもダメですか。

Model Stateしかり、後付けの機能は色々と問題、矛盾があるというか、とにかく使うのに注意力を必要としますね。

 

=====
Freeradical
 Hideo Yamada
https://www.freeradical.jp