1291500406 发表于 2019-9-11 22:21:40

VLA练习 直线中点画一个圆

本帖最后由 1291500406 于 2019-9-14 13:18 编辑

(defun c:bb( / bb )
(vla-getentity
(vla-get-utility
(vla-get-activedocument
(vlax-get-acad-object)
))
' bb ' ip"\n必强提示请选择直线")
(entmake
(list '(0 . "CIRCLE")
(append '(10)
(mapcar '(lambda (x) (/ x 2.0))
(mapcar '+
(vlax-curve-getStartPoint bb)
(vlax-curve-getEndPoint bb)
)))
(vl-list* 40 5)(cons 62 1)
))(princ))




(defun c:bb( / bb )(vl-load-com)
(vla-getentity(vla-get-utility(vla-get-activedocument(vlax-get-acad-object)))' bb ' ip"\n必强提示请选择直线")
(vla-put-color(vla-addcircle(vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
(vlax-3d-point(mapcar '(lambda (x y) (* (+ x y) 0.5))
(vlax-safearray->list(vlax-variant-value(vla-get-StartPoint bb)))
(vlax-safearray->list(vlax-variant-value(vla-get-EndPoint bb)))))5)1)
(princ))








xyp1964 发表于 2019-9-13 20:28:13

;; vl函数太晦涩
(defun c:tt ()
(setq s1 (car (entsel "\n选择直线: "))
        p1 (vlax-curve-getStartPoint s1)
        p2 (vlax-curve-getEndPoint s1)
        pt (mapcar '(lambda (x y) (* (+ x y) 0.5)) p1 p2)
)
(entmake (list '(0 . "CIRCLE") (cons 10 pt) '(40 . 5)))
(princ)
)

pengfei2010 发表于 2019-9-12 08:08:05

写的很奇怪,这种写法存在以下问题,1、用户操作出错直接中断程序,2、大量使用时效率比正常写法降低不少,3、易读性太差,最后建议,mapcar适用于单次使用做大量操作,类似于调用command,大量用mapcar会大大降低效率,举个例子,你要删除10000个图元,你调用command一次删除很快,但是你要是调用10000次command每次删除一个,那估计你得等十几分钟了   
页: [1]
查看完整版本: VLA练习 直线中点画一个圆