iain9876 Posted December 1, 2009 Posted December 1, 2009 Sorry about the miss-spelt title! should be "Low points and high points on a 3d poly"! Does anyone have a routine to put low points and high points on a 3d poly? I have a 3d poly which goes up and down (various sags and crests) over half a mile. I need a routine that puts a cross and the text "HP" for a high point on the crest and "LP" for the low point on a sag in varying locations along this polyline. I know this one is going to be a challenge as the 3d polylines are not curves but straights. Anyone heard of a routine like this or have one? Quote
fixo Posted December 1, 2009 Posted December 1, 2009 Sorry about the miss-spelt title! should be "Low points and high points on a 3d poly"! Does anyone have a routine to put low points and high points on a 3d poly? I have a 3d poly which goes up and down (various sags and crests) over half a mile. I need a routine that puts a cross and the text "HP" for a high point on the crest and "LP" for the low point on a sag in varying locations along this polyline. I know this one is going to be a challenge as the 3d polylines are not curves but straights. Anyone heard of a routine like this or have one? The sample picture would be easier for understanding ~'J'~ Quote
David Bethel Posted December 1, 2009 Posted December 1, 2009 Here would be a basic starting point: [b][color=BLACK]([/color][/b]defun c:extz3dp [b][color=FUCHSIA]([/color][/b]/ ss i en ed vn vd pl maxz minz[b][color=FUCHSIA])[/color][/b] [color=#8b4513];;;ARG -> point text_value text_size[/color] [b][color=FUCHSIA]([/color][/b]defun make_tick [b][color=NAVY]([/color][/b]p v s[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"LINE"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 10 [b][color=BLUE]([/color][/b]polar p [b][color=RED]([/color][/b]* pi 0.25[b][color=RED])[/color][/b] s[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 11 [b][color=BLUE]([/color][/b]polar p [b][color=RED]([/color][/b]* pi 1.25[b][color=RED])[/color][/b] s[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]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"LINE"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 10 [b][color=BLUE]([/color][/b]polar p [b][color=RED]([/color][/b]* pi 0.75[b][color=RED])[/color][/b] s[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 11 [b][color=BLUE]([/color][/b]polar p [b][color=RED]([/color][/b]* pi 1.75[b][color=RED])[/color][/b] s[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]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"TEXT"[/color][b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 1 v[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 6 [color=#2f4f4f]"BYLAYER"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 7 [color=#2f4f4f]"STANDARD"[/color][b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 8 [color=#2f4f4f]"0"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 10 p[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 11 p[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 39 0.0[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 40 s[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 41 1.0[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 62 256[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 72 4[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]and [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget [color=#2f4f4f]"X"[/color] [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"POLYLINE"[/color][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons 66 1[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"CTAB"[/color][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cons 410 [b][color=PURPLE]([/color][/b]getvar [color=#2f4f4f]"CTAB"[/color][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cons 67 [b][color=PURPLE]([/color][/b]- 1 [b][color=TEAL]([/color][/b]getvar [color=#2f4f4f]"TILEMODE"[/color][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons -4 [color=#2f4f4f]"&"[/color][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons 70 8[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]setq i [b][color=MAROON]([/color][/b]sslength ss[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]minusp [b][color=BLUE]([/color][/b]setq i [b][color=RED]([/color][/b]1- i[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss i[b][color=GREEN])[/color][/b] ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b] vn [b][color=GREEN]([/color][/b]entnext en[b][color=GREEN])[/color][/b] vd [b][color=GREEN]([/color][/b]entget vn[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]= [color=#2f4f4f]"VERTEX"[/color] [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 0 vd[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]= 32 [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 70 vd[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq pl [b][color=BLUE]([/color][/b]cons [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 10 vd[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] pl[b][color=BLUE])[/color][/b] vn [b][color=BLUE]([/color][/b]entnext vn[b][color=BLUE])[/color][/b] vd [b][color=BLUE]([/color][/b]entget vn[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]foreach v pl [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]not maxz[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq maxz v[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]not minz[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq minz v[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]>= [b][color=BLUE]([/color][/b]caddr v[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]caddr maxz[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq maxz v[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]<= [b][color=BLUE]([/color][/b]caddr v[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]caddr minz[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq minz v[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]make_tick minz [color=#2f4f4f]"LP"[/color] 2[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]make_tick maxz [color=#2f4f4f]"HP"[/color] 2[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] Some limits or thing to address: What happens if there are 2 or more points that have the min or max z values Filter only 3DPOLYINEs Uses VERTEX control points only A (ssget) filter to skip curved fitted 3DPOLYs would be nice Adjust the call to make_tick for size Adjust make_tick TEXT values to your needs -David Quote
fixo Posted December 1, 2009 Posted December 1, 2009 Here would be a basic starting point: Some limits or thing to address: What happens if there are 2 or more points that have the min or max z values Filter only 3DPOLYINEs Uses VERTEX control points only A (ssget) filter to skip curved fitted 3DPOLYs would be nice Adjust the call to make_tick for size Adjust make_tick TEXT values to your needs -David Hi David Nice code as always! I have found one more limit: if the start point or end point have Z=0 program failed ~'J'~ Quote
David Bethel Posted December 1, 2009 Posted December 1, 2009 if the start point or end point have Z=0program failed That doesn't surprise me Maybe this will help: [b][color=BLACK]([/color][/b]defun c:extz3dp [b][color=FUCHSIA]([/color][/b]/ ss i en ed vn vd pl maxz minz[b][color=FUCHSIA])[/color][/b] [color=#8b4513]; [b][color=FUCHSIA]([/color][/b]*-debug-* 9 [color=#2f4f4f]"extz3pd"[/color][b][color=FUCHSIA])[/color][/b][/color] [color=#8b4513];;;ARG -> point text_value text_size[/color] [b][color=FUCHSIA]([/color][/b]defun make_tick [b][color=NAVY]([/color][/b]p v s[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"LINE"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 10 [b][color=BLUE]([/color][/b]polar p [b][color=RED]([/color][/b]* pi 0.25[b][color=RED])[/color][/b] s[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 11 [b][color=BLUE]([/color][/b]polar p [b][color=RED]([/color][/b]* pi 1.25[b][color=RED])[/color][/b] s[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]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"LINE"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 10 [b][color=BLUE]([/color][/b]polar p [b][color=RED]([/color][/b]* pi 0.75[b][color=RED])[/color][/b] s[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 11 [b][color=BLUE]([/color][/b]polar p [b][color=RED]([/color][/b]* pi 1.75[b][color=RED])[/color][/b] s[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]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"TEXT"[/color][b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 1 v[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 6 [color=#2f4f4f]"BYLAYER"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 7 [color=#2f4f4f]"STANDARD"[/color][b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 8 [color=#2f4f4f]"0"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 10 p[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 11 p[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 39 1e-8[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 40 s[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 62 256[b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 72 4[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]if [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget [color=#2f4f4f]"X"[/color] [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"POLYLINE"[/color][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"CTAB"[/color][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cons 410 [b][color=PURPLE]([/color][/b]getvar [color=#2f4f4f]"CTAB"[/color][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cons 67 [b][color=PURPLE]([/color][/b]- 1 [b][color=TEAL]([/color][/b]getvar [color=#2f4f4f]"TILEMODE"[/color][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons -4 [color=#2f4f4f]"<NOT"[/color][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons -4 [color=#2f4f4f]"&"[/color][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons 70 4[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons -4 [color=#2f4f4f]"NOT>"[/color][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons -4 [color=#2f4f4f]"&"[/color][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons 70 8[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]progn [b][color=MAROON]([/color][/b]setq i [b][color=GREEN]([/color][/b]sslength ss[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]not [b][color=BLUE]([/color][/b]minusp [b][color=RED]([/color][/b]setq i [b][color=PURPLE]([/color][/b]1- i[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq en [b][color=BLUE]([/color][/b]ssname ss i[b][color=BLUE])[/color][/b] ed [b][color=BLUE]([/color][/b]entget en[b][color=BLUE])[/color][/b] vn [b][color=BLUE]([/color][/b]entnext en[b][color=BLUE])[/color][/b] vd [b][color=BLUE]([/color][/b]entget vn[b][color=BLUE])[/color][/b] pl nil[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]while [b][color=BLUE]([/color][/b]= [color=#2f4f4f]"VERTEX"[/color] [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 0 vd[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]setq pl [b][color=RED]([/color][/b]cons [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 10 vd[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] pl[b][color=RED])[/color][/b] vn [b][color=RED]([/color][/b]entnext vn[b][color=RED])[/color][/b] vd [b][color=RED]([/color][/b]entget vn[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq maxz [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]car pl[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] minz [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]car pl[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]foreach v pl [b][color=BLUE]([/color][/b]cond [b][color=RED]([/color][/b][b][color=PURPLE]([/color][/b]equal v [b][color=TEAL]([/color][/b]car maxz[b][color=TEAL])[/color][/b] 1e-8[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=PURPLE]([/color][/b]> [b][color=TEAL]([/color][/b]caddr v[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]caddr [b][color=OLIVE]([/color][/b]car maxz[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]setq maxz [b][color=TEAL]([/color][/b]list v[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=PURPLE]([/color][/b]equal [b][color=TEAL]([/color][/b]caddr v[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]caddr [b][color=OLIVE]([/color][/b]car maxz[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] 1e-8[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]setq maxz [b][color=TEAL]([/color][/b]cons v maxz[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=PURPLE]([/color][/b]equal v [b][color=TEAL]([/color][/b]car minz[b][color=TEAL])[/color][/b] 1e-8[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=PURPLE]([/color][/b]< [b][color=TEAL]([/color][/b]caddr v[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]caddr [b][color=OLIVE]([/color][/b]car minz[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]setq minz [b][color=TEAL]([/color][/b]list v[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=PURPLE]([/color][/b]equal [b][color=TEAL]([/color][/b]caddr v[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]caddr [b][color=OLIVE]([/color][/b]car minz[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] 1e-8[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]setq minz [b][color=TEAL]([/color][/b]cons v minz[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]foreach p minz [b][color=BLUE]([/color][/b]make_tick p [color=#2f4f4f]"LP"[/color] 2[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]foreach p maxz [b][color=BLUE]([/color][/b]make_tick p [color=#2f4f4f]"HP"[/color] 2[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]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] -David Quote
Lee Mac Posted December 1, 2009 Posted December 1, 2009 This should mark all the Peaks and Troughs on your polyline: ;; High-Low Point ~ Lee McDonnell (Lee Mac) ~ 01.12.2009 (defun c:Hi_Low (/ mk_pt ent i pt dif t1 t2) (vl-load-com) (defun mk_pt (p txt) (entmake (list (cons 0 "LINE") (cons 10 (polar p (/ pi 4.) 2.)) (cons 11 (polar p (/ (* 5 pi) 4.) 2.)))) (entmake (list (cons 0 "LINE") (cons 10 (polar p (/ (* 3 pi) 4.) 2.)) (cons 11 (polar p (/ (* 7 pi) 4.) 2.)))) (entmake (list (cons 0 "TEXT") (cons 40 (getvar "TEXTSIZE")) (cons 1 txt) (cons 10 p) (cons 72 1) (cons 73 1) (cons 11 p)))) (while (progn (setq ent (car (entsel "\nSelect 3D-Polyline: "))) (cond ( (eq 'ENAME (type ent)) (if (eq "POLYLINE" (cdr (assoc 0 (entget ent)))) (if (and (not (eq 8 (logand 8 (cdr (assoc 70 (entget ent)))))) (eq 4 (logand 4 (cdr (assoc 70 (entget ent)))))) (princ "\n** Object Must not have Arc Vertices **") (progn (setq i (1- (vlax-curve-getStartParam ent))) (while (<= (setq i (1+ i)) (vlax-curve-getEndParam ent)) (setq pt (vlax-curve-getPointatParam ent i) dif (cond ( (eq (vlax-curve-getStartParam ent) i) (setq t2 (- (caddr pt) (caddr (vlax-curve-getPointatParam ent (+ i 0.5))))) (if (not (zerop t2)) t2)) ( (eq (vlax-curve-getEndParam ent) i) (setq t2 (- (caddr pt) (caddr (vlax-curve-getPointatParam ent (- i 0.5))))) (if (not (zerop t2)) t2)) (t (setq t1 (- (caddr pt) (caddr (vlax-curve-getPointatParam ent (+ i 0.5)))) t2 (- (caddr pt) (caddr (vlax-curve-getPointatParam ent (- i 0.5))))) (if (not (or (zerop t2) (minusp (/ t1 t2)))) t2)))) (if dif (mk_pt (vlax-curve-getPointatParam ent i) (if (minusp dif) "LP" "HP")))) t)) (princ "\n** Object Must be a 3D-Polyline **")))))) (princ)) Hope this helps, Lee Quote
iain9876 Posted December 7, 2009 Author Posted December 7, 2009 Lee Mac, that was an awsome bit of clever programming there. 10/10:D 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.