サンプルファイルのダウンロード

C#で線分を作成する

.Net Framework 4.5 を使用したクラスライブラリプロジェクト netSampleCS の class1.cs の内容は次のようになります。プロジェクトは FxCoreMgd_4.3.14.dll と TD_Mgd_4.3.14.dll を参照設定する必要があります。

using System;

using Teigha.ApplicationServices;

using Teigha.DatabaseServices;

using Teigha.EditorInput;

using Teigha.Runtime;

namespace netSampleCS

{

public class Class1

{

[CommandMethod("AddLine")]

public void cmdAddLine()

{

Document doc = Application.DocumentManager.MdiActiveDocument;

Database db = doc.Database;

Editor ed = doc.Editor;

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

if (ret1.Status != PromptStatus.OK)

return;

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

{

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

Line ent = new Line();

ent.SetDatabaseDefaults(db);

ent.StartPoint = ret1.Value;

ent.EndPoint = ret2.Value;

rec.AppendEntity(ent);

tr.AddNewlyCreatedDBObject(ent, true);

tr.Commit();

}

catch (System.Exception ex)

{

ed.WriteMessage(ex.Message);

}

}

}

}

}

モデルがアクティブなときはモデル空間ブロックに、シートがアクティブなときはレイアウト空間ブロックに、現在の作図設定で線分を作成します。

VB.Netで線分を作成する

.Net Framework 4.5 を使用したクラスライブラリプロジェクト netSampleVB の class1.vb の内容は次のようになります。プロジェクトは FxCoreMgd_4.3.14.dll と TD_Mgd_4.3.14.dll を参照設定する必要があります。

Imports Teigha.ApplicationServices

Imports Teigha.DatabaseServices

Imports Teigha.EditorInput

Imports Teigha.Runtime

Public Class Class1

<CommandMethod("ADDLINE")>

Public Sub cmdAddLine()

Dim doc As Document = Application.DocumentManager.MdiActiveDocument

Dim db As Database = doc.Database

Dim ed As Editor = doc.Editor

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

If ret1.Status <> PromptStatus.OK Then

Return

End If

Dim opt As PromptPointOptions = New PromptPointOptions("終点を指定")

opt.BasePoint = ret1.Value

opt.UseBasePoint = True

opt.UseDashedLine = True

Dim ret2 As PromptPointResult = ed.GetPoint(opt)

If ret2.Status <> PromptStatus.OK Then

Return

End If

Using tr As Transaction = doc.TransactionManager.StartTransaction()

Try

Dim rec As BlockTableRecord = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite)

Dim ent As Line = New Line()

ent.SetDatabaseDefaults(db)

ent.StartPoint = ret1.Value

ent.EndPoint = ret2.Value

rec.AppendEntity(ent)

tr.AddNewlyCreatedDBObject(ent, True)

tr.Commit()

Catch ex As Exception

ed.WriteMessage(ex.Message)

End Try

End Using

End Sub

End Class

モデルがアクティブなときはモデル空間ブロックに、シートがアクティブなときはレイアウト空間ブロックに、現在の作図設定で線分を作成します。

LISPで線分を作成する

コマンドラインに次のように入力します。

(setq p1 (getpoint "始点を指定"))

(setq p2 (getpoint p1 "終点を指定"))

(entmake (list (cons 0 "LINE")(cons 10 p1)(cons 11 p2)))

モデルがアクティブなときはモデル空間ブロックに、シートがアクティブなときはレイアウト空間ブロックに、現在の作図設定で線分を作成します。

オートメーションで線分を作成する

コマンドラインに次のように入力します。
(setq app (vlax-get-acad-object))

(setq doc (vla-get-ActiveDocument app))

(setq ms (vla-get-ModelSpace doc))

(setq p1 (getpoint "始点を指定"))

(setq p2 (getpoint p1 "終点を指定"))

(setq p1 (vlax-3d-point p1))

(setq p2 (vlax-3d-point p2))

(setq ent (vla-AddLine ms p1 p2))

アクティブなドキュメントのモデル空間ブロックを変数 ms に取得し、AddLiine 手続きによって、線分をモデル空間ブロックに作成します。getpoint が返す実数のリストから AddLine に必要なセーフ配列に変換するために、vlax-3d-point 関数を使います。

コマンドにするには、defun 関数でコマンド名を C: から始まる名前にします。

LISPのみ使用時とオートメーション使用時を示します。

;; ADDLINE (LISP使用)

(defun C:ADDLINE ( / p1 p2 )

(setq p1 (getpoint "始点を指定"))

(setq p2 (getpoint p1 "終点を指定"))

(entmake (list (cons 0 "LINE")(cons 10 p1)(cons 11 p2)))

(princ)

)

;; ADDLINE2 (オートメーション使用)

(defun C:ADDLINE2 ( / app doc ms p1 p2 ent)

(setq app (vlax-get-acad-object))

(setq doc (vla-get-ActiveDocument app))

(setq ms (vla-get-ModelSpace doc))

(setq p1 (getpoint "始点を指定"))

(setq p2 (getpoint p1 "終点を指定"))

(setq p1 (vlax-3d-point p1))

(setq p2 (vlax-3d-point p2))

(setq ent (vla-AddLine ms p1 p2))

(princ)

)

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