churchntj 发表于 2022-7-5 23:03:21

沿两条线的连接点

有没有人能用lisp解决方案将等距点连接成两条相对的长线。这些线可能是弯曲的,也可能不平行。
 
其思想是,该程序将沿着选定方向的两条直线工作,每次它碰到直线上的一个点时,它就会用一条多段线将它们连接起来。
 
我不知道这是否清楚
 
非常感谢

BIGAL 发表于 2022-7-5 23:09:01

一种使用lisp的方法,而不是代码使用分割创建点,然后连接点,如果说每行5个点,那么1-6 2-7 3-8 4-9 5-10。有些人现在可能不得不去工作了。

churchntj 发表于 2022-7-5 23:09:58

所以我想我理解你的帖子。在我的情况下,这些观点已经存在;我已经使用了>,我希望Autocad能够从一端沿直线连接点。所以我要找的不需要这一步。
 
我已经做了MATLAB编码,所以有一个编码的一般理解,但不知道LISP。有人知道如何把一些代码放在一起来实现这一点吗?
 
谢谢

ymg3 发表于 2022-7-5 23:13:39

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)
)

Bhull1985 发表于 2022-7-5 23:16:48

ymg做得好,你在这个例程中使用mapcar和lambda是相当自我解释的,有助于我理解函数。为此,我非常仁慈。
非常感谢。

ymg3 发表于 2022-7-5 23:20:06

bhull,
 
谢谢谢谢你的好话。
 
ymg公司

churchntj 发表于 2022-7-5 23:23:39

非常感谢,看起来很棒。
我当前不在带有Autocad的PC上。该LISP是否适用于沿两条样条曲线、多边形线、圆弧等或其组合的点?
 
谢谢

ymg3 发表于 2022-7-5 23:26:02

churchntj,
 
它将与arc一起工作。
 
通过样条,无论顶点由vlax曲线函数定义
将被加入。(这些不同于用于创建样条曲线的控制点)
 
所以我们可以说它有效。
 
ymg公司

churchntj 发表于 2022-7-5 23:29:15

嘿,好了,
 
好的,回到工作中,并尝试了Lisp程序。我不确定我是否很清楚地表达了我在寻找什么。
实际上,我在寻找放置在直线、多段线、样条曲线或圆弧上的点,以与放置在另一条线上的点连接。此外,理想情况下,这些点将由多段线而不是直线连接。它看起来与您显示的图像相同,只是这些点连接在一起,并且不是多段线的顶点。
我会包括一个附件,但有任何问题上传到论坛。

ymg3 发表于 2022-7-5 23:33:32

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
查看完整版本: 沿两条线的连接点