C#の場合

using宣言(C#)やImports宣言(VB)は名前空間を省略してコードを記述するのに使用します。
using System;

using Teigha.ApplicationServices;

using Teigha.DatabaseServices;

using Teigha.EditorInput;

using Teigha.Runtime;

using宣言がないと、あとに出てくる Document doc は、Teigha.DatabaseServices.Document doc と記述することになります。

namespace 宣言で、ユーザーのコードにも名前空間を付けることができます。

namespace netSampleCS

{

class 宣言で、クラスを定義します。public は名前空間やライブラリの外から見えるクラスで、privateは名前空間やライブラリの外からは見えないクラスになります。
コマンドを定義するクラスは、public にする必要があります。

public class Class1

{

コマンドは public で引数、戻り値がない関数(C#)として定義します。VBでは手続き(Sub)になります。 CommandMethod 属性でコマンド名(必須)や、実行フラグ(オプション)などを指定します。

[CommandMethod("AddLine")]

public void cmdAddLine()

{

アプリケーション オブジェクトから、アクティブな図面(ドキュメント)のオブジェクトを入手します。

Document doc = Application.DocumentManager.MdiActiveDocument;

ドキュメント オブジェクトから、図形データが入ったデータベースオブジェクトと、CADのユーザー入出機能にアクセスできるエディタ オブジェクトを入手します。

Database db = doc.Database;

Editor ed = doc.Editor;

画面上で座標を入力するには、エディタ オブジェクトのGetPoint 関数を使います。結果は PromptPointResult クラスのオブジェクトの Status と Value を調べます。

PromptPointResult ret1 = ed.GetPoint("始点を指定");

if (ret1.Status != PromptStatus.OK)

return;

マウス入力時にラバーバンドを表示させるには、PromptPointOptions クラスのオブジェクトに設定してからエディタ オブジェクトのGetPoint関数を使います。

PromptPointOptions opt = new PromptPointOptions("終点を指定");

opt.BasePoint = ret1.Value;

opt.UseBasePoint = true;

opt.UseDashedLine = true;

PromptPointResult ret2 = ed.GetPoint(opt);

if (ret2.Status != PromptStatus.OK)

return;

プロパティ名からどんな設定が必要かは類推できるかと思います。

図面(ドキュメント)の図形データ(データベース オブジェクト)にアクセスするには、トランザクション オブジェクトを作成する必要があります。

トランザクション オブジェクトを使わないと、グラフィックス画面の再描画ができなかったり、リボンやプロパティ パレットにある現在の図面の状態を示す値の表示が更新されなかったりします。

using(Transaction tr = doc.TransactionManager.StartTransaction())

{

システム例外を補足するには、try - catch 宣言を使います。

try

{

モデルがアクティブなときはモデル空間ブロック レコード オブジェクト、シートがアクティブなときはレイアウト空間ブロック レコード オブジェクトを図形の登録先としてオープンします。

データベース オブジェクトのオープンは、トランザクション オブジェクトの GetObject 関数を使います。

BlockTableRecord rec = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;

線分オブジェクトを new で新規作成します。

Line ent = new Line();

現在の図面の設定(登録先画層、使用する線色、線種、線幅、印刷スタイルなど)をまとめて線分オブジェクトに設定します。

ent.SetDatabaseDefaults(db);

GetPoint 関数で入力した始点と終点を線分オブジェクトに設定します。

ent.StartPoint = ret1.Value;

ent.EndPoint = ret2.Value;

ブロック レコード オブジェクトに線分オブジェクトを追加します(図面への登録準備)。

rec.AppendEntity(ent);

トランザクションに新規に追加した線分オブジェクトを通知し、トランザクションの対象にします。

tr.AddNewlyCreatedDBObject(ent, true);

トランザクションを正常終了します。

トランザクションが管理しているブロックテーブルレコードと線分オブジェクトをクローズし、画面を再描画します。

tr.Commit();

}

tryのカッコの中でシステム例外が発生した場合、処理を中断してcatchに入ります。

catch (System.Exception ex)

{

エディタ オブジェクトのWriteMessage 関数により、例外のメッセージをコマンド ウィンドウに表示します。

ed.WriteMessage(ex.Message);

}

usingの終了~トランザクションはここで破棄されます。システム例外が発生しCommit()が呼ばれなかった場合は線分オブジェクトは追加されません。AddNewlyCreatedDBObjectより前で例外が発生した場合は、.Net Framework のガベージコレクションによって線分オブジェクトが破棄されます。

}

cmdAddLine関数(ADDLINEコマンド)の終了

}

Class1クラスの定義の終了

}

netSampleCS名前空間の定義の終了

}

カッコの数はバランスが取れていなければなりません。

VBの場合

C# では中カッコ { } で指定するものが、VBでは Sub ~ End Sub や、 If ~ Then ~ Else ~ End If のように冗長な表現になりますが、大体1:1で対応しているので、C# の説明で理解することができるでしょう。

LISPの場合

LISPの場合、getpoint 関数で画面上で座標を入力します。

座標とメッセージを引数として指定するとラバーバンドを表示させることができます。

entmake 関数で図形をモデル空間ブロックまたはレイアウト空間ブロックに追加します。

entmake 関数には、リストとして図形データを渡す必要があります。

LISP(オートメーション使用)の場合

getpoint 関数で画面上で座標を入力するのはLISPの場合と同じです。

オートメーションを使用すると、C#やVBでのプログラミングと同じように、アプリケーション オブジェクト、ドキュメント オブジェクト、モデル空間ブロック オブジェクト、線分 オブジェクトと、ARES をオブジェクトで扱います。

LISPでのオブジェクトの記述方法はクセがあります。

手続きは、(vla-手続き名 オブジェクト パラメータ)

プロパティの取得は、(vla-get-プロパティ名 オブジェクト)

プロパティの設定は、(vla-put-プロパティ名 オブジェクト パラメータ)

というように記します。

LISPのデータとオートメーションのデータの橋渡しをする、
vlax-3D-point 関数

vlax-ename->vla-object 関数
などの関数もあります。これらは vlax- から始まります。

回答が見つかりましたか?