Sponsored links

【AutoLISP ドリル】図形プロパティ3 解答編

Sponsored links
AutoLISP
Sponsored links
Jagaimo
Jagaimo

図形のプロパティを変更する練習問題です。今回は円を移動させるコマンドの解答編です。

Sponsored links

解答

コマンド MOVE[移動]を使う場合

単に移動させる場合は単純にこれが一番いいと思います。

(defun c:test ( / Obj)
  (setq Obj (car(entsel)))
    (command-s "._MOVE" Obj "" "0,0" "150,50")
  (princ))

DXF図形情報を置き換える場合

DXF図形情報の書き換え、点座標編集の練習をしたい人はコチラの方法で。

  • 円の中心の点座標を取得
  • 中心点にXに150Yに50を足して新しい点座標を作成
  • DXF図形情報の中心点の情報を上書き
(defun c:test ( / Ent Pt PtX PtY NewPt)
   (setq Ent (entget (car(entsel "円を選択:"))))
     (setq Pt (cdr (assoc 10 Ent)))

   (setq PtX (+ 150 (car Pt))
      PtY (+ 50 (cadr Pt))
   )  

   (setq NewPt (list PtX PtY 0))
  
  (setq Ent (subst (cons 10 NewPt) (assoc 10 Ent) Ent))
  (entmod Ent)
  
(princ))

DXF図形情報とコマンドの合わせ技

取得した点と新しく作った点の2点を使ってコマンド移動させる方法もあります。

  • 円の中心の点座標を取得
  • 中心点にXに150Yに50を足して新しい点座標を作成
  • コマンドMOVE[移動]で、取得した点と新しい点の2点を指定

(defun c:test ( / Obj Ent Pt PtX PtY NewPt)
   (setq Obj (car(entsel "円を選択:")))
     (setq Ent (entget Obj))
       (setq Pt (cdr (assoc 10 Ent)))

   (setq PtX (+ 150 (car Pt))
      PtY (+ 50 (cadr Pt))
   )  

   (setq NewPt (list PtX PtY 0))
  
  (command-s "._MOVE" Obj "" Pt NewPt)
  
(princ))

VLISPを使う場合

VLISPを使うとこんな感じになります。

(defun c:test ( / VlObj Pt VlObj PtX PtY)
   (setq VlObj (vlax-ename->vla-object (car(entsel "円を選択:"))))
      (setq Pt (vlax-safearray->list 
                  (vlax-variant-value  
                     (vla-get-center VlObj)
                  )
               )
     )
          
  (setq PtX (+ 150 (car Pt))
        PtY (+ 50 (cadr Pt))
  )
      
  (vla-put-center VlObj (vlax-3D-point PtX PtY 0))
  
(princ))

関連記事

移動点を指定するコマンドを作るときは、オブジェクトスナップが影響してエラーの原因になるので、対策が必要です。

Comments