ワールド座標で使う事が前提になっていました。
UCSでの座標値であるなら、座標変換のコードを追加すれば良いです。
初めから作り替えたらもっと綺麗なコードが作れますが、
先のコードを無理やり流用して作りました。
(defun C:circle_clip ( / ss ent i gp prop html kei x y ssa)
(if (setq ss (ssget '((0 . "CIRCLE"))))
(progn
(setq i 0)
(setq ssl (+ (sslength ss) 2))
(setq gp (getpoint))
(setq ssa (ssadd))
(command "undo" "be")
(command "line" "non" "0,0" "non" (strcat "0,-" (rtos (* 60 ssl) 2 2)) "")
(ssadd (entlast) ssa)
(command "line" "non" "180,-60" "non" (strcat "180,-" (rtos (* 60 ssl) 2 2)) "")
(ssadd (entlast) ssa)
(command "line" "non" "360,0" "non" (strcat "360,-" (rtos (* 60 ssl) 2 2)) "")
(ssadd (entlast) ssa)
(command "line" "non" "0,0" "non" "360,0" "")
(ssadd (entlast) ssa)
(command "line" "non" "0,-60" "non" "360,-60" "")
(ssadd (entlast) ssa)
(command "line" "non" "0,-120" "non" "360,-120" "")
(ssadd (entlast) ssa)
(command "-text" "non" "65,-105" "30" "0" "X")
(ssadd (entlast) ssa)
(command "-text" "non" "245,-105" "30" "0" "Y")
(ssadd (entlast) ssa)
(setq prop "径\tX座標\tY座標")
(repeat (sslength ss)
(setq ent (entget (ssname ss i)))
(setq kei (strcat "%%C"(rtos (* 2 (cdr (assoc 40 ent))) 2 0)))
(setq x (rtos (car (trans (cdr (assoc 10 ent)) 0 1)) 2 1))
(setq y (rtos (cadr (trans (cdr (assoc 10 ent)) 0 1)) 2 1))
(setq prop (strcat prop "\n" kei "\t" x "\t" y))
(command "line" "non" (strcat "0," (rtos (- -180 (* 60 i)) 2 2)) "non" (strcat "360," (rtos (- -180 (* 60 i)) 2 2)) "")
(ssadd (entlast) ssa)
(command "-text" "non" (strcat "15," (rtos (- -165 (* 60 i)) 2 2)) "30" "0" x)
(ssadd (entlast) ssa)
(command "-text" "non" (strcat "195," (rtos (- -165 (* 60 i)) 2 2)) "30" "0" y)
(ssadd (entlast) ssa)
(setq i (1+ i))
)
(command "-text" "non" "130,-45" "30" "0" kei)
(ssadd (entlast) ssa)
(command "move" ssa "" "non" "0,0" "non" gp "undo" "e")
(vl-load-com)
(setq html (vlax-create-object "htmlfile"))
(vlax-invoke (vlax-get (vlax-get html 'ParentWindow) 'ClipBoardData) 'setData "Text" prop)
(vlax-release-object html)
(print "選択した円のプロパティをクリップボードにコピーしました。")
)
)
(princ)
)
- 通りすがりの人
- 2024/04/11 (Thu) 19:26:21