トップページ⇒tech
53コメント28KB

ObjectARX スレ

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
aotodesk の AutoCAD 2000i や AutoCAD LT 2000i を
ObjectARX でカスタマイズしている人向けのスレ

作ってみました。 ;-)
0003デフォルトの名無しさんNGNG
いや、もう少し続けよう。
まだこんな明るいうちは、出てこんよ。
0004デフォルトの名無しさんNGNG
マニアックだなあ。。

とりあえず、ObjectARXの仕様は本があるけれど、設計には皆さん
どんな表現方法使います?
UMLとか使ったりする?
0005PeFileWrapperNGNG
>>1
R15 はいいとして、LTR7 を ARX でカスタマイズしてるヤツなんて、
何人くらいいるんだろう。たぶん、世界中で 100 人以下。

しかしそいつらは、ただある種のツールを利用しているだけ。
すなわち、LT に ARX をロードさせるツールだ。

じゃあ、LT に ARX をロードさせることができるヤツとなると、
これはもう、並のハッカーでは無理。

何を隠そう、実は漏れがそのひとりなんだけどね。(藁
00062NGNG
ん?以外と需要のあるスレなのか?
0007デフォルトの名無しさんNGNG
>>5
ttp://www.codeproject.com/dll/hookimport.asp
こんな感じの DLL 作ってアレコレしないといけないんだろうなぁ。
漏れはそういったツール使うからいいや (w
0008デフォルトの名無しさんNGNG
>>4
> とりあえず、ObjectARXの仕様は本があるけれど、設計には皆さん
> どんな表現方法使います?
> UMLとか使ったりする?

設計なんて上司のインスピレーションで決まるんだ!!
設計なんて上司のメモ書きで決まるんだ!!
設計なんて上司が完成品見た瞬間意味が無くなるんだ!!

鬱だ氏のう
0009デフォルトの名無しさんNGNG
とりあえず質問させてもらいます。

モードレスダイアログなどであるボタンが押されると、AcDbDatabase を
new して、その後 AcDbDatabase::loadDwgFile() で DWG ファイルを
読み込みます。この new された AcDbDatabase は別のボタンが押されるか、
モードレスダイアログが Destroy されるまで delete しないものとします。

AcDbDatabase を new するときにアクティブだったドキュメントを
その new した AcDbDatabase を delete する前にクローズしたりすると
AutoCAD が落ちてしまうことがあるのですが、なにか不味いのでしょうか?
0010PeFileWrapperNGNG
>>7
LTR6 だと大丈夫だが、LTR7 だと、やりすぎると時限爆弾がセットされる。

名前はあえて伏せておくが、
「某有名 Delphi で LT のカスタマイズができる国産ツール」
の初期のバージョンは、それに引っかかったんじゃないかと思う。
(別の理由かも知れんが)

あからさまにやってたからな。
0011PeFileWrapperNGNG
>>9
AcApDocument を持たない AcDbDatabase をビシバシ扱うのは、まだ難しいと思う。
ちゃんと扱おうとすると、非公開のクラスを使わなければならない。
たぶん AcDbHostApplicationServices 方面が吉。

ターゲットが別の箇所だったので、実は漏れも詳細は知らない。

DBX のホストアプリケーションを作るためのライセンスを持っていたら、
その情報が得られるはずだ。ただしライセンス料は目玉が飛び出るほどという。
ハクれなくもないとは思うが、かなり時間がかかるだろう。

となると、こういうところで聞くしかないが、はっきりと答えられるヤツなど、
ほとんどいないだろうな。

なにせ世の中には「AutoCAD のカスタマイズ = Lisp が常識」という連中が多い。
彼らにとって AcApDocument の存在しない世界などあり得ないし、
ARX を作ってたって、所詮、SDIの頭(R14 な頭)でしかないヤツが多いから、
MDI でかつドキュメントがないデータベースなんて、
たとえ大通りで質問しても無駄かも知れない。(→ http://www.mura.sh/ )

すまんな。
0012デフォルトの名無しさんNGNG
作図系のARXよく見かけるが、ADTみたいにオブジェクト間の関連を定義してゴリゴリ
やってるデベロッパはいるのかな?
VBAに比べるとあまりにも情報が少ないもので。。。
4の言う通り、そうなるとUMLとか魅力的になってくるのだけれど。
0013でふぉるとノ名無シサンNGNG
>>12
あまり聞かないですね。
一度、どっかの掲示板でDBXの作り方を聞いていた人がいましたが
それ以外は聞かないです。
0014デフォルトの名無しさんNGNG
やっぱりCAD屋用の仕様なのかもな〜。
オブジェクト指向と言った所で、AutoCADのオブジェクト?と返されそ。
0015デフォルトの名無しさんNGNG
>>14
あっ、ゴメン。漏れも勘違いしてたかも。
AcDbEntity からの派生クラス方面のことかと思ってた。
> ADTみたいにオブジェクト間の関連を定義して
0016デフォルトの名無しさんNGNG
ここ、ちょこっと、借りるわ。

とあるスレで SPY++ の面白さを聞かれたんだけど、内容がスレ違いなので、
こっちに書かせてもらう。
実は AutoCAD LT 2000 のカスタマイズに関してなんだ。

このスレに来るヤツは知ってることだと思うが、
レギュラー版はカスタマイズできるが、値段が高い。
LT 版は値段は安いが、カスタマイズできない。
いや正確に言うと、カスタマイズ機能が塞がれている。

漏れはこいつをカスタマイズできるように、つい最近、ひん剥いて調教した。

このとき、いろんなツールを自分で作ってひん剥いたが、
既存のツールも利用した。そのひとつが SPY++ だ。

こういうツールを使えば、外側からではわからないことでも、
内側の動きを察知することができる。

他にも APIMON というのもある。こいつはもっとシゲキ的に「ググッ」とくる。

でもこういうツールを使えばいつでも「グフフ」ってなれるわけじゃない。
おまえだって、女なら誰でも立つってわけじゃあ、ないだろ?
「グフフ」な相手がいて、はじめて値打ちがある。

…と、まあこんな話を書こうと思ったが、スレ違いなので、
こちらに書かせてもらったというワケ。

あいつ、このスレ、わかるかなぁ...。
0017デフォルトの名無しさんNGNG
>>15
>AcDbEntity からの派生クラス方面のことかと思ってた。

まさにそれ。
ADT持ってないのでどういうオブジェクトモデルなのかは解らないけど、
ドアは自分がくっつく壁のインスタンスを保持する、みたいなことやってる
んでしょう?IFCの言うオブジェクト指向CADって奴。
そういうモデリングやってる人に聞いてみたかったんだ。
0018デフォルトの名無しさんNGNG
>>17
ってことは、Object DBX のサブセット方面って事ですね。

MDT とか ADT とかの autodesk の上位製品群は、
カスタムオブジェクトの実体である .dbx と、その UI となる .arx を
うまくつかっていますね。

操作用の .arx が無ければカスタムオブジェクトはどうにもならないから、
図面をいじりたければ MDT なり ADT を買わないとイケナイ。
見るだけなら Object Enabler で Volo View でもみれるようになってるし。

やっぱ、これからの商売はこういった開発スタイルでいかないとダメなんだろうかなぁ
0019デフォルトの名無しさんNGNG
>>17
あっ、なるほど。それでよかったのか。

> ドアは自分がくっつく壁のインスタンスを保持する、みたいなことやってる
> んでしょう?IFCの言うオブジェクト指向CADって奴。
ふぅ〜ん、そゆこと、やってるんだ...。

てことは、たとえばその壁だけ勝手に AcDbEntity::erase() なんてしちゃあ、
逝っちゃうの?
0020デフォルトの名無しさんNGNG
>>18
確かにひとつの方向かもしれない。

でも MDT のカスタムオブジェクトが埋め込まれている AcDbDatabase は、
AcApDocument と関連づけられていない状態では、なんか落ちやすい。
>>9
も、そこに原因があるんじゃないかと睨んでる。

...なんか、あやしい。 →MDT のカスタムオブジェクト
0021デフォルトの名無しさんNGNG
CAD上でこの手の開発すると結果が視覚的ではあるけれど、基本的には
いわゆるオブジェクト指向分析・設計だよね。
CADで扱う領域をこの手の概念で考えることはよくあるが、やってみると
本当に時間と手間がかかる。
やっぱさ、ADTとかMDTは良くやってるよ。さすがに。
>>19の言う通り、膨大なエラ−トラップが必要だし。。。
でも、面白いんだよね、こういうの。
今はObjectARX自体マイナ−だから、色々な意見あるとは思うのだけど。
0022デフォルトの名無しさんNGNG
>>21
ふむ。確かに使う側からすると面白そう。…ARX(DBX) は大変そう。 -_-;

でもオブジェクト指向の分析と設計っていっても、
CAD で扱う分野すべてにそのまま適応できるわけではないよね。

建築系や機械系の CAD は実世界の「オブジェクト」を扱うわけだから、
当然、そのような考え方は自然にできる。

でも電気回路(など)の CAD で扱うものは、実世界のオブジェクトとは
必ずしも一致しない。実は漏れが作っているアドオンも電気回路なんだ。

たとえば回路図上では「コイル」や「接点」という全く異なるものに分かれていても、
器具配置図面上ではひとつのオブジェクト(=リレー)だし。

また電気回路ではひとつの物件が数十枚から数百枚の図面(DWG)からできているから、
コイルのある図面と接点のある図面は、ほぼ間違いなく、違う図面(=異なる DWG)
に存在してる。

つまり、たとえば「壁」と「ドア」が異なる DWG に存在しているみたいなもんだ。
21 のいうようなエラートラップが容易ではないことは察しがつくと思う。

だから実世界の「オブジェクト」というフレームワークで捉えるのは、
そのままではちょっと(かなり?)無理があると思う。
0023デフォルトの名無しさんNGNG
>たとえば回路図上では「コイル」や「接点」という全く異なるものに分かれていても、
>器具配置図面上ではひとつのオブジェクト(=リレー)だし。

完璧に門外漢だし話題も読めてないんですが
これ読んで「それは集約やProxyを使う場面なんじゃないか?」と
思ったのは間違いですか?
0024デフォルトの名無しさんNGNG
そういう突っ込みに対して、強く出られるほど理想的な設計とかし難いのが
泣き所かも知れないね。
土建屋なんて特に多いけれど、教科書どおりに事が進められることはまずない。
むしろ”なんでやねん”的不条理の方が多い気がする。
そういう”定常的なレアケ−ス(?)”に対してのパフォ−マンスを考慮しないと、
現実世界では運用できない”堅物”モデルができてしまう。
いわゆる業務(業界?)知識ってやつだね。
だからこそエラ−トラップが大変なんだと思うけど。。。。
人間の思い付きに対して論理もクソもないからね。
0025デフォルトの名無しさんNGNG
回路のことはよく分からんが、集約って概念モデリングには便利なんだよね。
でも、結構クセものと思う。現実世界と混同しやすいんじゃないかと思うんだ。
むしろ、”リレ−”オブジェクトの責務として扱う方が素直かもしれない。
オブジェクト指向ってオブジェクトが主役というより、オブジェクトの持つ
責務こそが肝だと思うから。。。
0026名無しさんNGNG
age
0027名無しさんNGNG
age
0028名無しさんNGNG
age
0029名無しさんNGNG
age
0030名無しさんNGNG
age
0031デフォルトの名無しさんNGNG
>>25 >むしろ、”リレ−”オブジェクトの責務として扱う方が素直かもしれない。
確かにそういう考え方もあると思う。

しかし実世界の「リレー」という一個の部品は、
回路図面では複数の DWG に同時に分散して存在してる。

すなわち、通常、リレーにはコイルが 1 つと、接点が複数個ある。
それらが異なる DWG に別々に描かれるんだ。

だから実世界の「リレー」を、電気回路図上で、
ひとつのカスタムオブジェクトとして実装することは不可能だと思う。

「コイル」と「接点」を別々のカスタムオブジェクトとして実装することなら
可能だと思うけど、これらは通常、異なる DWG に分散してるので、
エラー処理はとても厄介だ。
「壁」と「ドア」のときみたいに単純にはいかない。

しかも回路図を作ってゆく過程においては、
「コイル」と「接点」が関連付けられていない状態も存在する。
この関連付けはオペレータがおこなうまでわからない。

たとえば原子と電子が分離しているプラズマみたいな状態っていえばいいかな。

なら MDT なんて全然関係ないかというと、そうでもない。
このようにして作られた回路図も、最終的には器具配置図面などが作られて、
リレーが何個…といった部品表を作ったりする。

器具配置図面などを描くときは MDT の機能は強力なので、
実際、MDT や Mechanical を使いたいというユーザは多い。

ところがここで >>20 の話に戻っちゃうんだ...。

MDT でただ保存するだけで、100 を超えるカスタムオブジェクトが
仕込まれてしまう。

おそらくこいつらが邪魔をするせいで、AcApDocument を開かずに
AcDbDatabase だけで処理を済ませることができなくなっているんだ。 ( >>9 )
0032デフォルトの名無しさんNGNG
ハナシ見てるとAutoCADのデ−タベ−スに意味論上の整合性がどれくら
いあるのか?ってことまで考えなきゃいけなくなりそう。
以外にInventerが出た理由もその辺にありそうな気もしちゃうね。
つまり、”ごわさんに願いまして”したかったとか・・・。
0033デフォルトの名無しさんNGNG
>>32
Inventor って、名前はときどき聞くけど、AutoCAD との関係はどんな感じ?

> つまり、”ごわさんに願いまして”したかったとか・・・。
今さら DWG や DXF を捨てるなんて不可能だよね。
そういう意味も込めて、次期版では XML に期待…ってところかな。
0034デフォルトの名無しさんNGNG
もうすぐ AutoCAD 2002 が出るんだと。
そのあとしばらくして AutoCAD LT 2002 が出るんだろうな。

AutoCAD 2002 は R15 用の ARX もそのままで動くんだと。

まぁ、それはそれで嬉しいけど、それより、あんなバグや、こんなバグは
直っているのでしょうか。

>>31 的には、MDT6 のカスタムオブジェクトがどうなってるか気になるところ。
0035デフォルトの名無しさんNGNG
どっかに、ObjectARXのサンプル集みたいなのありませんか?
ま、ADNので十分なんですけどね。
0036PeFileWrapperNGNG
>>35
オレが ObjectARX を勉強するときは、会社に良い実例がいっぱいあったので、
それをみて ObjectARX を理解していった。
どうも、あの本(タイトル忘れた)だけでは、よ〜わ〜らん。

もっとも、オレの本職は ARX「未満」の部分なんだけどね...。

SDK のヘッダにない関数をしらべたり、
AcEdCommandStack を乗っ取ったり、
LT が ARX の身元を調べている部分を…、おっと、危ない、アブナイ。(藁
0037でふぉるとノ名無シサンNGNG
>>36
久々の登場ですね。
ところで、ARX「未満」ってなに?
ARXまで煎かないってこと? → AutoLisp、VBA?
でも、AcEdCommandStackってARXだし・・・
0038PeFileWrapperNGNG
>>37
「久々」…って、おぉ、漏れのファンかぁ? でもサインはやれんぞ。 (藁

ARX「未満」ってのは、ARX では(ARX でさえ)どう逆立ちしたって不可能なこと。

たとえばの話、AcDbObject が AcDbDatabase に追加されたことは
AcDbDatabaseReactor で検知できるだろ? これは ARX「以上」。

じゃあ、その AcDbDatabaseReactor が AcDbDatabase に登録されたことが
検知できるリアクタってのは、あるかい? これが ARX「未満」。

現在のところ、たとえばこのような「リアクタのリアクタ」は、
ObjectARX 2000/2000i SDK では提供されていないし、
これを無理矢理作ろうと思っても、
AutoCAD に漏れも知らないような隠された裏口でもないかぎり、
C/C++ では実現不可能。

このような部分を ARX「未満」って書いたんだ。今の漏れの専門が、コレ。

憚(はばか)りながら、
腕の立つプログラマでさえ不可能なことをやってのけて、
人を幸せにすることができるひとのことを、
「ハッカー」という。

くれぐれも人を不幸にする「クラッカー」と混同せんでくれ、な。
0039デフォルトの名無しさんNGNG
>>5 == >>38
自動机の従業員は不幸にならないのかな。(プ
0040PeFileWrapperNGNG
>>39
ウッ、そう来るかぁ...。(汗 (汗 (汗

でも AutoCAD のバグのせいで、漏れも十分、不幸を経験してるので、
それでチャラということで、なんとかひとつ、お願いできないでしょうか? (藁
0041でふぉるとノ名無シサンNGNG
>>40
自動机の開発はその地雷を踏んでいないのだから、チャラというのは・・・
0042PeFileWrapperNGNG
>>41
自分達だけ地雷を踏まないということは、
地雷を敷設したのは自分達だからということではないのか?

ならチャラどころか、不幸にしているのは漏れではなくて、
奴等だという言い方もできると思われ。
0043でふぉるとノ名無シサンNGNG
>>42
自分達が不幸にならないための地雷では?
0044デフォルトの名無しさんNGNG
質問させてください。

AcDbDatabase::deepCloneObjects() だとすぐに AcDbDatabase にクローンが
作成されてしまいますが、これを、AcDbDatabase に関連づけされないような
形でディープクローンする方法はあるのでしょうか? やはり、通常のクローン
とちがい、サブエンティティまでクローンするとなれば AcDbDatabase に関連
付けされていないとダメってことでしょうか?

自分でガリガリやるのは面倒ですが、やっぱり、それしかないかなぁ ...
0045デフォルトの名無しさんNGNG
AcDbText* pText;
char szTextString[ 256 ];
.
.
.
lstrcpy( szTextString, pText->textString() );

思い切り漏れてるんだけど、こういうソースを見かけたときどうしたらいいんだ (鬱
0046デフォルトの名無しさんNGNG
>>45
見なかったことにして、屁をこいて、寝る。
0047デフォルトの名無しさんNGNG
>>44
deep-clone して無名ブロックつくって、
一旦モデル空間に挿入してそれを AcDbEntity::explode() する…のか?

あぁ〜、面倒くさっ。
そんなことするくらいなら、漏れならさっさと自分でクローンするぞ。

そもそも、言ってることが、漏れにはいまひとつ、よ〜わ〜らん。
0048PeFileWrapperNGNG
ここはもう、完っ璧に地下スレになっちゃったなぁ。
age られてから、まだ 10 日しか経ってないのに...。

ところで海の向こうでは AutoCAD 2002/AutoCAD LT 2002 の出荷が
始まったみたいなんだけど、何か情報ない?
漏れ的には特に(勿論!?) LT が気になるんだが...。

誰かココ、見てたら、カキコきぼ〜ん。
0049デフォルトの名無しさんNGNG
をぃをぃ!

http://www.mura.sh/bbs/wwwbbs.cgi?print+200107/01070028.txt
0050デフォルトの名無しさんNGNG
>>49
AutoCAD LT 2002 に対応しているのをうたっているのはよいかも。

でも、後発アプリとしては
某アプリ(1)のように aclt.exe がインポートテーブルにないほうがいいなぁ。
某アプリ(2)のように AutoCAD の xxxxx×××× になってるほうがいいなぁ。
005149NGNG
>>50
ふむ、そうだね。 LT 2002 対応表明一番乗りかな?

…ってーことは、去年、
>>10 > 「某有名 Delphi で LT のカスタマイズができる国産ツール」
が LT 2000i のときに増えたトラップに引っかかっていたことと、
ベータ板さえ出てないのにこんなに早く表明した(しちゃった?)ことから考えて、
LT 2002 ではきっと大きなトラップは増えていないわけだな。

とりあえずホッとしたってところかも。

漏れ的には OLE Automation が塞がれていたら面白いんだけどな...。
特にヒストリ関係とか。 (謎コレされたら、みんな騒ぐだろうな。 (藁
0052デフォルトの名無しさんNGNG
レスしてる人って、IntelliCAD屋さんかな?

”Thank you for your information.”

美しい響きだ(Laugh)
0053デフォルトの名無しさんNGNG
あっ、最初のレスね。
どういうところがIntelliCAD屋さんって思ったの?
漏れはユーザじゃなくって、むしろ営業方面の人かなって思った。

ダウソしたらドネーション払うまで 30 日間は使えるみたいだけど、
誰か試してみた人、いるのかな?
もしいたら、レポートきぼ〜ん。
■ このスレッドは過去ログ倉庫に格納されています