Grrr Posted January 19, 2018 Share 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 Link to comment Share on other sites More sharing options...
ronjonp Posted January 19, 2018 Share Posted January 19, 2018 Nice job! Quote Link to comment Share on other sites More sharing options...
rlx Posted January 19, 2018 Share Posted January 19, 2018 c'est magnifique:winner: Quote Link to comment Share on other sites More sharing options...
Grrr Posted January 19, 2018 Author Share Posted January 19, 2018 Thanks guys, maybe it will be helpful for someone. Quote Link to comment Share on other sites More sharing options...
Dadgad Posted January 20, 2018 Share Posted January 20, 2018 Nicely done Grrr, thanks for sharing! Quote Link to comment Share on other sites More sharing options...
BIGAL Posted January 20, 2018 Share Posted January 20, 2018 Not greater than 180 is nice. Quote Link to comment Share on other sites More sharing options...
marko_ribar Posted January 20, 2018 Share 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 Link to comment Share on other sites More sharing options...
Grrr Posted January 20, 2018 Author Share 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 Link to comment Share on other sites More sharing options...
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.