(defun c:AvMid (/ ss lst)
;; Alan J. Thompson, 05.24.10
(if (setq ss (ssget '((0 . "ARC,LINE,*POLYLINE"))))
((lambda (i)
(while (setq e (ssname ss (setq i (1+ i))))
(setq lst (cons (vlax-curve-getPointatParam
e
(/ (+ (vlax-curve-getEndParam e)
(vlax-curve-getStartParam e)
)
2.
)
)
lst
)
)
)
(entmakex
(list '(0 . "POINT")
(cons 10
(mapcar
(function
(lambda (f)
(/ (apply (function +) (mapcar (function f) lst))
(length lst)
)
)
)
(list car cadr caddr)
)
)
)
)
)
-1
)
)
(princ)
) 发布变体很好-让大脑工作。。。
但请记住,您的代码效率极低-它必须在选择集中翻腾三次,然后每次也翻腾结果列表。。。 啊,你说得对。我将单步执行选择集部分放在mapcar语句中纯粹是偶然的。然而,你是对的。现在,我看了一下它,它平均了点的部分,它确实在最终列表中进行了不需要的次数。我想这会教会我早上第一件事就是编码。顺便说一句,评估最终列表的好方法。 谢谢伙计 所以,你的地图车。。。(列表l)等同于:
(mapcar (function (lambda (x) (/ x l)))
(apply (function mapcar)
(cons
(function +)
mLst
)
)
)
这段代码就是剪切光华。我印象深刻。
(apply (function mapcar)
(cons
(function +)
mLst
)
)
我也做过类似的事情,但从未将mapcar应用到其中。A+
我想提一个建议(非常轻微)。我会浮动我的列表长度。
只是为了避免将实数除以整数。
没错,我只是觉得我写的方式看起来更整洁
谢谢Alan,它只适合少数情况,我记得在这里也使用了这个结构。
很好的捕捉-我不会想到这一点-虽然我认为vlax曲线*返回的点是双倍的,但在执行除法时,它可能会稍微提高性能,避免数据类型转换(“类型提升”,我相信-或者至少在C++中)。 只是确认一下。
我以前也做过同样的事情。我只是在浏览你的代码时才注意到/想到它。
你还在学习C++吗?
仅控制台程序-习惯循环/条件/指针等。。我还没有考虑过以任何方式将其应用于AutoCAD,但我想说的是,我非常了解基本知识。
有趣的
你用什么作为知识库(书等)?
主要是一本书(由Herbert Schildt撰写),以及一些在线标题参考——但进展缓慢,因为我有点偏执于把我的系统搞砸,所以只有在我知道它完全正确时(无论如何,在处理数组/指针时)才会测试一些东西。。
页:
1
[2]