CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

AutoCAD

まずはObjectARXを学んでみるの巻

投稿日:2022年12月25日 更新日:

Bricsys BRXをイチから作る手順がないので、まずはAutodeskさんのObjectARXを作ってみようというアプローチ。ARXはC++で書くということもあって、AutoCADをカスタマイズする方法としてはとっつきが悪い。MFC利用のDLLを作るというのが基本であり、そこにARX用のヘッダーやlibやらを参照すればよい。とは言え、プロジェクトの設定をチマチマと変えるというのが手間。ということで、VisualStudioで新規プロジェクトを追加する際のWizardを追加することができるようになっており、これがかなり楽ちんだということが今回よくわかった。

AutoCADは最新の2023とすると、VisualStudioは2019(C++)になる。この2つがあることが大前提であり、他は以下の手順の中でダウンロードしてきてセットアップすればよい。

1.ObjectARX SDKの入手
この最初の段階でけっこうつまづきやすい。ドキュメント類はたくさんある中、肝心のSDKがどこにあるのかわからんという迷路。以下の英語サイトの下部にあるLicensingのDownloadをクリック。
AutoCAD ObjectARX SDK Developer Center
使用許諾がつらつらとあって、下の方にスクロールしていくと連絡先の入力欄あり。全部入力した上でDWONLOADとすると、objectarx_for_autocad_2023_win_64bit_dlm.sfx.exeが入手できる。英語サイトというのがポイントで、Webサイトの言語を日本語サイトになんかしようものなら決して行きつけない。

2.ObjectARX SDKのセットアップ
objectarx_for_autocad_2023_win_64bit_dlm.sfx.exeは、自己解凍形式のファイルなので、任意のところに解凍する。C:\Autodeskが初期値なので、そのまま解凍。Cドライブ直下に「ObjectARX」というフォルダを作って、C:\Autodesk\ObjectARX_for_AutoCAD_2023_Win_64bit_dlmの中のものをコピー。なんでC:\ObjectARXに入れるかということは次の項目に関係する

3.VisualStudio ARX作成用Wizardのダウンロードとセットアップ
直リンクからダウンロードするのもよし。AutoCAD デベロッパー センターから、ObjectARX 2023 Wizardをクリックしてダウンロードしてもよし。ObjectARXWizard2023.msiだからダブルクリックして実行すりゃいいんでしょと考えるとハマる。UACをOFFにした上で、管理者権限で起動したコマンドプロンプトから以下のコマンドを打ってセットアップする。
msiexec /i ObjectARXWizards.msi
これをやらないと、プロジェクトが作成できない。ウイザード画面を使ってプロジェクトを作ろうとすると、最後の作成ボタン押下で何も起こらず、ハテ?という目にあう。
くわしいことは、こちらに記載されている。

4.Visual Studioで新規プロジェクト作成
新しいプロジェクトの作成で、検索窓にARXと打って検索するとこんな画面になる。

上段のARX/DBX Project For AutoCAD 2023を選択して次へ。
プロジェクト名と場所を指定して作成ボタン押下。

ここから先がARX用のWizardになる。

詳細は省くが、初期値から変えるところはMFC supportでExtension DLL..を選ぶことだけ。最後にFinishボタンを押せば、ARXプロジェクトが完成。

5.デバッグ版のビルドエラー解消
ビルドするとC1189のエラーが出るので、プロジェクトの設定⇒C/C++⇒コード生成⇒小さい方への変換チェックをいいえとする。LNK4099の警告は無視でよい。

6.Hello Worldの実装
最もシンプルな実装方法は以下の通り。

static void ADSKMyGroupMyCommand () {
	// Put your command code here
	acutPrintf(_T("\nHello World !!"));
}

コマンドラインに文字が出るだけでつまらんので、ちょっと込み入ったことを実施。

static void ADSKMyGroupMyCommand () {
		acDocManager->lockDocument(acDocManager->curDocument(), AcAp::kWrite);
		AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();
		AcDbBlockTable* pTbl;
		pDb->getBlockTable(pTbl, AcDb::kForRead);
		AcDbBlockTableRecord* pRec;
		pTbl->getAt(_T("*MODEL_SPACE"), pRec, AcDb::kForWrite);
		pTbl->close();

		AcDbText* pEnt = new AcDbText();
		pEnt->setTextString(_T("Hello World !!"));
		pEnt->setHeight(300.0);
		pEnt->setPosition(AcGePoint3d(2000,1200,0));
		pRec->appendAcDbEntity(pEnt);

		pRec->close();
		pEnt->close();
		acDocManager->unlockDocument(acDocManager->curDocument());
}

アクティブのDatabaseを取得して、ほどほどの大きさの文字を追加。

7.デバッグ実行
VisualStudioからデバッグの開始とするとAutoCADが起動。apploadで今ビルドしたarxをロード。追加されたコマンド「mycommandlocal」を打ち込んで実行すると、こんな画面になる。

-AutoCAD

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

AutoCAD弧長寸法の補助線が放射状なのか平行なのか

左が中心角80度の円弧に弧長寸法を書いたもので、補助線同士が平行になっている。 右が中心角90度の円弧に弧長寸法を書いたもので、補助線が円弧の中心点から放射状にのびている。 以下、Autodeskサイ …

no image

AutoCAD2010

データ形式変更の年がやってくる。 来年の春にはAutoCAD2010が出るはず。 AutoCAD2007から3年。 2004から6年。 2000から10年。 R14から12年。 今回は一体どんな斬新な …

AutoCAD 2021のコードネームがRogue(ローグ)で半笑い

以下Tweetですべての表したわけだが、まだ言い足りないことがあるのでツラツラと書いてみようじゃないか。 AUTOCAD2021のコードネームはRogue。ローグ。スターウォーズのスピンオフでローグ・ …

no image

2008寸法

AutoCAD2008が出てから早1年が経とうとしている。 巷では、2009関連の情報が出回り始めている。 はやいとこ、2008DWGの変更点を調査するつもりでいたが、 無情にも月日だけが経過していく …

no image

LEADERという罠

AutoCADのLEADER(引き出し線)の話。 悪名高いのよ、こいつが。 今日はこいつに、はめられたね。 寸法スタイルを持ってるくせに匿名ブロックを持ってない。 中途半端な寸法線という位置付けになっ …