明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 949|回复: 2

[源码] VLA练习 直线中点画一个圆

[复制链接]
发表于 2019-9-11 22:21 | 显示全部楼层 |阅读模式
本帖最后由 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))









"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-9-13 20:28 | 显示全部楼层
;; vl函数太晦涩
  1. (defun c:tt ()
  2.   (setq s1 (car (entsel "\n选择直线: "))
  3.         p1 (vlax-curve-getStartPoint s1)
  4.         p2 (vlax-curve-getEndPoint s1)
  5.         pt (mapcar '(lambda (x y) (* (+ x y) 0.5)) p1 p2)
  6.   )
  7.   (entmake (list '(0 . "CIRCLE") (cons 10 pt) '(40 . 5)))
  8.   (princ)
  9. )

评分

参与人数 1明经币 +1 收起 理由
1291500406 + 1 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2019-9-12 08:08 | 显示全部楼层
写的很奇怪,这种写法存在以下问题,1、用户操作出错直接中断程序,2、大量使用时效率比正常写法降低不少,3、易读性太差,最后建议,mapcar适用于单次使用做大量操作,类似于调用command,大量用mapcar会大大降低效率,举个例子,你要删除10000个图元,你调用command一次删除很快,但是你要是调用10000次command每次删除一个,那估计你得等十几分钟了   
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-26 11:01 , Processed in 0.564961 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表