Autodesk Community Tips- ADNオープン
Autodesk Community Tipsではちょっとしたコツ、やり方、ショートカット、アドバイスやヒントを共有しています。
ソート順:
Issue AutoLISP のリスト操作で拡張エンティティ データを付加・参照・削除するには、それぞれ、どのようなコードを作成すればいいでしょうか?   Solution 拡張エンティティ データは、AutoCAD 図面内の任意のオブジェクトに任意のカスタム データの付加、参照する手法です。AutoLISP でも、他の API 同様、拡張エンティティ データの付加・参照・削除を実装することが出来ます。   次のコードは、リスト操作で拡張エンティティ データを付加する AddXData コマンド、参照する GetXData コマンド、削除する RemoveXData コマンドの例です。   ;https://help.autodesk.com/view/OARX/2025/JPN/?guid=GUID-A94BC605-5517-437F-A6FE-D3EB8116A01A ; 拡張エンティティデータの追加例 (defun C:AddXData (/) (setq ename (car (entsel))) (if (= ename nil) (exit) ) (setq appname "Test_App") (if (= (tblsearch "APPID" appname) nil) (if (= (regapp appname) nil) (princ (strcat "\n" appname " アプリケーション名が登録出来ません... ")) ) ) (setq edata (entget ename (list "*"))) (setq exist (cdr (assoc -3 edata))) (if (= exist nil) (progn ; 他の拡張エンティティデータも付加されていない場合 (setq xdata (list (list -3 (list appname (cons 1002 "{") (cons 1000 "あいうえお") ; 文字列データ (cons 1040 999.99) ; 実数データ (cons 1070 1111) ; 整数データ (cons 1002 "}") ) ) ) ) (setq newdata (append edata xdata)) (entmod newdata) ) (progn ; 既になんらかの拡張エンティティデータが付加されている場合 (foreach xdatas exist (progn (if (= appname (car xdatas)) (progn (princ (strcat "\n既に " appname " データが付加されています...")) (exit) ; 処理中断 ) ) (setq xdata (list (list appname (cons 1002 "{") (cons 1000 "あいうえお") ; 文字列データ (cons 1040 999.99) ; 実数データ (cons 1070 1111) ; 整数データ (cons 1002 "}") ) ) ) (setq xdatas (append (list -3) (append exist xdata))) (setq newdata (subst xdatas (append (list -3) exist) edata)) (entmod newdata) (princ (strcat "\n" appname " データが付加しました...")) ) ) ) ) (princ) ) ; 拡張エンティティデータの取得例 (defun C:GetXData (/) (setq ename (car (entsel))) (if (= ename nil) (exit) ) (setq edata (entget ename (list "*"))) (setq exist (cdr (assoc -3 edata))) (if (/= exist nil) (progn (foreach xdatas exist (progn (princ (strcat "\n*** " (car xdatas))) (setq xdata (cdr xdatas)) (foreach element xdata (setq code (car element)) (setq value (cdr element)) (cond ((= code 1000) (princ (strcat "\n文字列値:" value)) ) ((= code 1040) (princ (strcat "\n実数値:" (rtos value))) ) ((= code 1070) (princ (strcat "\n整数値:" (itoa value))) ) ) ) ) ) ) (progn (princ "\n拡張エンティティデータが付加されていません...") ) ) (princ) ) ; 拡張エンティティデータの削除例 (defun C:RemXData (/) (setq ename (car (entsel))) (if (= ename nil) (exit) ) (setq appname "Test_App") (if (= (tblsearch "APPID" appname) nil) (princ (strcat "\n" appname " アプリケーション名が登録されていません... ")) ) (setq edata (entget ename (list "*"))) (setq exist (cdr (assoc -3 edata))) (if (/= exist nil) (progn (foreach xdatas exist (progn (if (= appname (car xdatas)) (progn (setq xdata (list (list appname) ) ) (setq xdatas (append (list -3) (append exist xdata))) (setq newdata (subst xdatas (append (list -3) exist) edata)) (entmod newdata) (princ (strcat "\n付加された " appname " データを削除しました...")) ) ) ) ) ) ) (princ) ) 他の 3rd party アプリケーションや AutoCAD 自身も拡張エンティティデータ利用していますので、既に付加されている拡張エンティティデータに影響を与えずに独自データを付加、削除するようご留意ください。
記事全体を表示