Jump to content

PolyDim - Angular


Grrr

Recommended Posts

Hi guys,

So I had to measure a few rooms that have non-orthogonal walls and it was my very first time to place multiple angular dimensions.

Thought that I had such routine already - but I was unable to find it, so I rebrowsed the PDIM thread again and was dissapointed that if I had such I didn't got it from there.

Maybe I've got it from the CAD Tips on cadalyst dot com - whateva.

That was from quite a while, So now I was forced to write my version:

 


[color=#8b4513]; PolyDimAngular[/color]
[color=#8b4513]; Dimensions LWPolylines, using angular dimensions[/color]
[b][color=BLACK]([/color][/b]defun C:test [b][color=FUCHSIA]([/color][/b] / SS off spc mid i enx pL [b][color=FUCHSIA])[/color][/b]
 
 [b][color=FUCHSIA]([/color][/b]cond
   [b][color=NAVY]([/color][/b] [b][color=MAROON]([/color][/b]setq SS [b][color=GREEN]([/color][/b]ssget [color=#2f4f4f]"_:L-I"[/color] '[b][color=BLUE]([/color][/b][b][color=RED]([/color][/b]0 . [color=#2f4f4f]"LWPOLYLINE"[/color][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]-4 . [color=#2f4f4f]"<NOT"[/color][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]-4 . [color=#2f4f4f]"<>"[/color][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]42 . 0.0[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]-4 . [color=#2f4f4f]"NOT>"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
     [color=#8b4513]; [b][color=MAROON]([/color][/b]setq off [b][color=GREEN]([/color][/b]getdist [color=#2f4f4f]"\nSpecify dimension offset: "[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][/color]
     [b][color=MAROON]([/color][/b]setq off [b][color=GREEN]([/color][/b]* 4 [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 41 [b][color=PURPLE]([/color][/b]tblsearch [color=#2f4f4f]"DIMSTYLE"[/color] [b][color=TEAL]([/color][/b]getvar 'dimstyle[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=MAROON])[/color][/b] [color=#8b4513]; DIMASZ[/color]
     [b][color=MAROON]([/color][/b]setq spc [b][color=GREEN]([/color][/b]vla-get-Block [b][color=BLUE]([/color][/b]vla-get-ActiveLayout [b][color=RED]([/color][/b]vla-get-ActiveDocument [b][color=PURPLE]([/color][/b]vlax-get-acad-object[b][color=PURPLE])[/color][/b][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 mid [b][color=GREEN]([/color][/b]lambda [b][color=BLUE]([/color][/b]p1 p2[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]mapcar [b][color=RED]([/color][/b]function [b][color=PURPLE]([/color][/b]lambda [b][color=TEAL]([/color][/b]a b[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]* 0.5 [b][color=OLIVE]([/color][/b]+ a b[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] p1 p2[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
     [b][color=MAROON]([/color][/b]repeat [b][color=GREEN]([/color][/b]setq i [b][color=BLUE]([/color][/b]sslength SS[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
       [b][color=GREEN]([/color][/b]setq enx [b][color=BLUE]([/color][/b]entget [b][color=RED]([/color][/b]ssname SS [b][color=PURPLE]([/color][/b]setq i [b][color=TEAL]([/color][/b]1- i[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]
       [color=#8b4513]; [b][color=GREEN]([/color][/b]setq pL [b][color=BLUE]([/color][/b]mapcar 'cdr [b][color=RED]([/color][/b]vl-remove-if-not [b][color=PURPLE]([/color][/b]function [b][color=TEAL]([/color][/b]lambda [b][color=OLIVE]([/color][/b]x[b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]= 10 [b][color=GRAY]([/color][/b]car x[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] enx[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][/color]
       [b][color=GREEN]([/color][/b]setq pL [b][color=BLUE]([/color][/b]apply [b][color=RED]([/color][/b]function append[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]mapcar [b][color=PURPLE]([/color][/b]function [b][color=TEAL]([/color][/b]lambda [b][color=OLIVE]([/color][/b]x[b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]if [b][color=GRAY]([/color][/b]= 10 [b][color=AQUA]([/color][/b]car x[b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b] [b][color=GRAY]([/color][/b]list [b][color=AQUA]([/color][/b]cdr x[b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] enx[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
       [b][color=GREEN]([/color][/b]and
         [b][color=BLUE]([/color][/b]= 1 [b][color=RED]([/color][/b]logand 1 [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 70 enx[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [color=#8b4513]; closed[/color]
         [b][color=BLUE]([/color][/b]setq pL [b][color=RED]([/color][/b]append [b][color=PURPLE]([/color][/b]list [b][color=TEAL]([/color][/b]last pL[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] pL [b][color=PURPLE]([/color][/b]list [b][color=TEAL]([/color][/b]car pL[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][color=#8b4513]; and[/color]
       [b][color=GREEN]([/color][/b]mapcar 
         [b][color=BLUE]([/color][/b]function 
           [b][color=RED]([/color][/b]lambda [b][color=PURPLE]([/color][/b]a b c / vtx p1 p2 o p [b][color=PURPLE])[/color][/b]
             [b][color=PURPLE]([/color][/b]and a b c
               [b][color=TEAL]([/color][/b]setq vtx b[b][color=TEAL])[/color][/b]
               [b][color=TEAL]([/color][/b]setq p1 [b][color=OLIVE]([/color][/b]polar b [b][color=GRAY]([/color][/b]angle b a[b][color=GRAY])[/color][/b] off[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b]
               [b][color=TEAL]([/color][/b]setq p2 [b][color=OLIVE]([/color][/b]polar b [b][color=GRAY]([/color][/b]angle b c[b][color=GRAY])[/color][/b] off[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b]
               [b][color=TEAL]([/color][/b]setq o
                 [b][color=OLIVE]([/color][/b]apply 'vla-AddDimAngular [color=#8b4513]; RetVal = object.AddDimAngular[b][color=GRAY]([/color][/b]AngleVertex, FirstEndPoint, SecondEndPoint, TextPoint[b][color=GRAY])[/color][/b][/color]
                   [b][color=GRAY]([/color][/b]cons spc
                     [b][color=AQUA]([/color][/b]mapcar 'vlax-3D-point
                       [b][color=LIME]([/color][/b]list 
                         vtx p1 p2
                         [color=#8b4513]; [b][color=SILVER]([/color][/b]mid p1 p2[b][color=SILVER])[/color][/b] ; <- this sucks[/color]
                         [b][color=SILVER]([/color][/b]polar b [b][color=YELLOW]([/color][/b]angle b [b][color=WHITE]([/color][/b]mid p1 p2[b][color=WHITE])[/color][/b][b][color=YELLOW])[/color][/b] off[b][color=SILVER])[/color][/b] [color=#8b4513]; <- this is way better[/color]
                       [b][color=LIME])[/color][/b][color=#8b4513]; list[/color]
                     [b][color=AQUA])[/color][/b][color=#8b4513]; mapcar 'vlax-3D-point[/color]
                   [b][color=GRAY])[/color][/b][color=#8b4513]; cons[/color]
                 [b][color=OLIVE])[/color][/b][color=#8b4513]; apply[/color]
               [b][color=TEAL])[/color][/b][color=#8b4513]; setq o[/color]
             [b][color=PURPLE])[/color][/b][color=#8b4513]; and[/color]
           [b][color=RED])[/color][/b][color=#8b4513]; lambda[/color]
         [b][color=BLUE])[/color][/b][color=#8b4513]; function[/color]
         pL
         [b][color=BLUE]([/color][/b]cdr pL[b][color=BLUE])[/color][/b]
         [b][color=BLUE]([/color][/b]cddr pL[b][color=BLUE])[/color][/b]
       [b][color=GREEN])[/color][/b][color=#8b4513]; mapcar[/color]
     [b][color=MAROON])[/color][/b][color=#8b4513]; repeat [/color]
   [b][color=NAVY])[/color][/b]
 [b][color=FUCHSIA])[/color][/b][color=#8b4513]; cond[/color]
 [b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b]
[b][color=BLACK])[/color][/b][color=#8b4513]; defun[/color]

 

PolyDimAngular.gif

 

Still I'd like to see your approaches, because I don't think mine is perfect and theres a way for improvement (like inner/outer dims).

Link to comment
Share on other sites

 

Perhaps that was the routine I was looking for... :)

 

 

FWIW, if one wants to add restriction to not dimension the obvious angles like 0/90/180/270/360:

 

Replace the lambda expression with:

(lambda (a b c / ang vtx p1 p2 o p )
 (and a b c
   (setq ang (LM:GetInsideAngle a b c))
   (cond
     ( (vl-some (function (lambda (x) (equal ang (* x PI) 1e-4))) '(0.0 0.5 1.0 1.5 2.0)) ) ; Restricted angles, and adjust the fuzz factor...
     (
       (setq vtx b)
       (setq p1 (polar b (angle b a) off))
       (setq p2 (polar b (angle b c) off))
       (setq o
         (apply 'vla-AddDimAngular ; RetVal = object.AddDimAngular(AngleVertex, FirstEndPoint, SecondEndPoint, TextPoint)
           (cons spc
             (mapcar 'vlax-3D-point
               (list 
                 vtx p1 p2
                 ; (mid p1 p2) ; <- this sucks
                 (polar b (angle b (mid p1 p2)) off) ; <- this is way better
               ); list
             ); mapcar 'vlax-3D-point
           ); cons
         ); apply
       ); setq o
     )
   ); cond
 ); and
); lambda

 

and include Lee's:

 

;; Get Inside Angle  -  Lee Mac
;; Returns the smaller angle subtended by three points with vertex at p2

(defun LM:GetInsideAngle ( p1 p2 p3 )
 (   (lambda ( a ) (min a (- (+ pi pi) a)))
   (rem (+ pi pi (- (angle p2 p1) (angle p2 p3))) (+ pi pi))
 )
)

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