Here could be a base engine :
- [b][color=BLACK]([/color][/b]defun c:test [b][color=FUCHSIA]([/color][/b]/ ss pl i en ed z e1 e2 ll lr ur ul[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]and [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]"LWPOLYLINE"[/color][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons 70 1[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons 90 4[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 0[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b] z [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 38 ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] pl nil[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]foreach g ed [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]= 10 [b][color=RED]([/color][/b]car g[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 g[b][color=PURPLE])[/color][/b] pl[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]cond [b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]/= 4 [b][color=RED]([/color][/b]length pl[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]alert [color=#2f4f4f]"Only 4 Point Rectangles Allowed"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]not [b][color=RED]([/color][/b]equal [b][color=PURPLE]([/color][/b]mapcar '[b][color=TEAL]([/color][/b]lambda [b][color=OLIVE]([/color][/b]a b[b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]* [b][color=GRAY]([/color][/b]+ a b[b][color=GRAY])[/color][/b] 0.5[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]nth 0 pl[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]nth 2 pl[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]mapcar '[b][color=TEAL]([/color][/b]lambda [b][color=OLIVE]([/color][/b]a b[b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]* [b][color=GRAY]([/color][/b]+ a b[b][color=GRAY])[/color][/b] 0.5[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]nth 1 pl[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]nth 3 pl[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] 1e-8[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]alert [color=#2f4f4f]"Not A True Rectangle"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]not [b][color=RED]([/color][/b]or [b][color=PURPLE]([/color][/b]equal 0 [b][color=TEAL]([/color][/b]angle [b][color=OLIVE]([/color][/b]nth 0 pl[b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]nth 1 pl[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] 1e-4[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]equal 0 [b][color=TEAL]([/color][/b]angle [b][color=OLIVE]([/color][/b]nth 1 pl[b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]nth 2 pl[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] 1e-4[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]alert [color=#2f4f4f]"Not An Orthographic Rectangle"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]T [b][color=BLUE]([/color][/b]setq e1 [b][color=RED]([/color][/b]distance [b][color=PURPLE]([/color][/b]nth 0 pl[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]nth 1 pl[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] e2 [b][color=RED]([/color][/b]distance [b][color=PURPLE]([/color][/b]nth 1 pl[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]nth 2 pl[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][color=#8b4513]; [b][color=BLUE]([/color][/b]alert [b][color=RED]([/color][/b]strcat [color=#2f4f4f]"Rectangle Size \n"[/color][/color][color=#8b4513]; [color=#2f4f4f]"Edge 1 = "[/color] [b][color=PURPLE]([/color][/b]rtos e1 2 2[b][color=PURPLE])[/color][/b] [color=#2f4f4f]"\n"[/color][/color][color=#8b4513]; [color=#2f4f4f]"Edge 2 = "[/color] [b][color=PURPLE]([/color][/b]rtos e2 2 2[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][/color] [b][color=BLUE]([/color][/b]setq ll [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]apply 'min [b][color=TEAL]([/color][/b]mapcar 'car pl[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]apply 'min [b][color=TEAL]([/color][/b]mapcar 'cadr pl[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] z[b][color=RED])[/color][/b] ur [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]apply 'max [b][color=TEAL]([/color][/b]mapcar 'car pl[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]apply 'max [b][color=TEAL]([/color][/b]mapcar 'cadr pl[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] z[b][color=RED])[/color][/b] lr [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]car ur[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]cadr ll[b][color=PURPLE])[/color][/b] z[b][color=RED])[/color][/b] ul [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]car ll[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]cadr ur[b][color=PURPLE])[/color][/b] z[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]nw_mdoor ll lr ur ul[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq i [b][color=GREEN]([/color][/b]1+ i[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][b][color=BLACK]([/color][/b]defun nw_mdoor [b][color=FUCHSIA]([/color][/b]ll lr ur ul / c bn[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq c 0[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]entmake [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]cons 0 [color=#2f4f4f]"BLOCK"[/color][b][color=MAROON])[/color][/b][b][color=MAROON]([/color][/b]cons 2 [color=#2f4f4f]"*U"[/color][b][color=MAROON])[/color][/b][b][color=MAROON]([/color][/b]cons 70 1[b][color=MAROON])[/color][/b][b][color=MAROON]([/color][/b]cons 10 ll[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]foreach d '[b][color=NAVY]([/color][/b]0.125 2.125 2.75[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]"3DFACE"[/color][b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 62 [b][color=BLUE]([/color][/b]setq c [b][color=RED]([/color][/b]1+ c[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 10 [b][color=BLUE]([/color][/b]polar ll [b][color=RED]([/color][/b]* pi 0.25[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]* d [b][color=PURPLE]([/color][/b]sqrt 2[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]cons 11 [b][color=BLUE]([/color][/b]polar lr [b][color=RED]([/color][/b]* pi 0.75[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]* d [b][color=PURPLE]([/color][/b]sqrt 2[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]cons 12 [b][color=BLUE]([/color][/b]polar ur [b][color=RED]([/color][/b]* pi 1.25[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]* d [b][color=PURPLE]([/color][/b]sqrt 2[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]cons 13 [b][color=BLUE]([/color][/b]polar ul [b][color=RED]([/color][/b]* pi 1.75[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]* d [b][color=PURPLE]([/color][/b]sqrt 2[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=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq bn [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"ENDBLK"[/color][b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 8 [color=#2f4f4f]"0"[/color][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]entmake [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=MAROON])[/color][/b][b][color=MAROON]([/color][/b]cons 2 bn[b][color=MAROON])[/color][/b][b][color=MAROON]([/color][/b]cons 10 ll[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]
If you want a true dynamic block, it would take a lot of work. I don't use them because these type of routines are dynamic in and of themselves.
The options and inputs are almost unlimited. ie door hinging, door pull style.
You could make the borders and stiles variable just as easily
Anyway, it is a starting point for you to develop further.
-David. |