saycaphe 发表于 2022-7-5 16:57:05

嗨Roy_04。
当我选择洋红色线时出错。
 
“选择洋红色线:;错误:错误参数类型:2D/3D点:(-1388.12 3.70499e-013 1668.58-791.629 5.12511e-013 2308.15)
 
如何解决这个问题?
 
谢谢
致以诚挚的问候!

Roy_043 发表于 2022-7-5 17:01:40

该线只能与每条多段线有一个交点。
请检查代码是否适用于Frames_2。dwg并发布新的dwg。

saycaphe 发表于 2022-7-5 17:05:31

具有Frames_2的代码正在工作。但当我尝试在同样的情况下工作时,它是无效的。
我尝试将帧保持在x0y上,并沿轴0z移动,然后旋转。
但也有错误。
 
你能看一下这幅画吗
 
谢谢
致以诚挚的问候!
图纸3.dwg

Roy_043 发表于 2022-7-5 17:09:31

当涉及到截面的三维对齐时,您的图形不一致。但新代码将处理第一个和最后一个图形。
 
在上一个图形中,有两个截面是闭合多段线。必须更仔细地拾取临时线的点,以避免它们相交两次。
 
下面是新代码。
代码将绘制(并删除)临时线。
仅移动红色多段线。
 
(defun KGA_Conv_Pickset_To_ObjectList (ss / i ret)
(if ss
   (repeat (setq i (sslength ss))
   (setq ret (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) ret))
   )
)
)

(defun c:Test ( / cur doc end errCnt inc lnObj ss sta vec)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-endundomark doc)
(vla-startundomark doc)
(if
   (and
   (setq sta (getpoint "\nStart point of temporary line (line may intersect every polyline only once!): "))
   (setq end (getpoint sta "\nEnd point of temporary line: "))
   (setq ss (ssget "_F" (list sta end) '((0 . "LWPOLYLINE") (62 . 1))))
   (setq inc (getreal "\nDistance between sections: "))
   )
   (progn
   (setq ss (KGA_Conv_Pickset_To_ObjectList ss))
   (setq errCnt 0)
   (setq vec (trans (list 0.0 0.0 (- inc)) 0 (vlax-get (car ss) 'normal))) ; Use the normal of the first object in ss.
   (setq cur '(0.0 0.0 0.0))
   (setq lnObj (vlax-invoke (vla-get-modelspace doc) 'addline (setq sta (trans sta 1 0)) (trans end 1 0)))
   (foreach
       plObj
       (mapcar
         'cadr
         (vl-sort
         (vl-remove
             nil
             (mapcar
               '(lambda (plObj / coordLst)
               (setq coordLst (vlax-invoke lnObj 'intersectwith plObj acextendnone))
               (if (= 3 (length coordLst))
                   (list (distance sta coordLst) plObj)
                   (progn
                     (setq errCnt (1+ errCnt))
                     nil
                   )
               )
               )
               ss
             )
         )
         '(lambda (a b) (< (car a) (car b)))
         )
       )
       (vlax-invoke plObj 'move '(0.0 0.0 0.0) (setq cur (mapcar '+ cur vec)))
   )
   (vla-delete lnObj)
   (if (/= 0 errCnt)
       (princ (strcat "\nError: skipped " (itoa errCnt) " polyline(s) that were intersected more than once "))
   )
   )
)
(vla-endundomark doc)
(princ)
)
页: 1 [2]
查看完整版本: Lisp沿z a移动对象