Grrr Posted January 19, 2018 Posted January 19, 2018 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] 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). Quote
Grrr Posted January 19, 2018 Author Posted January 19, 2018 Thanks guys, maybe it will be helpful for someone. Quote
marko_ribar Posted January 20, 2018 Posted January 20, 2018 Here is my oldie... http://forums.augi.com/showthread.php?168619-Automatically-dimension-all-sides-and-angles-of-selected-polylines-polygons M.R. Quote
Grrr Posted January 20, 2018 Author Posted January 20, 2018 Here is my oldie... http://forums.augi.com/showthread.php?168619-Automatically-dimension-all-sides-and-angles-of-selected-polylines-polygons M.R. 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)) ) ) 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.