沿两条线的连接点
有没有人能用lisp解决方案将等距点连接成两条相对的长线。这些线可能是弯曲的,也可能不平行。其思想是,该程序将沿着选定方向的两条直线工作,每次它碰到直线上的一个点时,它就会用一条多段线将它们连接起来。
我不知道这是否清楚
非常感谢 一种使用lisp的方法,而不是代码使用分割创建点,然后连接点,如果说每行5个点,那么1-6 2-7 3-8 4-9 5-10。有些人现在可能不得不去工作了。 所以我想我理解你的帖子。在我的情况下,这些观点已经存在;我已经使用了>,我希望Autocad能够从一端沿直线连接点。所以我要找的不需要这一步。
我已经做了MATLAB编码,所以有一个编码的一般理解,但不知道LISP。有人知道如何把一些代码放在一起来实现这一点吗?
谢谢 churchntj,
列出两条多段线的顶点,然后entmakex取
列表1中的第一个端点和列表2中的第二个端点
(defun c:test (/ a b lst1 lst2)
;;; listpol by Gille Chanteau ;
;;; Returns the vertices list of any type of polyline (WCS coordinates) ;
;;; ;
;;; Argument ;
;;; en, a polyline (ename or vla-object) ;
(defun listpol (en / i p l)
(setq i (if (vlax-curve-IsClosed en)
(vlax-curve-getEndParam en)
(+ (vlax-curve-getEndParam en) 1)
)
)
(while (setq p (vlax-curve-getPointAtParam en (setq i (1- i))))
(setq l (cons (trans p 0 1 ) l))
)
)
;---------------------------------------------------------------------------------;
(setq lst1 (listpol (car (entsel "\Select First Polyline: ")))
lst2 (listpol (car (entsel "\Select Second Polyline: ")))
)
(mapcar '(lambda (a b) (entmakex (list (cons 0"LINE")
(cons 10 a)
(cons 11 b)
)
)
) lst1 lst2)
)
ymg做得好,你在这个例程中使用mapcar和lambda是相当自我解释的,有助于我理解函数。为此,我非常仁慈。
非常感谢。 bhull,
谢谢谢谢你的好话。
ymg公司 非常感谢,看起来很棒。
我当前不在带有Autocad的PC上。该LISP是否适用于沿两条样条曲线、多边形线、圆弧等或其组合的点?
谢谢 churchntj,
它将与arc一起工作。
通过样条,无论顶点由vlax曲线函数定义
将被加入。(这些不同于用于创建样条曲线的控制点)
所以我们可以说它有效。
ymg公司
嘿,好了,
好的,回到工作中,并尝试了Lisp程序。我不确定我是否很清楚地表达了我在寻找什么。
实际上,我在寻找放置在直线、多段线、样条曲线或圆弧上的点,以与放置在另一条线上的点连接。此外,理想情况下,这些点将由多段线而不是直线连接。它看起来与您显示的图像相同,只是这些点连接在一起,并且不是多段线的顶点。
我会包括一个附件,但有任何问题上传到论坛。 churchntj,
以下要求在系统上安装Express Tools。
多段线用作选择点的围栏。
(defun c:joinpt (/ a b en1 en2 enl1 enl2 flt lst1 lst2 p)
;;*************************************************************************;
;; getfencesel by ymg ;
;; ;
;; Arguments:en,Linear Entity Name (Polylines, Arc, Ellipse etc.) ;
;; flt,A valid Entity filer Ex: '((0 . "3DFACE"))or nil ;
;; ;
;; Returns: A Selection Set of Entities touching the selecting entity. ;
;; ;
;;Requires: Express Tools ;
;;*************************************************************************;
(defun getfencesel (en flt / fe px ss)
(acet-ss-zoom-extents (setq ss (ssadd en)))
(setq px (* 0.75 (acet-geom-pixel-unit))
fe (acet-list-remove-adjacent-dups (acet-geom-object-point-list en (/ px 2.0)))
ss (if flt (ssget "_F" fe flt) (ssget "_F" fe))
)
)
;;*************************************************************************;
;; mk_lwp by Alan J Thompson ;
;; Argument: pl, A list of points (2d or 3d) ;
;; Create an LWPolyline at Elevation 0, on Current Layer. ;
;; Return: Polyline Object ;
;;*************************************************************************;
(defun mk_lwp (pl)
(vlax-ename->vla-object
(entmakex
(append (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 90 (length pl))
'(70 . 0)
)
(mapcar '(lambda (p) (cons 10 (trans (list (car p) (cadr p)) 1 0))) pl)
)
)
)
)
(setq en1 (car (entsel "\nSelect First Polyline: "))
en2 (car (entsel "\nSelect Second Polyline: "))
flt '((0 . "POINT"))
enl1 (acet-ss-to-list (getfencesel en1 flt))
enl2 (acet-ss-to-list (getfencesel en2 flt))
)
(setq lst1 nil lst2 nil)
(foreach e enl1
(setq lst1 (cons (cdr (assoc 10 (entget e))) lst1))
)
(foreach e enl2
(setq lst2 (cons (cdr (assoc 10 (entget e))) lst2))
)
(mapcar '(lambda (a b) (mk_lwp (list a b))) lst1 lst2)
(princ)
)
在AlanJT例程的帮助下,点与LWpolyline连接
页:
[1]
2