2019年7月8日月曜日

TeighaShell を作ってみた

TeighaShell サンプルプログラム

AutoCADには、AcCoreConsole.exe というグラフィックス画面を持たない図面編集プログラムがある。
コマンドプロンプトに LINE [Enter] と入力すれば線分の始点と終点を入力でき、実際に絵を描くことができる。PLOT[Enter]と入力すればコマンドユーザーインタフェースバージョンの印刷コマンドを起動して、図面をプリンタに出力したり、PDFなどのファイル出力が可能である。
画面がないということは、基本的に処理が速いということにつながる。

コマンドユーザーインターフェースからグラフィック操作なしで、DWGファイルを扱いたいというニーズは、たぶんどこにもあって、AutoCAD ベースだといかんせんお高いので、Teigha ベースでできないか、というのを考えたのがこちらのプログラムになる。

仕組み

・C# で作ったコンソールアプリケーション
・PowerShell を組み込んでいる
・Teigha .Net Classic API が利用できる

以上

動作の様子

TeighaShell.exe を起動する。

正しく起動できれば、Teigha のバージョンを表示した後に、PowerShell のプロンプトを表示する。
プロンプトに、下記のスクリプトの完全パスを指定して[Enter]を押す。
#
# DrawArc.ps1
# TeighaShell 上で動作する
#
# 新しい図面を作成する
$db = New-Drawing
# 変数は$から始まる英数字、大文字小文字は区別しない
# New-Drawing は TeighaShell.exeが提供するコマンドレット
#
# SYNOPSIS
#  New-Drawing [-UseCtb ($true|$false)]
# RETURN
#  Teigha.DatabaseServices.Database
# トランザクションを開始する
$tr = $db.TransactionManager.startTransaction()
# インスタンスのプロパティは、インスタンス.プロパティ名でアクセスできる
# インスタンスのメソッドは、インスタンス.メソッド名(引数)で実行できる
# 円弧を作成する
$arc = New-Object -TypeName Teigha.DatabaseServices.Arc
# C# で New で作成するものは、PowerShell では New-Object で作成する
# 現在の画層名、線種、図形の色を円弧にまとめて設定
$arc.SetDatabaseDefaults($db)
# 半径を指定する
$arc.radius = 100
# 開始角は 0°のまま
# 終了角 60°を指定する
$arc.EndAngle = 60.0 * 180.0 / [Math]::PI
# 円周率は System.Mathクラスに 定数 PI として定義されている
# ロード済みの System 名前空間は省略できる
# [名前空間.型名] でクラス名や列挙型などの型名を変数に設定できる
$BTR = [Teigha.DatabaseServices.BlockTableRecord]
$OpenMode = [Teigha.DatabaseServices.OpenMode]
# ブロックテーブルを読み込みオープンする
$tbl = $tr.GetObject($db.BlockTableId,$OpenMode::ForRead)
# モデルレイアウトブロックを書き込みオープンする
$rec = $tr.GetObject($tbl[$BTR::ModelSpace],$OpenMode::ForWrite)
# ブロックテーブルからブロックレコードを取得するには、テーブル名の配列を使用する。
# 配列の要素にアクセスするには [] を使う。
# 戻り値はオブジェクトID
# ブロックレコードクラスの定数 ModelSpace PaperSpace を使ってモデルレイアウト名(*MODEL_SPACE)が取得
# シンボルユーティリティサービスクラスを使って、
# モデルレイアウトブロックのオブジェクトIDを取得する方法もある
#$usrv = [Teigha.DatabaseServices.SymbolUtilityServices]
#$rec = $tr.GetObject($usrv::GetBlockModelSpaceId($db),$OpenMode::ForWrite)
# 円弧をモデルレイアウトに追加
$rec.AppendEntity($arc)
# トランザクションに円弧を追加
$tr.AddNewlyCreatedDBObject($arc,$true)
# トランザクションをコミット
$tr.Commit()
# トランザクションを廃棄
$tr.Dispose()
# 図面を名前を付けて保存
Write-Drawing c:\temp\arc.dwg $db
# 図面を破棄 (Write-DrawingにDispose()を含めたので呼ぶ必要なし)
#$db.Dispose()
上記のスクリプトを実行すれば、C:\temp\arc.dwg ファイルに円弧を1個書いた図面を保存してくれる。


0 件のコメント:

コメントを投稿

異尺度注釈図形にアタッチされている尺度を知る

 異尺度注釈図形が持っている尺度(文字列)を表示する ;;; ;;; LISTANNOSCALE.LSP ;;; (defun C:LISTANNOSCALE ( / el id f)   (setq f T)   ;異尺度注釈図形を選択   (if (setq el (entg...