Manila Wolf 发表于 2022-7-5 13:25:00

错误:中的额外右对齐

当我加载以下lisp时,我看到命令行消息“error:extra right paren on input”,在这里寻找帮助:-
 

(defun c:Slice3DPoly ( / _FindZOnLine ed en i p1 p2 pl sl ss tp vd vl )

   ;; A modification by Lee Mac of the code by David Bethel found here:
   ;; http://www.cadtutor.net/forum/showthread.php?62556-3D-polyline-Intersection&p=426585&viewfull=1#post426585

   (defun _FindZOnLine ( fp p1 p2 )
       (cond
         (   (or (equal p1 p2 1e-11)
                   (equal (caddr p1) (caddr p2) 1e-11)
                   (equal (list (car p1) (cadr p1)) (list (car p2) (cadr p2)) 1e-11)
               )
               (caddr p1)
         )
         (   (+(caddr p1)
                   (*(-(caddr p2) (caddr p1))
                     (/(distance (list (car p1) (cadr p1)) (list (car fp) (cadr fp)))
                           (distance (list (car p1) (cadr p1)) (list (car p2) (cadr p2)))
                     )
                   )
               )
         )
       )
   )               
   
   (if
       (and
         (setq p1 (getpoint "\nSpecify First Point: "))
         (setq p2 (getpoint "\nSpecify Second Point: " p1))
         (setq ss (ssget "_F" (list p1 p2) '((0 . "POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 118) (-4 . "NOT>"))))
       )
       (progn
         (repeat (setq i (sslength ss))
               (setq en (ssname ss (setq i (1- i)))
                     ed (entgeten)
                     en (entnext en)
                     vd (entgeten)
                     vl nil
               )
               (while (eq "VERTEX" (cdr (assoc0 vd)))
                   (setq vl (cons(cdr (assoc 10 vd)) vl)
                         en (entnext en)
                         vd (entgeten)
                   )
               )
               (if (= 1 (logand 1 (cdr (assoc 70 ed))))
                   (setq sl (cons (mapcar 'list vl (append (cdr vl) (list (car vl)))) sl))
                   (setq sl (cons (mapcar 'list vl (cdr vl)) sl))
               )
         )
         (foreach s (apply 'append sl)
               (if
                   (setq tp
                     (inters p1 p2
                           (list (caars) (cadars))
                           (list (caadr s) (cadadr s))
                     )
                   )
                   (setq pl (cons (list (car tp) (cadr tp) (_FindZOnLine tp (car s) (cadr s))) pl))
               )
         )
         (entmakex '((0 . "POLYLINE") (10 0.0 0.0 0.0) (70 . ))
         (foreach x
               (vl-sort pl
                   (function
                     (lambda ( a b )
                           (<(distance p1 (list (car a) (cadr a)))
                               (distance p1 (list (car b) (cadr b)))
                           )
                     )
                   )
               )
               (entmakex (list '(0 . "VERTEX") (cons 10 x) '(70 . 32)))
         )
         (entmakex '((0 . "SEQEND")))
       )
   )
   (princ)
)
(vl-load-com) (princ)
此lisp可在此处找到:-
https://www.cadtutor.net/forum/topic/33301-3d-polyline-intersection/
一个有趣的Lisp程序,看起来像是李和大卫贝瑟尔之间的好作品。我想试试看它对我是否有用。
不确定我为什么会出错。我正在使用AutoCAD 2016。
非常感谢您的帮助。
非常感谢。

BIGAL 发表于 2022-7-5 13:32:15

需要一个额外的)来完成第一个defun检查使用20岁的Lisp程序。也使用记事本++
 

Manila Wolf 发表于 2022-7-5 13:35:41

感谢您的及时回复。
我试着分析你附件中的数字和问号。lsp。
我想不出那些是什么意思。
我仍然无法确定应该在哪一行添加额外的)。

dlanorh 发表于 2022-7-5 13:41:21

向下滚动代码。我已经指出了它应该去哪里”;

mr-blue 发表于 2022-7-5 13:45:06

问题在第61行。我编辑了代码

(entmakex '((0 . "POLYLINE") (10 0.0 0.0 0.0) (70 . ))至
70标志为空,因此我将其设置为8(是3d多段线),并添加了额外的参数来关闭语句。在我的机器上进行了测试,结果正常。顺便说一句,这是一个很棒的例行公事。作者的荣誉。
这是一个完整的程序和变化

(defun c:Slice3DPoly ( / _FindZOnLine ed en i p1 p2 pl sl ss tp vd vl )

   ;; A modification by Lee Mac of the code by David Bethel found here:
   ;; http://www.cadtutor.net/forum/showthread.php?62556-3D-polyline-Intersection&p=426585&viewfull=1#post426585

   (defun _FindZOnLine ( fp p1 p2 )
       (cond
         (   (or (equal p1 p2 1e-11)
                   (equal (caddr p1) (caddr p2) 1e-11)
                   (equal (list (car p1) (cadr p1)) (list (car p2) (cadr p2)) 1e-11)
               )
               (caddr p1)
         )
         (   (+(caddr p1)
                   (*(-(caddr p2) (caddr p1))
                     (/(distance (list (car p1) (cadr p1)) (list (car fp) (cadr fp)))
                           (distance (list (car p1) (cadr p1)) (list (car p2) (cadr p2)))
                     )
                   )
               )
         )
       )
   )               
   
   (if
       (and
         (setq p1 (getpoint "\nSpecify First Point: "))
         (setq p2 (getpoint "\nSpecify Second Point: " p1))
         (setq ss (ssget "_F" (list p1 p2) '((0 . "POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 118) (-4 . "NOT>"))))
       )
       (progn
         (repeat (setq i (sslength ss))
               (setq en (ssname ss (setq i (1- i)))
                     ed (entgeten)
                     en (entnext en)
                     vd (entgeten)
                     vl nil
               )
               (while (eq "VERTEX" (cdr (assoc0 vd)))
                   (setq vl (cons(cdr (assoc 10 vd)) vl)
                         en (entnext en)
                         vd (entgeten)
                   )
               )
               (if (= 1 (logand 1 (cdr (assoc 70 ed))))
                   (setq sl (cons (mapcar 'list vl (append (cdr vl) (list (car vl)))) sl))
                   (setq sl (cons (mapcar 'list vl (cdr vl)) sl))
               )
         )
         (foreach s (apply 'append sl)
               (if
                   (setq tp
                     (inters p1 p2
                           (list (caars) (cadars))
                           (list (caadr s) (cadadr s))
                     )
                   )
                   (setq pl (cons (list (car tp) (cadr tp) (_FindZOnLine tp (car s) (cadr s))) pl))
               )
         )
         (entmakex '((0 . "POLYLINE") (10 0.0 0.0 0.0)(70 . 8)))
         (foreach x
               (vl-sort pl
                   (function
                     (lambda ( a b )
                           (<(distance p1 (list (car a) (cadr a)))
                               (distance p1 (list (car b) (cadr b)))
                           )
                     )
                   )
               )
               (entmakex (list '(0 . "VERTEX") (cons 10 x) '(70 . 32)))
         )
         (entmakex '((0 . "SEQEND")))
       )
   )
   
   (princ)
)
(vl-load-com) (princ)

Manila Wolf 发表于 2022-7-5 13:51:45

 
感谢您回复德拉诺思。
不幸的是,修改后我收到了相同的错误消息?
这真是个谜。
 

Tharwat 发表于 2022-7-5 13:55:15

你好
试试这个。
4

Manila Wolf 发表于 2022-7-5 14:03:59

 
Blue先生,
真的非常感谢你。我很感谢你帮我解决这个问题。
这确实是一个令人印象深刻的惯例,我将使用。
我同样感谢作者李·麦克和大卫·贝瑟尔。
再次为Blue先生干杯。

Manila Wolf 发表于 2022-7-5 14:09:33

 
嗨,塔瓦,
你的鹰眼也发现了这个错误。
我非常感谢你抽出时间指出这一点。
干杯

Tharwat 发表于 2022-7-5 14:13:29

@对不起,我没有注意到你之前的帖子,你已经解决了这个问题。
随时欢迎你。
页: [1] 2
查看完整版本: 错误:中的额外右对齐