Jump to content

low points and high points on a 3d poly


iain9876

Recommended Posts

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?

Link to comment
Share on other sites

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'~

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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'~

Link to comment
Share on other sites

if the start point or end point have Z=0

program 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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...