Manila Wolf Posted August 31, 2018 Posted August 31, 2018 Looking for some help here as I have the command line message "error: extra right paren on input" when I load the following lisp: - (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 (entget en) en (entnext en) vd (entget en) vl nil ) (while (eq "VERTEX" (cdr (assoc 0 vd))) (setq vl (cons (cdr (assoc 10 vd)) vl) en (entnext en) vd (entget en) ) ) (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 (caar s) (cadar s)) (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) This lisp can be found here: - https://www.cadtutor.net/forum/topic/33301-3d-polyline-intersection/ An interesting lisp that looks like good work between Lee Mac and David Bethel. I'd like to try it to see if it is useful to me. Not sure why I am getting the error. I am using AutoCAD 2016. Would appreciate help. Thank you. Quote
BIGAL Posted August 31, 2018 Posted August 31, 2018 Need a extra ) to finish the 1st defun checked using a 20 year old lisp. Used Notepad++ also wow.lsp Quote
Manila Wolf Posted August 31, 2018 Author Posted August 31, 2018 On 8/31/2018 at 3:12 AM, BIGAL said: Need a extra ) to finish the 1st defun checked using a 20 year old lisp. Used Notepad++ also wow.lspFetching info... Expand Thank you for your prompt reply Bigal. I tried to analyse the numbers and question marks in your attached wow.lsp. I couldn't figure out the meaning of those. I am still unable to figure out to which line I should add the additional ). Quote
dlanorh Posted August 31, 2018 Posted August 31, 2018 On 8/31/2018 at 2:54 AM, Manila Wolf said: Looking for some help here as I have the command line message "error: extra right paren on input" when I load the following lisp: - (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 (entget en) en (entnext en) vd (entget en) vl nil ) (while (eq "VERTEX" (cdr (assoc 0 vd))) (setq vl (cons (cdr (assoc 10 vd)) vl) en (entnext en) vd (entget en) ) ) (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 (caar s) (cadar s)) (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"))) ) ) );<<====Put extra parenthesis here (princ) ) (vl-load-com) (princ) This lisp can be found here: - https://www.cadtutor.net/forum/topic/33301-3d-polyline-intersection/ An interesting lisp that looks like good work between Lee Mac and David Bethel. I'd like to try it to see if it is useful to me. Not sure why I am getting the error. I am using AutoCAD 2016. Would appreciate help. Thank you. Expand Scroll down the Code. I've indicated where it should go with ";<<==" Quote
mr-blue Posted August 31, 2018 Posted August 31, 2018 The issue is on line 61. I edited the code from (entmakex '((0 . "POLYLINE") (10 0.0 0.0 0.0) (70 . )) to (entmakex '((0 . "POLYLINE") (10 0.0 0.0 0.0) (70 . 8))) The 70 flag was empty so I set it to 8 (is 3d polyline) and added an extra paranthesis to close the statement. Tested it on my machine and it works. Great routine by the way. Kudos to the authors. Here's the full routine with the change in it (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 (entget en) en (entnext en) vd (entget en) vl nil ) (while (eq "VERTEX" (cdr (assoc 0 vd))) (setq vl (cons (cdr (assoc 10 vd)) vl) en (entnext en) vd (entget en) ) ) (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 (caar s) (cadar s)) (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) Quote
Manila Wolf Posted August 31, 2018 Author Posted August 31, 2018 On 8/31/2018 at 9:26 AM, dlanorh said: Scroll down the Code. I've indicated where it should go with ";<<==" Expand Thank you for responding dlanorth. Unfortunately I am getting the same error message after the modification? Quite a mystery. Quote
Tharwat Posted August 31, 2018 Posted August 31, 2018 Hi, Try this. (entmakex '((0 . "POLYLINE") (10 0.0 0.0 0.0) (70 . 8))) ;; notice the number 8 along with one close paren. Quote
Manila Wolf Posted September 1, 2018 Author Posted September 1, 2018 On 8/31/2018 at 9:45 AM, mr-blue said: The issue is on line 61. I edited the code from (entmakex '((0 . "POLYLINE") (10 0.0 0.0 0.0) (70 . )) to (entmakex '((0 . "POLYLINE") (10 0.0 0.0 0.0) (70 . 8))) The 70 flag was empty so I set it to 8 (is 3d polyline) and added an extra paranthesis to close the statement. Tested it on my machine and it works. Great routine by the way. Kudos to the authors. Expand Mr Blue, Thank you very much indeed. I am grateful for your help in solving this. It is indeed an impressive routine that I will be using. I echo the thanks to authors Lee Mac and David Bethel. Cheers again Mr Blue. Quote
Manila Wolf Posted September 1, 2018 Author Posted September 1, 2018 On 8/31/2018 at 11:05 AM, Tharwat said: Hi, Try this. (entmakex '((0 . "POLYLINE") (10 0.0 0.0 0.0) (70 . 8))) ;; notice the number 8 along with one close paren. Expand Hi Tharwat, Your eagle eye also spotted the error. I thank you very much for also taking time to point this out. Cheers. Quote
Tharwat Posted September 1, 2018 Posted September 1, 2018 @mr-blue sorry I did not notice your earlier post which you already solved the issue. On 9/1/2018 at 6:20 AM, Manila Wolf said: Hi Tharwat, Your eagle eye also spotted the error. I thank you very much for also taking time to point this out. Cheers. Expand You are welcome anytime. Quote
BIGAL Posted September 3, 2018 Posted September 3, 2018 Just to clarify the old chkbrk lisp I have adds or subtracts a number for every time a ( or ) is found so the last line should be 0 meaning all brackets balance, if you have missing brackets you can look at the numbers say at the start of a while and look at end they should be the same number meaning a balance of brackets, its handy in big code. I have started using notepad++ so much easier for checking. Quote
mr-blue Posted September 3, 2018 Posted September 3, 2018 On 9/1/2018 at 6:18 AM, Manila Wolf said: Mr Blue, Thank you very much indeed. I am grateful for your help in solving this. It is indeed an impressive routine that I will be using. I echo the thanks to authors Lee Mac and David Bethel. Cheers again Mr Blue. Expand You're welcome! Happy I could help On 9/1/2018 at 6:32 AM, Tharwat said: @mr-blue sorry I did not notice your earlier post which you already solved the issue. Expand No worries, two heads are better than one! Plus, since I have just started using the forum my posts need to be moderated, it might have still been hidden when you posted. Quote
Tharwat Posted September 5, 2018 Posted September 5, 2018 On 9/3/2018 at 6:45 AM, mr-blue said: .... it might have still been hidden when you posted. Expand Yeah, I guess that was the case. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.