Jump to content

Points Inserts at intersection of Lines & at End of lines


structo

Recommended Posts

I have lost a solution or I called it some thing else so can not find, so here goes, only problem is you will get numerous points where multiple lines meet, so version two would be to remove duplicates.

 

; notested
(defun c:test ( / ss x obj stpt endpt)
(setq ss (ssget '((0 . "line"))))
(repeat (setq x (sslength ss))
(setq obj (vlax-ename->vla-object(ssname ss (setq x (- x 1)))))
(setq stpt (vlax-safearray->list (vlax-variant-value(vla-get-startpoint obj))))
(setq endpt (vlax-safearray->list (vlax-variant-value (vla-get-endpoint obj))))
(command "point" stpt "point" endpt)
)
)

Link to comment
Share on other sites

Well reply BIGAL,

yes duplicate points produced.

code is good with respect to start and end points of lines. but missing intersection points. please have a look about intersection lines points.

 

Thanks.

Missing.JPG

Edited by structo
Link to comment
Share on other sites

It is possible, but would be very inefficient on large files.

 

  • Are all entities 2D lines ?
  • Are all line the same elevation ?
  • You will need to specify a tolerance value
  • If PDMODE = 0, The point will not be visible

 

-David

Link to comment
Share on other sites

Dear DAVID,

 

 

  • Are all entities 2D lines ? >Yes
  • Are all line the same elevation ? >Yes
  • You will need to specify a tolerance value > Zero Tolerance
  • If PDMODE = 0, The point will not be visible> Ok
     

 

 

Thanks

Link to comment
Share on other sites

You will have to have some type of tolerance due the way REAL numbers are stored.

 

Maybe something like this :

 

[b][color=BLACK]([/color][/b]defun c:line-pt [b][color=FUCHSIA]([/color][/b]/ f pl ss i en ed p10 p11 c cn cd c10 c11 ip[b][color=FUCHSIA])[/color][/b]
[color=#8b4513];;;ROUND WITH PRECESSION[/color]
 [b][color=FUCHSIA]([/color][/b]defun rnd [b][color=NAVY]([/color][/b]n m[b][color=NAVY])[/color][/b]
   [b][color=NAVY]([/color][/b]* m [b][color=MAROON]([/color][/b]fix [b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]minusp n[b][color=RED])[/color][/b] - +[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]/ n m[b][color=BLUE])[/color][/b] 0.5[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]defun rp3 [b][color=NAVY]([/color][/b]p f[b][color=NAVY])[/color][/b]
   [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]rnd [b][color=GREEN]([/color][/b]nth 0 p[b][color=GREEN])[/color][/b] f[b][color=MAROON])[/color][/b]
         [b][color=MAROON]([/color][/b]rnd [b][color=GREEN]([/color][/b]nth 1 p[b][color=GREEN])[/color][/b] f[b][color=MAROON])[/color][/b]
         [b][color=MAROON]([/color][/b]rnd [b][color=GREEN]([/color][/b]nth 2 p[b][color=GREEN])[/color][/b] f[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]

 [b][color=FUCHSIA]([/color][/b]initget 6[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]setq f [b][color=NAVY]([/color][/b]getdist [color=#2f4f4f]"\nFuzz Tolerance <1e-4>:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]or f [b][color=NAVY]([/color][/b]setq f 1e-4[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]setq ss [b][color=MAROON]([/color][/b]ssget [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 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=FUCHSIA])[/color][/b]

 [b][color=FUCHSIA]([/color][/b]setq i 0[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]setq en [b][color=MAROON]([/color][/b]ssname ss i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]setq ed [b][color=MAROON]([/color][/b]entget en[b][color=MAROON])[/color][/b]
              p10 [b][color=MAROON]([/color][/b]rp3 [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 10 ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] f[b][color=MAROON])[/color][/b]
              p11 [b][color=MAROON]([/color][/b]rp3 [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 11 ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] f[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]member p10 pl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
            [b][color=MAROON]([/color][/b]setq pl [b][color=GREEN]([/color][/b]cons p10 pl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]member p11 pl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
            [b][color=MAROON]([/color][/b]setq pl [b][color=GREEN]([/color][/b]cons p11 pl[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]1+ i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]

 [b][color=FUCHSIA]([/color][/b]princ [color=#2f4f4f]"\nSearching For Intersections...\n"[/color][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]setq i 0[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]setq en [b][color=MAROON]([/color][/b]ssname ss i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\r"[/color][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]prin1 en[b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]setq ed [b][color=MAROON]([/color][/b]entget en[b][color=MAROON])[/color][/b]
             p10 [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc 10 ed[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
             p11 [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc 11 ed[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
               c 0[b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq cn [b][color=GREEN]([/color][/b]ssname ss c[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
               [b][color=MAROON]([/color][/b]setq cd [b][color=GREEN]([/color][/b]entget cn[b][color=GREEN])[/color][/b]
                     c10 [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 10 cd[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                     c11 [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 11 cd[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
               [b][color=MAROON]([/color][/b]and [b][color=GREEN]([/color][/b]setq ip [b][color=BLUE]([/color][/b]inters p10 p11 c10 c11[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]setq ip [b][color=BLUE]([/color][/b]rp3 ip f[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]not [b][color=BLUE]([/color][/b]member ip pl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]setq pl [b][color=BLUE]([/color][/b]cons ip pl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
               [b][color=MAROON]([/color][/b]setq c [b][color=GREEN]([/color][/b]1+ c[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]1+ i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]

 [b][color=FUCHSIA]([/color][/b]setvar [color=#2f4f4f]"PDMODE"[/color] 3[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]foreach p pl
    [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"POINT"[/color][b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 10 p[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]

 

 

I tried it on 400 lines and it took about 5 seconds.

 

-David

Link to comment
Share on other sites

Dear DAVID,

thank you for your lisp. now all points are produced. but points are produced not at exact corners and end points. please find attached image.

 

and why asking your lisp Fuzz tolerance? no need to ask. please set as points should be developed at each start, end, intersections of lines. and duplicate points are developed. please modify.

 

 

Thanks.

point position wrong.JPG

Link to comment
Share on other sites

Try setting the tolerance to 1e-14. Comparing points is not an exact process. Especially if 1 of the point values is determined by another calculation call. ie. (inters) or (polar) Or a TRIM or EXTEND function has been applied. (member) tests must be exact equals in order to return T

 

-David

Link to comment
Share on other sites

Dear DAVID,

After changing to 1e-14, points are producing good. but at some intersection areas, duplicate points are developed. please have a look. and please remove fuzz tolerance option at command prompt box to direct developing of points.

 

Thanks.

Link to comment
Share on other sites

You're not listening very well

 

Try this :

 

Theoretically, these points are equal :

 

 (setq p1 (list 1000 3000 0))
 (setq tp (inters
            (polar (list 1000 3000 0) (* pi  0.5) 1000)
            (polar (list 1000 4000 0) (* pi -0.5) 1000)
            (polar (list 1000 2000 0)    pi        500)
            (polar (list 1500 2000 0) (* pi  0.5) 2000)
          ))


 (princ "\nEqual p1 tp : ") (prin1 (equal p1 tp))
 (princ "\nEqual p1 tp 1e-1  : ") (prin1 (equal p1 tp 1e-1))
 (princ "\nEqual p1 tp 1e-3  : ") (prin1 (equal p1 tp 1e-3))
 (princ "\nEqual p1 tp 1e-5  : ") (prin1 (equal p1 tp 1e-5))
 (princ "\nEqual p1 tp 1e-7  : ") (prin1 (equal p1 tp 1e-7))
 (princ "\nEqual p1 tp 1e-9  : ") (prin1 (equal p1 tp 1e-9))
 (princ "\nEqual p1 tp 1e-11 : ") (prin1 (equal p1 tp 1e-11))
 (princ "\nEqual p1 tp 1e-13 : ") (prin1 (equal p1 tp 1e-13))
 (princ "\nEqual p1 tp 1e-14 : ") (prin1 (equal p1 tp 1e-14))

 

But 1e-13 and 1e-14 return nil

 

It is the way computer store numbers that have more than 14 significant digits. Otherwise you are going to have points that appear to be duplicate but are actually close but not exact.

Link to comment
Share on other sites

Here, try my untested version...

 

[b][color=#FF0000]([/color][/b][color=BLUE]defun[/color] c:line-pt [b][color=#80FF00]([/color][/b] [color=BLUE]/[/color] ss i li p1 p2 k m li1 li2 ip pl [b][color=#80FF00])[/color][/b]
 [b][color=#80FF00]([/color][/b][color=BLUE]while[/color] [b][color=#00FFFF]([/color][/b][color=BLUE]not[/color] ss[b][color=#00FFFF])[/color][/b]
   [b][color=#00FFFF]([/color][/b][color=BLUE]setq[/color] ss [b][color=#0080FF]([/color][/b][color=BLUE]ssget[/color] '[b][color=#FF00FF]([/color][/b][b][color=#FF0000]([/color][/b]0 . [color=BROWN]"LINE"[/color][b][color=#FF0000])[/color][/b][b][color=#FF00FF])[/color][/b][b][color=#0080FF])[/color][/b][b][color=#00FFFF])[/color][/b]
 [b][color=#80FF00])[/color][/b]
 [b][color=#80FF00]([/color][/b][color=BLUE]repeat[/color] [b][color=#00FFFF]([/color][/b][color=BLUE]setq[/color] i [b][color=#0080FF]([/color][/b][color=BLUE]sslength[/color] ss[b][color=#0080FF])[/color][/b][b][color=#00FFFF])[/color][/b]
   [b][color=#00FFFF]([/color][/b][color=BLUE]setq[/color] li [b][color=#0080FF]([/color][/b][color=BLUE]ssname[/color] ss [b][color=#FF00FF]([/color][/b][color=BLUE]setq[/color] i [b][color=#FF0000]([/color][/b][color=BLUE]1-[/color] i[b][color=#FF0000])[/color][/b][b][color=#FF00FF])[/color][/b][b][color=#0080FF])[/color][/b][b][color=#00FFFF])[/color][/b]
   [b][color=#00FFFF]([/color][/b][color=BLUE]setq[/color] p1 [b][color=#0080FF]([/color][/b][color=BLUE]cdr[/color] [b][color=#FF00FF]([/color][/b][color=BLUE]assoc[/color] 10 [b][color=#FF0000]([/color][/b][color=BLUE]entget[/color] li[b][color=#FF0000])[/color][/b][b][color=#FF00FF])[/color][/b][b][color=#0080FF])[/color][/b][b][color=#00FFFF])[/color][/b]
   [b][color=#00FFFF]([/color][/b][color=BLUE]setq[/color] p2 [b][color=#0080FF]([/color][/b][color=BLUE]cdr[/color] [b][color=#FF00FF]([/color][/b][color=BLUE]assoc[/color] 11 [b][color=#FF0000]([/color][/b][color=BLUE]entget[/color] li[b][color=#FF0000])[/color][/b][b][color=#FF00FF])[/color][/b][b][color=#0080FF])[/color][/b][b][color=#00FFFF])[/color][/b]
   [b][color=#00FFFF]([/color][/b][color=BLUE]if[/color] [b][color=#0080FF]([/color][/b][color=BLUE]not[/color] [b][color=#FF00FF]([/color][/b][color=BLUE]vl-member-if[/color] '[b][color=#FF0000]([/color][/b][color=BLUE]lambda[/color] [b][color=#80FF00]([/color][/b] x [b][color=#80FF00])[/color][/b] [b][color=#80FF00]([/color][/b][color=BLUE]equal[/color] x p1 1e-10[b][color=#80FF00])[/color][/b][b][color=#FF0000])[/color][/b] pl[b][color=#FF00FF])[/color][/b][b][color=#0080FF])[/color][/b]
     [b][color=#0080FF]([/color][/b][color=BLUE]setq[/color] pl [b][color=#FF00FF]([/color][/b][color=BLUE]cons[/color] p1 pl[b][color=#FF00FF])[/color][/b][b][color=#0080FF])[/color][/b]
   [b][color=#00FFFF])[/color][/b]
   [b][color=#00FFFF]([/color][/b][color=BLUE]if[/color] [b][color=#0080FF]([/color][/b][color=BLUE]not[/color] [b][color=#FF00FF]([/color][/b][color=BLUE]vl-member-if[/color] '[b][color=#FF0000]([/color][/b][color=BLUE]lambda[/color] [b][color=#80FF00]([/color][/b] x [b][color=#80FF00])[/color][/b] [b][color=#80FF00]([/color][/b][color=BLUE]equal[/color] x p2 1e-10[b][color=#80FF00])[/color][/b][b][color=#FF0000])[/color][/b] pl[b][color=#FF00FF])[/color][/b][b][color=#0080FF])[/color][/b]
     [b][color=#0080FF]([/color][/b][color=BLUE]setq[/color] pl [b][color=#FF00FF]([/color][/b][color=BLUE]cons[/color] p2 pl[b][color=#FF00FF])[/color][/b][b][color=#0080FF])[/color][/b]
   [b][color=#00FFFF])[/color][/b]
 [b][color=#80FF00])[/color][/b]
 [b][color=#80FF00]([/color][/b][color=BLUE]setq[/color] i [b][color=#00FFFF]([/color][/b][color=BLUE]sslength[/color] ss[b][color=#00FFFF])[/color][/b] k -1[b][color=#80FF00])[/color][/b]
 [b][color=#80FF00]([/color][/b][color=BLUE]while[/color] [b][color=#00FFFF]([/color][/b][color=BLUE]<[/color] [b][color=#0080FF]([/color][/b][color=BLUE]setq[/color] k [b][color=#FF00FF]([/color][/b][color=BLUE]1+[/color] k[b][color=#FF00FF])[/color][/b][b][color=#0080FF])[/color][/b] i[b][color=#00FFFF])[/color][/b]
   [b][color=#00FFFF]([/color][/b][color=BLUE]setq[/color] m k[b][color=#00FFFF])[/color][/b]
   [b][color=#00FFFF]([/color][/b][color=BLUE]setq[/color] li1 [b][color=#0080FF]([/color][/b][color=BLUE]ssname[/color] ss k[b][color=#0080FF])[/color][/b][b][color=#00FFFF])[/color][/b]
   [b][color=#00FFFF]([/color][/b][color=BLUE]while[/color] [b][color=#0080FF]([/color][/b][color=BLUE]<[/color] [b][color=#FF00FF]([/color][/b][color=BLUE]setq[/color] m [b][color=#FF0000]([/color][/b][color=BLUE]1+[/color] m[b][color=#FF0000])[/color][/b][b][color=#FF00FF])[/color][/b] i[b][color=#0080FF])[/color][/b]
     [b][color=#0080FF]([/color][/b][color=BLUE]setq[/color] li2 [b][color=#FF00FF]([/color][/b][color=BLUE]ssname[/color] ss m[b][color=#FF00FF])[/color][/b][b][color=#0080FF])[/color][/b]
     [b][color=#0080FF]([/color][/b][color=BLUE]if[/color] [b][color=#FF00FF]([/color][/b][color=BLUE]setq[/color] ip [b][color=#FF0000]([/color][/b][color=BLUE]inters[/color] [b][color=#80FF00]([/color][/b][color=BLUE]cdr[/color] [b][color=#00FFFF]([/color][/b][color=BLUE]assoc[/color] 10 [b][color=#0080FF]([/color][/b][color=BLUE]entget[/color] li1[b][color=#0080FF])[/color][/b][b][color=#00FFFF])[/color][/b][b][color=#80FF00])[/color][/b] [b][color=#80FF00]([/color][/b][color=BLUE]cdr[/color] [b][color=#00FFFF]([/color][/b][color=BLUE]assoc[/color] 11 [b][color=#0080FF]([/color][/b][color=BLUE]entget[/color] li1[b][color=#0080FF])[/color][/b][b][color=#00FFFF])[/color][/b][b][color=#80FF00])[/color][/b] [b][color=#80FF00]([/color][/b][color=BLUE]cdr[/color] [b][color=#00FFFF]([/color][/b][color=BLUE]assoc[/color] 10 [b][color=#0080FF]([/color][/b][color=BLUE]entget[/color] li2[b][color=#0080FF])[/color][/b][b][color=#00FFFF])[/color][/b][b][color=#80FF00])[/color][/b] [b][color=#80FF00]([/color][/b][color=BLUE]cdr[/color] [b][color=#00FFFF]([/color][/b][color=BLUE]assoc[/color] 11 [b][color=#0080FF]([/color][/b][color=BLUE]entget[/color] li2[b][color=#0080FF])[/color][/b][b][color=#00FFFF])[/color][/b][b][color=#80FF00])[/color][/b][b][color=#FF0000])[/color][/b][b][color=#FF00FF])[/color][/b]
       [b][color=#FF00FF]([/color][/b][color=BLUE]if[/color] [b][color=#FF0000]([/color][/b][color=BLUE]not[/color] [b][color=#80FF00]([/color][/b][color=BLUE]vl-member-if[/color] '[b][color=#00FFFF]([/color][/b][color=BLUE]lambda[/color] [b][color=#0080FF]([/color][/b] x [b][color=#0080FF])[/color][/b] [b][color=#0080FF]([/color][/b][color=BLUE]equal[/color] x ip 1e-10[b][color=#0080FF])[/color][/b][b][color=#00FFFF])[/color][/b] pl[b][color=#80FF00])[/color][/b][b][color=#FF0000])[/color][/b]
         [b][color=#FF0000]([/color][/b][color=BLUE]setq[/color] pl [b][color=#80FF00]([/color][/b][color=BLUE]cons[/color] ip pl[b][color=#80FF00])[/color][/b][b][color=#FF0000])[/color][/b]
       [b][color=#FF00FF])[/color][/b]
     [b][color=#0080FF])[/color][/b]
   [b][color=#00FFFF])[/color][/b]
 [b][color=#80FF00])[/color][/b]
 [b][color=#80FF00]([/color][/b][color=BLUE]foreach[/color] p pl
   [b][color=#00FFFF]([/color][/b][color=BLUE]entmake[/color] [b][color=#0080FF]([/color][/b][color=BLUE]list[/color] '[b][color=#FF00FF]([/color][/b]0 . [color=BROWN]"POINT"[/color][b][color=#FF00FF])[/color][/b] [b][color=#FF00FF]([/color][/b][color=BLUE]cons[/color] 10 p[b][color=#FF00FF])[/color][/b][b][color=#0080FF])[/color][/b][b][color=#00FFFF])[/color][/b]
 [b][color=#80FF00])[/color][/b]
 [b][color=#80FF00]([/color][/b][color=BLUE]princ[/color][b][color=#80FF00])[/color][/b]
[b][color=#FF0000])[/color][/b]

HTH, M.R.

Edited by marko_ribar
Link to comment
Share on other sites

DAVID,

yes i dont know about lisp programming. i apologies for that, thank you for clarification. how to eliminate duplicates by your lisp.

 

Thanks.

Link to comment
Share on other sites

Interesting stuff, David !

Does that mean that the smallest tollerance in AutoCAD is 1e-14 ?

If so, then the smallest number would be 1* 1e-14 ?

Is there such thing as the smallest and the biggest number in Autocad ?

Sorry to spam with questions, but I find this intriguing.

Link to comment
Share on other sites

MARKO,

 

your code is good, but duplicates (points) are produced. any solution by your lisp?

 

Thanks.

 

Put little larger number in every appearance of number 1e-10... So try with 1e-8, or 1e-6...

Link to comment
Share on other sites

Put little larger number in every appearance of number 1e-10... So try with 1e-8, or 1e-6...

 

MARKO,

 

Yes, it is working.

 

Thanks.

Edited by structo
Link to comment
Share on other sites

DAVID,

yes i dont know about lisp programming. i apologies for that, thank you for clarification. how to eliminate duplicates by your lisp.

 

Thanks.

 

 

The same as with Marko's - Adjust the tolerance value

Link to comment
Share on other sites

Interesting stuff, David !

Does that mean that the smallest tollerance in AutoCAD is 1e-14 ?

Sorry to spam with questions, but I find this intriguing.

 

The smallest on the release I use is 1e-14

 

The is a largest limit, but I down't remember it

 

Google significant numbers for a better under standing

 

computers store real numbers with whole numbers having having president.

 

With a 15 digit significant limit

10. stores a max of 14 decimals

1000. stores a max of 12 decimals

 

This really comes into play when comparing values

 

(/ 2. 3.) always store the last decimal as 7

 

Command: (equal 0.666666 (/ 2. 3.))

nil

 

Command: (equal 0.666666 (/ 2. 3.) 1e-4)

T

[code]

 

So by using a tolerance factor, we can force comparisons to workable values.

 

HTH -David

Link to comment
Share on other sites

grr have a look at this make sure you zoom in on lunar lander foot pad.

 

BIGAL,

These are the values I got after zoom extents on everything on that dwg:

solarzextents.jpg

And this is the maximum possible zoom-in I could do:

solarzoomin.jpg

Ofcourse the luprec variable affects these numbers (valid integers for luprec are from 0 to 8 ), so thats why are shown 8 digits after the comma "."

 

 

David,

The info you provided is really helpful, thanks!

I did some tests with your example:

_$ (/ 2 3.)
0.666667
_$ (equal 0.666667 (/ 2 3.))
nil
_$ (equal 0.666667 (/ 2 3.) 1e-5)
T
_$ (equal 0.666667 (/ 2 3.) 1e-6)
T
_$ (equal 0.666667 (/ 2 3.) 1e-7)
nil

I am not sure if there is a variable to increase/decrease the precision, after the division (/ 2 3.) operation. However I've found the smallest comparsion limit on ACAD2015 which I use:

_$ (equal 0.6666666666666667 (/ 2 3.) 1e-16)
nil
_$ (equal 0.666666666666667 (/ 2 3.) 1e-15)
T
_$ 

And the further tests I did, perhaps show the limits:

; comparsion limit:
_$  (= (* 1 1e+100) (* 1 1e+101))
nil
_$  (= (* 1 1e+1000) (* 1 1e+1001))
T

; maximum/minimum number limit:
_$ (* 1 1e+100)
1.0e+100
_$ (* 1 1e+1000)
1.#INF
_$ (* 1 1e-100)
1.0e-100
_$ (* 1 1e-1000)
0.0

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...