salman Posted January 10, 2010 Posted January 10, 2010 I want to write a LISP program in which I have 2 non parallel lines. The first line is offset towards the second line by specified distance. The second line is offset towards the first line by specified distance. Then I find the point of intersection of the newly created lines and earse them. But when I reach the point in code where I offset the first line. The program terminates (command "offset" dist1 ent1 o1 "") by printing 'invalid point' message on command line. If I check the values of variables used in the offset command by using !vaName on the autocAD command line. All variables have valid value and secondly if I execute the offset command (which is a part of the LISP routine) from the command line, it runs successfully. So why the command is not executing from inside the lisp routine even though all the variables are non nill. Please guide. Below is the code of the lisp routine. (defun fip() (vl-load-com) (setq pt1( getpoint"\n Select first entity: ")) (setq ent1(ssget pt1)) (setq ent1(ssname ent1 0)) (setq data1(entget ent1)) (setq fs(cdr(assoc 10 data1))) (setq fe(cdr(assoc 11 data1))) (setq dist1(getreal "\n Enter distance from current segment: ")) (setq pt2(getpoint "\n Select second entity: ")) (setq ent2(ssget pt2)) (setq ent2(ssname ent2 0)) (setq data2(entget ent2)) (setq ss(cdr(assoc 10 data2))) (setq se(cdr(assoc 11 data2))) (setq dist2(getreal "\n Enter distance from current segment: ")) ; Find the mid point of each line to be used for specifying offset side when offsetting other line. (setq o1(mPt ss se)) (setq o2(mPt fs fe)) ; Offset first line through midpoint of second line. (command "offset" dist1 ent1 o1 "") (setq entLast1(entlast)) ; Offset second line through midpoint of first line. (command "offset" dist2 ent2 o2 "") (setq entLast2(entlast)) ; Find the intersection point of the newly created entities. ; Which is the required reference point. (setq obj1(vlax-ename->vla-object entLast1) obj2(vlax-ename->vla-object entLast2)) (setq intersectionPt(vlax-safearray->list(vlax-variant-value(vla-intersectwith obj1 obj2 acExtendBoth)))) ; Now erase entLast1 & entLast2. (command "erase" entLast1 entLast2 "") (setq pt intersectionPt) ) MPT simply returns the mid point of the line segment. its working fine. Quote
BearDyugin Posted January 10, 2010 Posted January 10, 2010 Probably problem in function mPt, which creates a point o1. Where it? I have written so (setq o1(polar ss (angle ss se)(/(distance ss se)2))) (setq o2(polar fs (angle fs fe)(/(distance fs fe)2))) ,and all works well! Quote
Lee Mac Posted January 10, 2010 Posted January 10, 2010 Why does no-one want to read the sticky... Quote
David Bethel Posted January 10, 2010 Posted January 10, 2010 I think that I would lean more towards something like this: [b][color=BLACK]([/color][/b]defun c:oflns [b][color=FUCHSIA]([/color][/b]/ ss l1 l2 d1 d2 p10 p11 p20 p21 p30 p31 p40 p41 ipt ao of1 of2[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]defun mid_point [b][color=NAVY]([/color][/b]s e[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]mapcar '[b][color=MAROON]([/color][/b]lambda [b][color=GREEN]([/color][/b]a b[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]* [b][color=BLUE]([/color][/b]+ a b[b][color=BLUE])[/color][/b] 0.5[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] s e[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not ss[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\nSelect 2 Non-Parallel LINEs That Do Not Intersect:..."[/color][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"LINE"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]cond [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]not ss[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]/= [b][color=BLUE]([/color][/b]sslength ss[b][color=BLUE])[/color][/b] 2[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq ss nil[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]T [b][color=GREEN]([/color][/b]setq l1 [b][color=BLUE]([/color][/b]ssname ss 0[b][color=BLUE])[/color][/b] l2 [b][color=BLUE]([/color][/b]ssname ss 1[b][color=BLUE])[/color][/b] d1 [b][color=BLUE]([/color][/b]entget l1[b][color=BLUE])[/color][/b] d2 [b][color=BLUE]([/color][/b]entget l2[b][color=BLUE])[/color][/b] p10 [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 10 d1[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] p11 [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 11 d1[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] p20 [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 10 d2[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] p21 [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 11 d2[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]or [b][color=RED]([/color][/b]not [b][color=PURPLE]([/color][/b]inters p10 p11 p20 p21 nil[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]inters p10 p11 p20 p21[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]setq ss nil[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]redraw l1 3[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]initget 7[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq of1 [b][color=NAVY]([/color][/b]getdist [color=#2f4f4f]"\nOffset Distance From Line 1: "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]redraw l1[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]redraw l2 3[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]initget 7[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq of2 [b][color=NAVY]([/color][/b]getdist [color=#2f4f4f]"\nOffset Distance From Line 2: "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]redraw l2[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq ao [b][color=NAVY]([/color][/b]angle [b][color=MAROON]([/color][/b]mid_point p10 p11[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]mid_point p20 p21[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] p30 [b][color=NAVY]([/color][/b]polar p10 ao of1[b][color=NAVY])[/color][/b] p31 [b][color=NAVY]([/color][/b]polar p11 ao of1[b][color=NAVY])[/color][/b] p40 [b][color=NAVY]([/color][/b]polar p20 [b][color=MAROON]([/color][/b]+ ao pi[b][color=MAROON])[/color][/b] of2[b][color=NAVY])[/color][/b] p41 [b][color=NAVY]([/color][/b]polar p21 [b][color=MAROON]([/color][/b]+ ao pi[b][color=MAROON])[/color][/b] of2[b][color=NAVY])[/color][/b] ipt [b][color=NAVY]([/color][/b]inters p30 p31 p40 p41 nil[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]grvecs [b][color=NAVY]([/color][/b]list 1 p30 p31 2 p40 p41 3 p41 ipt 4 p31 ipt[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]prin1 ipt[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] -David Quote
BearDyugin Posted January 11, 2010 Posted January 11, 2010 A little not correctly considers, I would replace [b][color=FUCHSIA]([/color][/b]setq ao [b][color=NAVY]([/color][/b]angle [b][color=MAROON]([/color][/b]mid_point p10 p11[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]mid_point p20 p21[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] p30 [b][color=NAVY]([/color][/b]polar p10 ao of1[b][color=NAVY])[/color][/b] p31 [b][color=NAVY]([/color][/b]polar p11 ao of1[b][color=NAVY])[/color][/b] p40 [b][color=NAVY]([/color][/b]polar p20 [b][color=MAROON]([/color][/b]+ ao pi[b][color=MAROON])[/color][/b] of2[b][color=NAVY])[/color][/b] p41 [b][color=NAVY]([/color][/b]polar p21 [b][color=MAROON]([/color][/b]+ ao pi[b][color=MAROON])[/color][/b] of2[b][color=NAVY])[/color][/b] ipt [b][color=NAVY]([/color][/b]inters p30 p31 p40 p41 nil[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] on [b][color="Red"]([/color][color="Blue"]setq[/color] angl_1[color="Red"] ([/color][color="Blue"]angle[/color] p10 p11[color="Red"])[/color] angl_2 [color="red"]([/color][color="Blue"]angle[/color] p20 p21[color="Red"])[/color] angl_3[color="red"] ([/color][color="Blue"]angle[/color] p10 p20[color="Red"])[/color] angl_1 [color="red"]([/color][color="Blue"]if[/color] [color="Red"]([/color][color="Blue"]<[/color] angl_1 angl_3 [color="Red"]([/color][color="Blue"]+[/color] angl_1 [color="blue"]pi[/color][color="Red"]))[/color] [color="red"]([/color][color="Blue"]+[/color] angl_1 [color="Red"]([/color][color="Blue"]/ pi[/color] [color="Green"]2[/color][color="Red"])) ([/color][color="Blue"]- [/color]angl_1 [color="Red"]([/color][color="Blue"]/ pi[/color] [color="green"]2[/color][color="Red"])) )[/color] angl_2 [color="red"]([/color][color="Blue"]if[/color] [color="Red"]([/color][color="Blue"]<[/color] angl_2 [color="Red"]([/color][color="Blue"]+ [/color]angl_3 [color="green"]180[/color][color="Red"]) ([/color][color="Blue"]+[/color] angl_2 [color="blue"]pi[/color][color="Red"])) ([/color][color="Blue"]+ [/color]angl_2 [color="Red"]([/color][color="Blue"]/ pi[/color] [color="green"]2[/color][color="Red"])) ([/color][color="Blue"]-[/color] angl_2 [color="Red"]([/color][color="Blue"]/ pi[/color] [color="green"]2[/color][color="Red"])) )[/color] p30 [color="red"]([/color][color="Blue"]polar[/color] p10 angl_1 of1[color="red"])[/color] p31 [color="red"]([/color][color="blue"]polar[/color] p11 angl_1 of1[color="red"])[/color] p40 [color="red"]([/color][color="blue"]polar[/color] p20 angl_2 of2[color="red"])[/color] p41 [color="red"]([/color][color="blue"]polar[/color] p21 angl_2 of2[color="red"])[/color] ipt [color="Red"]([/color][color="blue"]inters[/color] p30 p31 p40 p41[color="blue"] nil[/color][color="red"])[/color] [color="Red"])[/color][/b] Quote
David Bethel Posted January 11, 2010 Posted January 11, 2010 Yes, that make sense. I think the 180 would need to changed to pi. Correct? A little not correctly considers, I would replaceon [ angl_2 [color="red"]([/color][color="Blue"]if[/color] [color="Red"]([/color][color="Blue"]<[/color] angl_2 [color="Red"]([/color][color="Blue"]+ [/color]angl_3 [color="green"]180[/color][color="Red"]) ([/color][color="Blue"]+[/color] angl_2 [color="blue"]pi[/color][color="Red"])) ([/color][color="Blue"]+ [/color]angl_2 -David Quote
BearDyugin Posted January 11, 2010 Posted January 11, 2010 Yes, that make sense. I think the 180 would need to changed to pi. Correct? Yes, you are right certainly pi, but the most interesting that I carried out tests many variants of lines and all worked correctly... 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.