tikawawa 发表于 2022-7-6 16:18:40

我有一个类似的问题。。。我使用的是激光数控机床,为了正确进行切割,必须将多段线连接在一起,并且尽可能长。
 
 
(defun c:jln(/ l1 l2 fz)
(setvar "PEDITACCEPT" 1)
(if
   (and
   (setq l1(entsel "\nSelect first line > "))
   (setq l2(entsel "\nSelect second line > "))
   (setq fz(distance(cadr l1)(cadr l2)))
   (vl-cmdf "_.pedit" "_m" (car l1)(car l2) "" "_j" "_j" "_a" fz "")
   ); end and
   (c:jln)
   ); end if
(princ)
); end c:jln
 
我的画上有很多线条,有时候线条有些重叠。该程序当前在顶点之间绘制线。我想稍微改变一下节目。你能帮忙吗?
 
1) 我想在窗口中选择多行或多次单击,而不是先选择第一行,然后选择第二行。
 
2) 不要在顶点之间绘制一条线,而是提示“要连接的顶点之间的最大距离”。如果较小,顶点将移动并捕捉在一起,如果较大,则不会移动顶点以将其捕捉在一起。(如果顶点有点偏离,请将其连接起来)
 
3) 提示“要绘制线的顶点之间的最大距离”如果较小,程序将在顶点之间绘制线,如果较大,程序将不连接顶点。(如果顶点太远,请绘制一条线并将其连接起来)
 
4) 如果顶点距离小于一定距离,并且在它们之间已经绘制了线,则先将它们连接起来并删除额外的顶点。
 
我想这里可能有两个节目。
 
谢谢
 
阿斯米,你以前的节目很有帮助!!

Lee Mac 发表于 2022-7-6 16:23:56

这可能会帮助你-我写的另一个人在这里使用数控机床。
 

(defun c:pljoin    (/ *error* varLst oldVars oLst plnum ss)

   ;;   --- Error Trap ---
   (defun *error* (msg)
   (mapcar 'setvar varLst oldVars)
   (if (= msg "")
       (princ "\nFunction Complete.")
       (princ (strcat "\n" (strcase msg)))
   ) ;_end if
   (princ)
   ) ; end of *error*

   (setq varLst(list "CMDECHO" "PEDITACCEPT")
   oldVars (mapcar 'getvar varLst)
   ) ; end setq

   ;;   --- Error Trap ---

   (vl-load-com)
   (vlax-for l
       (vla-get-Layers
         (vla-get-ActiveDocument
         (vlax-get-acad-object)
         ) ;_end vla-get-ActiveDocument
       ) ;_end vla-get-Layers
   (setq oLst
      (cons (vla-get-Name l) oLst)
   ) ; end setq
   ) ; end vlax-for
   (setq oLst (reverse oLst))

   (setvar "cmdecho" 0)
   (setvar "PEDITACCEPT" 0)
   (setq plnum 0)
   (foreach lay oLst
   (if
       (setq ss (ssget "X"
               (list (cons 0 "LINE")
               (cons 410 (getvar "ctab"))
               (cons 8 lay)
               ) ;_end list
            ) ;_end ssget
       ) ;_end setq
          (progn
          (command "_pedit" "M" ss "" "Y" "J" "0.0" "")
          (setq plnum (+ (sslength ss) plnum))
          ) ;_end progn
   ) ;_end if
   ) ;_end foreach
   (*error* "")
   (alert (strcat (rtos plnum 2 0) " Polylines Created/Joined."))
   (princ)
) ;_end defun


页: 1 [2]
查看完整版本: 将2条线/线连接成一个sin