这是一个很好的代码,刚刚找到源线程,作者是蒂姆·威利。
无论如何,我的尝试如下:
- [color=#8b4513]; Align Objects with Justification[/color]
- [b][color=BLACK]([/color][/b]defun C:test [b][color=FUCHSIA]([/color][/b] / m mv *error* Lst s SS c acDoc i o d Lst2 sBL sTR dBL dTR[b][color=FUCHSIA])[/color][/b]
-
- [b][color=FUCHSIA]([/color][/b]defun m [b][color=NAVY]([/color][/b]p1 p2[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]apply 'mapcar [b][color=MAROON]([/color][/b]cons '[b][color=GREEN]([/color][/b]lambda [b][color=BLUE]([/color][/b]a b[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]/ [b][color=RED]([/color][/b]+ a b[b][color=RED])[/color][/b] 2.[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]list p1 p2[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 mv [b][color=NAVY]([/color][/b]o p1 p2[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]vlax-invoke o 'move p1 p2[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
- [b][color=FUCHSIA]([/color][/b]defun *error* [b][color=NAVY]([/color][/b]m[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]and acDoc [b][color=MAROON]([/color][/b]vla-EndUndoMark acDoc[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=NAVY]([/color][/b]print m[b][color=NAVY])[/color][/b][b][color=NAVY]([/color][/b]princ[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
- [b][color=FUCHSIA]([/color][/b]setq Lst
- [b][color=NAVY]([/color][/b]list
- [b][color=MAROON]([/color][/b]cons [color=#2f4f4f]"Left"[/color] '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]d[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cadr d[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]car [b][color=TEAL]([/color][/b]car s[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]cadr [b][color=TEAL]([/color][/b]cadr d[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]caddr [b][color=TEAL]([/color][/b]cadr d[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]
- [b][color=MAROON]([/color][/b]cons [color=#2f4f4f]"Center"[/color] '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]d[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cadddr d[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]car [b][color=TEAL]([/color][/b]caddr s[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]cadr [b][color=TEAL]([/color][/b]cadddr d[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]caddr [b][color=TEAL]([/color][/b]cadddr d[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]
- [b][color=MAROON]([/color][/b]cons [color=#2f4f4f]"Right"[/color] '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]d[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]caddr d[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]car [b][color=TEAL]([/color][/b]cadr s[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]cadr [b][color=TEAL]([/color][/b]caddr d[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]caddr [b][color=TEAL]([/color][/b]caddr d[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]
- [b][color=MAROON]([/color][/b]cons [color=#2f4f4f]"Top"[/color] '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]d[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]caddr d[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]car [b][color=TEAL]([/color][/b]caddr d[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]cadr [b][color=TEAL]([/color][/b]cadr s[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]caddr [b][color=TEAL]([/color][/b]caddr d[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]
- [b][color=MAROON]([/color][/b]cons [color=#2f4f4f]"Middle"[/color] '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]d[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cadddr d[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]car [b][color=TEAL]([/color][/b]cadddr d[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]cadr [b][color=TEAL]([/color][/b]caddr s[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]caddr [b][color=TEAL]([/color][/b]cadddr d[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]
- [b][color=MAROON]([/color][/b]cons [color=#2f4f4f]"Bottom"[/color] '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]d[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cadr d[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]car [b][color=TEAL]([/color][/b]cadr d[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]cadr [b][color=TEAL]([/color][/b]car s[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]caddr [b][color=TEAL]([/color][/b]cadr d[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]
- [b][color=NAVY])[/color][/b]
- [b][color=FUCHSIA])[/color][/b]
-
- [b][color=FUCHSIA]([/color][/b]setvar 'errno 0[b][color=FUCHSIA])[/color][/b]
- [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]/= 52 [b][color=MAROON]([/color][/b]getvar 'errno[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
- [b][color=NAVY]([/color][/b]setq s [b][color=MAROON]([/color][/b]car [b][color=GREEN]([/color][/b]entsel [color=#2f4f4f]"\nSelect base object for aligning <exit>: "[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
- [b][color=NAVY]([/color][/b]cond
- [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]= 7 [b][color=BLUE]([/color][/b]getvar 'errno[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]princ [color=#2f4f4f]"\nMissed."[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setvar 'errno 0[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
- [b][color=MAROON]([/color][/b]
- [b][color=GREEN]([/color][/b]and s
- [b][color=BLUE]([/color][/b]or
- [b][color=RED]([/color][/b]not [b][color=PURPLE]([/color][/b]vlax-method-applicable-p [b][color=TEAL]([/color][/b]vlax-ename->vla-object s[b][color=TEAL])[/color][/b] 'GetBoundingBox[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
- [b][color=RED]([/color][/b]vl-catch-all-error-p [b][color=PURPLE]([/color][/b]vl-catch-all-apply 'vla-GetBoundingBox [b][color=TEAL]([/color][/b]list [b][color=OLIVE]([/color][/b]vlax-ename->vla-object s[b][color=OLIVE])[/color][/b] 'sBL 'sTR[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=GREEN]([/color][/b]princ [color=#2f4f4f]"\nInvalid object."[/color][b][color=GREEN])[/color][/b]
- [b][color=MAROON])[/color][/b]
- [b][color=MAROON]([/color][/b]s
- [b][color=GREEN]([/color][/b]and
- [b][color=BLUE]([/color][/b]setq s [b][color=RED]([/color][/b]mapcar 'safearray-value [b][color=PURPLE]([/color][/b]list sBL sTR[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
- [b][color=BLUE]([/color][/b]setq s [b][color=RED]([/color][/b]append s [b][color=PURPLE]([/color][/b]list [b][color=TEAL]([/color][/b]apply 'm s[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
- [b][color=BLUE]([/color][/b]princ [color=#2f4f4f]"\nSelect objects to be aligned: "[/color][b][color=BLUE])[/color][/b]
- [b][color=BLUE]([/color][/b]setq SS [b][color=RED]([/color][/b]ssget [color=#2f4f4f]"_:L"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
- [b][color=BLUE]([/color][/b]not [b][color=RED]([/color][/b]initget [b][color=PURPLE]([/color][/b]apply 'strcat [b][color=TEAL]([/color][/b]mapcar '[b][color=OLIVE]([/color][/b]lambda [b][color=GRAY]([/color][/b]x[b][color=GRAY])[/color][/b] [b][color=GRAY]([/color][/b]strcat x [color=#2f4f4f]" "[/color][b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]mapcar 'car Lst[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
- [b][color=BLUE]([/color][/b]or
- [b][color=RED]([/color][/b]setq c
- [b][color=PURPLE]([/color][/b]getkword
- [b][color=TEAL]([/color][/b]strcat
- [color=#2f4f4f]"\nSpecify alignment option ["[/color]
- [b][color=OLIVE]([/color][/b]vl-string-right-trim [color=#2f4f4f]"/"[/color] [b][color=GRAY]([/color][/b]apply 'strcat [b][color=AQUA]([/color][/b]mapcar '[b][color=LIME]([/color][/b]lambda [b][color=SILVER]([/color][/b]x[b][color=SILVER])[/color][/b] [b][color=SILVER]([/color][/b]strcat x [color=#2f4f4f]"/"[/color][b][color=SILVER])[/color][/b][b][color=LIME])[/color][/b] [b][color=LIME]([/color][/b]mapcar 'car Lst[b][color=LIME])[/color][/b][b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b]
- [color=#2f4f4f]"]: <Center> "[/color]
- [b][color=TEAL])[/color][/b]
- [b][color=PURPLE])[/color][/b]
- [b][color=RED])[/color][/b]
- [b][color=RED]([/color][/b]setq c [color=#2f4f4f]"Center"[/color][b][color=RED])[/color][/b]
- [b][color=BLUE])[/color][/b]
- [b][color=BLUE]([/color][/b]progn
- [b][color=RED]([/color][/b]repeat [b][color=PURPLE]([/color][/b]setq i [b][color=TEAL]([/color][/b]sslength SS[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
- [b][color=PURPLE]([/color][/b]and
- [b][color=TEAL]([/color][/b]vlax-method-applicable-p [b][color=OLIVE]([/color][/b]setq o [b][color=GRAY]([/color][/b]vlax-ename->vla-object [b][color=AQUA]([/color][/b]ssname SS [b][color=LIME]([/color][/b]setq i [b][color=SILVER]([/color][/b]1- i[b][color=SILVER])[/color][/b][b][color=LIME])[/color][/b][b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b] 'GetBoundingBox[b][color=TEAL])[/color][/b]
- [b][color=TEAL]([/color][/b]not [b][color=OLIVE]([/color][/b]vl-catch-all-error-p [b][color=GRAY]([/color][/b]vl-catch-all-apply 'vla-GetBoundingBox [b][color=AQUA]([/color][/b]list o 'dBL 'dTR[b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b]
- [b][color=TEAL]([/color][/b]setq d [b][color=OLIVE]([/color][/b]mapcar 'safearray-value [b][color=GRAY]([/color][/b]list dBL dTR[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] [color=#8b4513]; o BL TR MC[/color]
- [b][color=TEAL]([/color][/b]setq d [b][color=OLIVE]([/color][/b]append [b][color=GRAY]([/color][/b]list o[b][color=GRAY])[/color][/b] d [b][color=GRAY]([/color][/b]list [b][color=AQUA]([/color][/b]apply 'm d[b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b]
- [b][color=TEAL]([/color][/b]setq Lst2 [b][color=OLIVE]([/color][/b]cons d Lst2[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b]
- [b][color=PURPLE])[/color][/b][color=#8b4513]; and[/color]
- [b][color=RED])[/color][/b][color=#8b4513]; repeat[/color]
- [b][color=RED]([/color][/b]if Lst2
- [b][color=PURPLE]([/color][/b]progn
- [b][color=TEAL]([/color][/b]setq acDoc [b][color=OLIVE]([/color][/b]vla-get-ActiveDocument [b][color=GRAY]([/color][/b]vlax-get-acad-object[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b]
- [b][color=TEAL]([/color][/b]or [b][color=OLIVE]([/color][/b]/= 8 [b][color=GRAY]([/color][/b]logand [b][color=AQUA]([/color][/b]getvar 'undoctl[b][color=AQUA])[/color][/b] 8[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]not [b][color=GRAY]([/color][/b]vla-EndUndoMark acDoc[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b] [b][color=TEAL])[/color][/b]
- [b][color=TEAL]([/color][/b]not [b][color=OLIVE]([/color][/b]vla-StartUndoMark acDoc[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b]
- [b][color=TEAL]([/color][/b]mapcar '[b][color=OLIVE]([/color][/b]lambda [b][color=GRAY]([/color][/b]x[b][color=GRAY])[/color][/b] [b][color=GRAY]([/color][/b]apply 'mv [b][color=AQUA]([/color][/b]append [b][color=LIME]([/color][/b]list [b][color=SILVER]([/color][/b]car x[b][color=SILVER])[/color][/b][b][color=LIME])[/color][/b] [b][color=LIME]([/color][/b][b][color=SILVER]([/color][/b]cdr [b][color=YELLOW]([/color][/b]assoc c Lst[b][color=YELLOW])[/color][/b][b][color=SILVER])[/color][/b] x[b][color=LIME])[/color][/b][b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b] Lst2[b][color=TEAL])[/color][/b]
- [b][color=TEAL]([/color][/b]and [b][color=OLIVE]([/color][/b]= 8 [b][color=GRAY]([/color][/b]logand [b][color=AQUA]([/color][/b]getvar 'undoctl[b][color=AQUA])[/color][/b] 8[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]vla-EndUndoMark acDoc[b][color=OLIVE])[/color][/b][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]setvar 'errno 52[b][color=GREEN])[/color][/b]
- [b][color=MAROON])[/color][/b]
- [b][color=NAVY])[/color][/b]
- [b][color=FUCHSIA])[/color][/b][color=#8b4513]; while[/color]
-
- [b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b]
- [b][color=BLACK])[/color][/b][color=#8b4513]; defun[/color]
|