Archive for category LISP

グループ名を取得

オブジェクトのグループ名を取得
(defun y_gname (E_NAME / KEY E_DATA LST)
(setq KEY (cons 340 E_NAME))
(setq E_DATA (dictsearch (namedobjdict) "acad_group"))
(while (setq E_DATA (member (assoc 3 E_DATA) E_DATA))
(if (member KEY (entget (cdadr E_DATA)))
(setq LST (cons (cdar E_DATA) LST))
)
(setq E_DATA (cddr E_DATA))
)
(reverse LST)
)

No Comments

グループを消す

;;グループ名のリスト
(defun y_list_group (/ GR LST)
(vlax-for GR
(vla-get-groups (vla-get-activedocument (vlax-get-acad-object)))
(setq LST (cons (vla-get-name GR) LST))
)
(mapcar 'strcase (reverse LST))
)
;;グループを消す
(defun c:group_dell(
/
GROBJ
)
(setq GROBJ (vla-get-groups (vla-get-activedocument (vlax-get-acad-object))))
(foreach n (y_list_group)
(vlax-invoke-method (vla-item GROBJ n) 'Delete)
)
(princ)
)

2 Comments

グループの個数を調べる

(vlax-get-property (vla-get-groups (vla-get-activedocument (vlax-get-acad-object))) ‘Count)

No Comments

イメージのロード・アンロード

VLISPがまじったり、DXFで取得したり、イマイチ美しくないなぁ。
どうして私は探し出せないんだろう・・・。

(defun c:il(
/
E_NAME
OBJ
NAME
)
(while (not (setq E_NAME (car (entsel)))))
(setq OBJ (vlax-ename->vla-object E_NAME))
(setq NAME (vlax-get-property OBJ 'Name))
(if (= 0 (y_dxfdata 280 (entget (cdr (assoc 340 (entget E_NAME))))))
(command "-image" "r" NAME)
(command "-image" "u" NAME)
)
)

4 Comments

VLISPで交点を求める

VLISP使えばポリラインでも円弧でも何でもござれ。
VBA使えばいいじゃん!という突っ込みはなし。

(vl-load-com)
(defun test(
E_NAME1
E_NAME2
/
PT
)
(setq E_NAME1 (vlax-ename->vla-object E_NAME1))
(setq E_NAME2 (vlax-ename->vla-object E_NAME2))
(setq PT (vlax-invoke-method E_NAME1 'IntersectWith E_NAME2 acExtendNone))
(vlax-safearray->list (vlax-variant-value PT))
)

7 Comments

ダイナミックブロック集

VLISPダイナミックブロック集
[EffectiveName プロパティ]
元のブロック名を示します。
[IsDynamicBlock プロパティ]
ダイナミック ブロックかどうかを判断します。
[ConvertToAnonymousBlock メソッド]
ダイナミック ブロックを、名前のない通常のブロックに変換します。
[ConvertToStaticBlock メソッド]
ダイナミック ブロックを、名前の付いた通常のブロックに変換します。
[GetDynamicBlockProperties メソッド]
ダイナミック ブロックのプロパティを取得します。
[ResetBlock メソッド]
ダイナミック ブロックを既定値の状態にリセットします。

No Comments

ダイナミックブロックの名前取得

ダイナミックブロックって変形しちゃうと名前が「*Uほげ」とかになってしまう。
ということで、本当のブロック名を取得するLISP。
最初にダイナミックブロックをクリックしてね。
(setq E_DATA (entget (car (entsel))))
(setq E_DATA (entget (cdr (assoc 360 E_DATA))))
(setq E_DATA (entget (cdr (assoc 360 E_DATA))))
(setq E_DATA (entget (cdr (assoc 360 E_DATA))))
(cdr (assoc 2 (entget (cdr (assoc 340 E_DATA)))))
誰かVLISPで取得する方法しらない??調べられなかった(T○T)

2 Comments