憂国なプログラマ

背景を地味なパターンに直してみました。これはこれでいいかも!

AutoCAD

[ リスト | 詳細 ]

記事検索
検索

全1ページ

[1]

AutoCAD ARX/VBA/.NET 会議室

「AutoCAD ARX/VBA/.NET 会議室」を新装公開しました。

今回より新たに「.NET」が追加されてますが、これは今後 AutoCAD の開発環境として .NET が主流になると予想されるので加えてみました。
まぁ、いまさらどうよ!ってな感があるわけですがw


旧会議室のCGI は Web Forum Antispam Version を使っていたのですが、それでもここ数年、毎日のようにスパム投稿には悩まされておりました。
最初は メアドや URLリンクの制限から始まり、次はスパムキーワードの入力制限をして対処していたわけですが、それでもあの手この手を使っての書き込みが続き、対策としてキーワードを増やすに従い、
しまいには通常の投稿すら困難になってしまう状態になり、利用者の皆様には大変ご迷惑をかける状況になっておりました。

これは新しい CGI の採用、もしくは ASP.NET で新しい会議室を作る必要があると思ってはいたものの、
進捗中のプロジェクトが多忙であり、また貴重なログをいかに手をかけずに次の掲示板に引き継ぐかで色々悩み、なかなか手が付けられずにいたのですが、このたび Antispam Version の最新版が公開されていることを知り、連休中にスクリプトに修正を加え、今回更新することができました。


Antispam Version の最新バージョンはかなり修正が加えられており、スパムに対して大きな効果が期待されますが、運用してみないことには何とも判りません。
本当は専用サーバーを立てて、ASP.NET + WPF + SQLServer で新たな会議室を構築したいところですが、
予算と時間に余裕がないので、まだまだ先の話になりそうです。もしスポンサーになりたいという奇特な方が居られたら、是非お知らせ下さいw
本記事は、私がかって以下のサイトで公開したものの転載になります。
http://www.acesekkei.com/programming/arx/palette.htm

AutoCAD 2004以降追加されたインターフェイスである「パレット」を、ObjectARX で開発する方法を紹介します。以下のサンプルは Visual Studio .NET2002 + ObjectARX 2005 SDK で作成しております。

イメージ 11


1.新規プロジェクトを作成する

まず新規プロジェクトを作成します。Visual Studio のメニューバーから「ファイル(F)」→「新規作成(N)」→「プロジェクト(P)」をクリックして、「新しいプロジェクト」ダイアログボックスを表示します。

イメージ 1

今回のサンプルでは「PaletteTest」というプロジェクト名にしました。「OK」ボタンをクリックし、次に進みます。パレットを作成するには MFC の手助けが必要です。左から「MFC Support」 をクリックして、「Extension DLL using MFC Shared・・・」にチェックをします。

イメージ 2

「Finish」ボタンをクリックすると、プロジェクトが作成されます。プロジェクトが作られる際、以下のダイアログがでますので「OK」ボタンを押してください。

イメージ 3


2.パレット用のクラスを作成する

プロジェクトが作成されたら、「ObjectARX Addin」ツールバーの左から二つ目のボタンをクリックして、「Autodesk Class Explorer」を起動します。

イメージ 4

「Autodesk Class Explorer」ウィンドウが起動しましたら、トップの「プロジェクト名のツリーを右クリック、ショートカットメニューを表示させ、上から二つ目、「Add on ObjectARX MFC Ext Class」をクリックします。

イメージ 5

ObjectARX 用の MFC Class Wizard が起動しました。まず「パレット」を管理する「パレットセット」から作成します。

右側の「Fillter Base Classes by」 から「Palettes」を選択。左のコンボボックス、「Base Class」から「CAdUiPaletteSet」を選択します。サンプルでは「Class name」を「MyPaletteSet」にしました。「Finish」をクリックすると、コードが作成されます。

イメージ 6

次に「パレット」を作成します。再度「ObjectARX MFC Class Wizard」を起動して、右側の「Fillter Base Classes by」 を「Palettes」にし、「Base Class」を「CAdUiPalette」に指定します。
このサンプルではパレットは一つしか使わないので、とりあえずクラス名を「MyPalette」にしておきます。「Finish」をクリックするとコードが自動的に作成されます。

イメージ 7

本来はこれでコードの完成のはずですが、MFC Wizard の生成するコードは必要なインクルードが抜ける場合があります。Visual Studioの「ソリューションエクスプローラー」で「MyPaletteChildDlg.h」というファイルを探してください。見つかったらダブルクリックでファイルを開き、以下のように「Resource.h」をインクルードしてください。
#include "Resource.h" 

3.コマンドを定義する

これで準備は整いました。いよいよAutoCADのコマンドを作って、パレットを表示できるようにいたします。「ObjectARX Addin」ツールバーの左から一番目のボタンを押して、コマンドダイアログを起動しましょう。

イメージ 8

「Commands」ダイアログが起動したら、グリッド内で右クリックしてショートカットメニューを表示し、「New」をクリックします。

イメージ 9

コマンドが新たに登録されましたので、2列目と3列目を各々「Palette」と名前を変えます。

イメージ 10

「OK」ボタンを押すと、「acrxEntryPoint.cpp」の下のほうに、以下のコードが追加されます。
// ----- AcePaletteTest._Palette command (do not rename)
static void AcePaletteTest_Palette(void)
{
// Add your code for command AcePaletteTest._Palette here
}
「acrxEntryPoint.cpp」に、以下の二つのファイルをインクルードします。
#include "MyPaletteSet.h"
#include "MyPalette.h" 
次にグローバル変数を二つ用意します。
// グローバル Palette Set & Palette
MyPaletteSet *pPaletteSet;
MyPalette *pPalette1; 
「AcePaletteTest_Palette()」のコードを、以下のように修正いたします。ここでは各コードの詳しい解説はいたしません。
// ----- AcePaletteTest._Palette command (do not rename)
static void AcePaletteTest_Palette(void)
{
  if ( pPaletteSet ) pPaletteSet = NULL;

  pPaletteSet = new MyPaletteSet;
  CRect rect( 0, 0, 240, 300 );
  pPaletteSet->Create( "Palette Test", 
    WS_OVERLAPPED | WS_DLGFRAME | CBRS_FLOATING, 
    rect, acedGetAcadFrame(), 
    PSS_AUTO_ROLLUP | PSS_CLOSE_BUTTON
  );

  //-----------Add Palette1 --------------------------------------
  
  pPalette1 = new MyPalette;
  pPalette1->Create
    ( WS_CHILD | WS_VISIBLE, "Palette 1", pPaletteSet, PS_EDIT_NAME );
  pPaletteSet->AddPalette( pPalette1 );
  
  //-----------Restore ControlBar --------------------------------

  pPaletteSet->EnableDocking( CBRS_ALIGN_RIGHT );
  pPaletteSet->RestoreControlBar( AFX_IDW_DOCKBAR_RIGHT );

  //-----------Floating ControlBar -------------------------------
  
  CMDIFrameWnd* pAcadFrame = acedGetAcadFrame();

  CRect psrect, dcRect;
  pPaletteSet->GetWindowRect( &psrect );
  GetClientRect( GetParent( GetParent( adsw_acadDocWnd() ) ), &dcRect );
  psrect.top = psrect.top;
  psrect.left = dcRect.right - psrect.Width(); 

  CRuntimeClass* pCurrentFloatingFrameClass = 
    AdUiSetFloatingFrameClass( AdUiGetRegisteredPaletteSetFloatingFrameClass() );
  pAcadFrame->FloatControlBar( pPaletteSet, psrect.TopLeft() );
  AdUiSetFloatingFrameClass( pCurrentFloatingFrameClass );

  //-----------Show ControlBar ------------------------------------

  pAcadFrame->ShowControlBar( pPaletteSet, TRUE, FALSE );
} 
これでコマンドは完成しましたが、このままでは作成したパレットの後始末をすることができません。パレットを表示させたまま終了させようとすると、メモリリークを引き起こします。そこで最後に後始末のコードを書きましょう。「acrxEntryPoint.cpp」内で、以下のコードを探してください。
virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
  AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;
  // TODO: Add your code here

  return (retCode) ;
} 
上記コメント箇所「// TODO: Add your code here」を「if ( pPaletteSet ) pPaletteSet = NULL;」に置き換えます。
virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
  AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;
  if ( pPaletteSet ) pPaletteSet = NULL;

  return (retCode) ;
} 

これでコマンドは作成されました。あとはコンパイルして出来た ARX ファイルを AutoCAD にロードさせ、コマンドラインに「Palette」と打ち込んでみてください。パレットが表示されます。

イメージ 11

開く トラックバック(1)

ObjectARX

ここ最近、以前私がシステムを手がけた会社と連絡を取り合ってます。

そこは大手住宅メーカーの関連会社。
そこそこ規模の大きい会社のシステムを、有難くもほぼ一人で開発させて頂きました。

要求はかなり難度の高いもので、2D平面図から3D図を自動描画し
内装部材を立体的に見せると同時に集計をするというもの。

さらにもひとつ大変だったのが、ユーザーが自由に操作を変更できるよう
XML に操作手順を記述し、それを読み込んでコマンドを定義するという仕様。
これは CompositeCommand の複合パターンで対処した覚えがあります。


このシステムは AutoCAD + ObjectARX で開発しましたが、
当時国内には全く ObjectARX で 3D に関わる資料がなく
海外の掲示板の記事を翻訳しながら手探りで開発したので
本当に色々鍛えさせて頂いた思い出深いシステムでありました。

いまやフリーの身のため、個人で受注は難しいから、
某e氏関連の会社を勧めてはみましたが。。。

精魂込めて作ったシステムというのは自分の子供のようであるから、
里子に出すような、何とも複雑な気分になったものです。(^ω^;

LT-Extender

久々にえばさんとこのブログを見ましたが、なんとも感慨深い記事がありました。


Autodesk が裁判起こしたのは確か 2003年ごろだと記憶しておりますが、決着つくのにずいぶん時間がかかったのですね。

LT-Extender サイト内の墓碑・・・epitaph (´・ω・`)
イメージ 1

LT−Extender の終焉自体はとっくに知ってましたが、改めて ACE-LT や LT/com と並べて語られると、郷愁に似たものすら感じます。

私のパソコン歴は AutoCAD LT カスタマイズとともに歩んできたと言っても過言ではありません。前の会社で R14 の時に AutoCAD に触れて以来、AutoCAD LT のカスタマイズに

・ACE-LT
・LT/com
・DelphiARX
・LT-Extender

と使い続け、開発環境も LISP・Delphi・VC++ と渡り歩いてきただけに、これらのツールがなければ、エンジニアとして今の自分は存在しなかったと思うと、感慨もひとしおです。

でも CAD では食えなくなったこのご時世。いまでは AutoCAD からすっかり離れて細々とエンジニアをやってます。(-ω-)

全1ページ

[1]


.
hilapon
hilapon
男性 / AB型
人気度
Yahoo!ブログヘルプ - ブログ人気度について
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

過去の記事一覧

よしもとブログランキング

もっと見る

[PR]お得情報

ふるさと納税サイト『さとふる』
11/30まで5周年記念キャンペーン中!
Amazonギフト券1000円分当たる!
話題の新商品が今だけもらえる!
ジュレームアミノ シュープリーム
プレゼントキャンペーン

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事