> LeonidSN
Дело в том, что (я уже подробностей не помню, мне хватило результата) при некоторых условиях поведение с точки зрения пользователя окружности и дуги различается. И то, что в дуге показывается угол 360, не означает, что он таковым и является: он близок к 360, но не равен ему. Короче, чтоб не растекаться мыслию по древу: дуга должна оставаться дугой, окружность - окружностью.
Насчет динамического получения свойств:
В VLIDE можно выполнить такой кодик:
_$ (setq mask "vla-get-" lst (mapcar '(lambda(a) (substr a (1+ (strlen mask)))) (vl-remove-if-not '(lambda(x) (wcmatch(strcase x t) (strcat mask "*"))) (atoms-family 1))))
_$ (length lst)
596
Самое интересное - это lst. В нем хранятся все свойства, которые могут быть установлены для объектов в activex-варианте лиспа. Содержимое lst не показываю - там 596 (!) возможных свойств. Упаришься все вспоминать. Вариант для всех возможных свойств:
(defun c:conv-arc-to-circle (/ *error* adoc selset obj)
(defun *error* (msg)
(vla-endundomark adoc)
(princ msg)
(princ)
) ;_ end of defun
(vl-load-com)
(vla-startundomark
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
) ;_ end of vla-startundomark
(if (setq selset (ssget "_:L" '((0 . "ARC"))))
(foreach item (mapcar 'vlax-ename->vla-object
(vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
) ;_ end of mapcar
(setq obj (vla-addcircle
(vla-objectidtoobject adoc (vla-get-ownerid item))
(vla-get-center item)
(vla-get-radius item)
) ;_ end of vla-addcircle
) ;_ end of setq
(foreach prop (mapcar '(lambda (a) (substr a (1+ (strlen "vla-get-"))))
(vl-remove-if-not
'(lambda (x) (wcmatch (strcase x t) "vla-get-*"))
(atoms-family 1)
) ;_ end of vl-remove-if-not
) ;_ end of mapcar
(vl-catch-all-apply
'(lambda ()
(vlax-put-property obj prop (vlax-get-property item prop))
) ;_ end of lambda
) ;_ end of vl-catch-all-apply
) ;_ end of foreach
(vla-erase item)
) ;_ end of foreach
) ;_ end of if
(vla-endundomark adoc)
(princ)
) ;_ end of defun
Но! Тут есть одно "но". Если OCS для исходной дуги не совпадает с текущей, при таком подходе возможен "глюк" - окружность "улетит" черт-те куда. Можно, конечно, обойти, но уже лениво.
P.S.
В дискуссии типа "Какой язык программирования лучшее" не дам себя втянуть.
Мне это уже неизвестно :) 2,5 языка приходится в голове держать, мозги кипять :D