図描きの備忘録

日々の業務の時間短縮。残業しないで帰る事を目指し、悪戦苦闘中。AutoCAD、Lisp、効率化、自動化、合理的、プログラミング、資産運用勉強中

AutoCAD Lisp 入門 - 2 - オブジェクトの情報を抽出

f:id:ekakio:20160209083230j:image

目次

 

情報を得る

 
こんにちは!
 
エカキオです!
 
「Lisp」入門2回目です。
 
前回のおさらいはこちら。
 
 
 
今回は「Lisp」を使っていく上で欠かせない、オブジェクトのデータの抽出方法について、説明していきます。
 

 

 
オブジェクトよ、
己を知り、
そして己を知られよ。
はい、意味わからないですね。
 

情報を入れる箱「変数」

 
では、さっそく。
 
今回は「変数」を覚えてもらいます。
 

(setq 〇 ◻︎)

 
〇:変数名
◻︎:変数に入るもの
 
これは必ずといっていいほど、どのLispにも登場しますので覚えてください。
 
変数というのは、数値や文字を保管しておく箱と思ってください。
例を書きます。
 
(setq mo "500円")
 
これは、
「mo」
という変数に
"500円"
という文字列を入れました。
 
(setq n 100)
 
これは、
「n」
という変数に
100
という数値を入れました。
 
ここで補足しますと、
100  と  "100"
では意味が違います。
100   は数値
"100"   は文字列
 
違いは
数値は計算できる
文字列は計算できない
と覚えてもらえれば良いと思います。
 
今説明した「変数」にオブジェクトの情報を入れてみます。
 
(setq li (entget (car (entsel))))
 
急に複雑になり過ぎましたかね。汗
 
順を追って説明します。
色ごとの(   )カッコに区切って説明します。
 
(      )が何重にも入れ子になっている場合、中のものから処理します。
 
(entsel)
クリックしたオブジェクトの名称を得る
 
結果例
(<Entity name: 60000014> (3.0 3.0 0.0))
 
(car )
の中の、「1番前の要素」を抽出
(この場合、entselで得たものの、1番目、つまり上記例の<Entity name: 60000014> )
 
(entget )
の名称が持つ情報を表示する
 
結果例

( (-1 . <Entity name: 1bbd1d0>) (0 . "LINE") (330 . <Entity name: 1bbd0c8>) (5 . "6A") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 1.0 2.0 0.0) (11 6.0 5.0 0.0) (210 0.0 0.0 1.0) )

 
(setq li )
をliに入れる
 
 
(setq li (entget (car (entsel))))
 
改めて、こちらの内容を実行してみましょう。
メモ帳に記載しなくても、コマンドラインに実行したい部分のみ記載して実行でも確認出来ます。
 
実行し、指示されたとおり、オブジェクトをクリック
 
これで、「変数 li」にクリックしたオブジェクトの情報が入りました。
 

箱の中身と情報の見方

 
変数の中身は「!」を変数名の前につけることで確認出来ます。
 
!li
 
をコマンドラインに入力すると、「li」に入っている情報を見ることが出来ます。
 
やってみましょう。
 
すると、なんだかわからない数値やらアルファベットが山のように出てきたと思います。
 
コマンドラインを別ウィンドウで表示します。キーボードの最上段に並んでいる中から、
「F2」
を押してみてください。
 
コマンドラインが表示されました。
 
見方を説明します。
 
(〇  .  ◻︎)
 
〇:グループコード
◻︎:が値です。
 
グループコードの説明はこちら。
 
例えば
〇部分が「0」であれば、図形の種類が◻︎になります。
(0  .  "LINE")
(0  .  "CIRCLE") 
のような感じです。
 
〇部分が「8」ならば、画層の名称が◻︎に表示されます。
 
(8  ,  "躯体")
(8  ,  "設備")
などなど。
 
"LINE"や"CIRCLE"など、
各図形固有のグループコードはこちら
 
 

コマンドに組み込んでみる

 
Windowsのデスクトップに戻り、メモ帳を開きます。
 
まずはお決まりを記入です。
 
(defun c:info ()
 
     (princ)
)
 
コマンドはなんでもいいですが、
とりあえず、「info」とします。
 
中身を足して行きましょう。
 
(defun c:info ()
 
     (princ)
)
(setq li (entget (car (entsel))))
 
を合わせてみましょう。
間に書くだけです。
 
(defun c:info ()
      (setq li (entget (car (entsel))))
      (princ)
)
 
2行目の左端を空けていますが、これを「字下げ」と言い、後々文章を見やすくするために使います。
 
これを、「info.lsp」などの名前で保存します。
 
以上で完成です。
 
その後、「info.lsp」ファイルをAutoCADの画面にドロップ。
 
これで、「info」とコマンドラインに入力するだけで、
「オブジェクトの情報を得る」
というコマンドの完成です。
 
 
いかがでしたか。
 
少し複雑になってきましたので、実際に色々なオブジェクトで実行してみるとわかりやすいかもしれません。
 
わからないことなどあれば、コメントいただけると対応させていただきます。
 
では、この辺で。
 
エカキオ

 

 

 

Related Posts Plugin for WordPress, Blogger...