Bill Tillman 发表于 2022-7-6 08:03:33

从两里中间画一条线

我的LISP程序创建了许多行来完成它的工作。我在一个区域,画的两条线需要连接在一条线的中点到另一条线的中点。
 
当然,这不起作用。在搜索中,我似乎没有找到任何关于如何使用LISP选择直线中点的信息。

Bill Tillman 发表于 2022-7-6 08:07:49

像往常一样,这个过程。。。当我想到一种新颖的方法时,我一点都不想点击post按钮。通过使用entget获取两条线的端点,然后使用一个小算法来计算中点,我解决了这个问题。

BIGAL 发表于 2022-7-6 08:13:31

只是一个建议
 

(setq l1 (entlast))
replace above with a defun
(midptline)this would call entlast and work out pt
(seqt L1 mpt)   

 
你可以让它成为一个全球defun->acad。然后从任何例程调用它。虽然这里发布的建议几乎都是使用常见defuns库的单一解决方案,但如果你打算编写很多例程,尤其是像这样的例程,那么生活会变得更加轻松。删除层名称的硬编码,这是可以做到的。

irneb 发表于 2022-7-6 08:14:34

有各种各样的方法可以做到这一点,但是你的代码中有4点,也许是这样的:
(defun midpoint (pt1 pt2 / )
(mapcar '(lambda (a b) (/ (+ a b) 2.)) pt1 pt2))
然后简单地这样称呼它:
(command "._LINE" "_None" (midpoint pt1 pt2) "_None" (midpoint pt3 pt4) "")
 
如果您甚至需要圆弧或多段线的中点,那么可以研究vlax曲线-*函数。

pBe 发表于 2022-7-6 08:20:34

;;;MidPoint Between 2 Point Using CAL
;;;ARG -> 2 Points
;;;RET -> PointList
;;; comment removed
(if (not (member "geomcal.arx" (arx)))
   (arxload "geomcal")
   )
(defun midpt (p1 p2)(cal "(p1+p2)/2"))

irneb 发表于 2022-7-6 08:23:28

虽然这很好(也是如何在lisp中获得cal调用的一个很好的示例),但这里有一个问题表明,使用ARX并不总是更好。
虽然所有3个都给出了相同的结果,但ARX实际上比正常的直接lisp思想慢得多。
这是因为在lispstringarx之间来回转换时的开销。

pBe 发表于 2022-7-6 08:25:59

 
哎呀,这太慢了。像乌龟一样慢。。。。像蜗牛一样慢。。。就像三趾树懒一样慢。。。像pBe打字技巧一样慢。。。。。
 
Irneb的观点。

irneb 发表于 2022-7-6 08:31:27

别误会我。这并不是说这是一个坏主意,在某些情况下,速度不算数(假设你得到两个拾取点之间的中点,然后由于用户单击这两个点所花费的时间,速度为零)。更不用说,这是一个5秒的差距32k分-所以在实践中,我认为没有人会注意到!
 
你的帖子确实展示了另一种选择,实际上它展示了更多

godofcad 发表于 2022-7-6 08:32:50

我认为这对你有帮助。。。。。。。
试试这个
 
(setq pt1 (getpoint))
(setq pt2 (getpoint))
(command "line" pt1 pt2 "")
(setq L1(entget(entlast)))
(setq mid_pt1(polar pt1 (angle pt1 pt2) (/ (distance pt1 pt2) 2)))

(setq pt3(getpoint))
(setq pt4(getpoint))
(command "line" pt3 pt4 "")
(setq l2(entget(entlast)))
(setq mid_pt2(polar pt3 (angle pt3 pt4) (/ (distance pt3 pt4) 2)))

(command "line" mid_pt1 mid_pt2 "")

godofcad 发表于 2022-7-6 08:36:19


 
:)
页: [1] 2
查看完整版本: 从两里中间画一条线