我只能解决这个问题(带有边界框比较的半自动):
[b][color=BLACK]([/color][/b]defun C:test [b][color=FUCHSIA]([/color][/b] / s sl d cen bp SS i e lst plst osm [b][color=FUCHSIA])[/color][/b][b][color=FUCHSIA]([/color][/b]setvar 'errno 0[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]redraw[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]princ [color=#2f4f4f]"\nSelect source proxy entity for reference <exit>: "[/color][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]setq s [b][color=MAROON]([/color][/b]ssget [color=#2f4f4f]"_+.:E:S"[/color] '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"ACAD_PROXY_ENTITY"[/color][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]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, try again."[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]= 'PICKSET [b][color=BLUE]([/color][/b]type s[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq s [b][color=BLUE]([/color][/b]ssname s 0[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]vla-GetBoundingBox [b][color=BLUE]([/color][/b]vlax-ename->vla-object s[b][color=BLUE])[/color][/b] 'll 'ur[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq sl [b][color=BLUE]([/color][/b]mapcar 'vlax-safearray->list [b][color=RED]([/color][/b]list ll ur[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq d [b][color=BLUE]([/color][/b]apply 'distance sl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq cen [b][color=BLUE]([/color][/b]mapcar '[b][color=RED]([/color][/b]lambda [b][color=PURPLE]([/color][/b]a b[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]/ [b][color=TEAL]([/color][/b]+ a b[b][color=TEAL])[/color][/b] 2.[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]car sl[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cadr sl[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]command [color=#2f4f4f]"_.EXPLODE"[/color] s[b][color=GREEN])[/color][/b] [color=#8b4513]; I don't want to explode it, only the proxy's basept to be snappable[/color] [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]setq bp [b][color=RED]([/color][/b]getpoint [color=#2f4f4f]"\nSpecify its base point for reference < exit >: "[/color] cen[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]progn [b][color=RED]([/color][/b]setq sl [b][color=PURPLE]([/color][/b]list d [b][color=TEAL]([/color][/b]angle cen bp[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]distance cen bp[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]grdraw cen bp 1 1[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]setq plst [b][color=PURPLE]([/color][/b]cons bp plst[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]setq sl nil[b][color=BLUE])[/color][/b] [b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setvar 'errno 52[b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]T nil[b][color=MAROON])[/color][/b] [b][color=NAVY])[/color][/b][color=#8b4513]; cond[/color][b][color=FUCHSIA])[/color][/b][color=#8b4513]; while[/color][b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]and sl [color=#8b4513]; [b][color=MAROON]([/color][/b]princ [color=#2f4f4f]"\nSelect proxy objects: "[/color][b][color=MAROON])[/color][/b][/color] [b][color=MAROON]([/color][/b]setq SS [b][color=GREEN]([/color][/b]ssget [color=#2f4f4f]"_X"[/color] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cons 0 [color=#2f4f4f]"ACAD_PROXY_ENTITY"[/color][b][color=RED])[/color][/b][b][color=RED]([/color][/b]if [b][color=PURPLE]([/color][/b]= 1 [b][color=TEAL]([/color][/b]getvar 'cvport[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]cons 410 [b][color=TEAL]([/color][/b]getvar 'ctab[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] '[b][color=PURPLE]([/color][/b]410 . [color=#2f4f4f]"Model"[/color][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=NAVY]([/color][/b]progn [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 e [b][color=BLUE]([/color][/b]ssname SS [b][color=RED]([/color][/b]setq i [b][color=PURPLE]([/color][/b]1- i[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]vla-GetBoundingBox [b][color=BLUE]([/color][/b]vlax-ename->vla-object e[b][color=BLUE])[/color][/b] 'll 'ur[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq lst [b][color=BLUE]([/color][/b]mapcar 'vlax-safearray->list [b][color=RED]([/color][/b]list ll ur[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]equal [b][color=RED]([/color][/b]setq d [b][color=PURPLE]([/color][/b]apply 'distance lst[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]car sl[b][color=RED])[/color][/b] 1e-8[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]progn [b][color=RED]([/color][/b]setq cen [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] 2.[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]car lst[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]cadr lst[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]setq bp [b][color=PURPLE]([/color][/b]polar cen [b][color=TEAL]([/color][/b]cadr sl[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]caddr sl[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]setq plst [b][color=PURPLE]([/color][/b]cons bp plst[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE])[/color][/b][color=#8b4513]; progn[/color] [b][color=GREEN])[/color][/b][color=#8b4513]; if[/color] [b][color=MAROON])[/color][/b][color=#8b4513]; repeat[/color] [b][color=MAROON]([/color][/b]setq osm [b][color=GREEN]([/color][/b]getvar 'osmode[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setvar 'osmode 0[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setvar 'pdmode 35[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]foreach x plst [b][color=GREEN]([/color][/b]entmakex [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cons 0 [color=#2f4f4f]"POINT"[/color][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cons 62 1[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cons 10 x[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [color=#8b4513]; graphical check[/color] [b][color=MAROON]([/color][/b]princ [b][color=GREEN]([/color][/b]strcat [color=#2f4f4f]"\nProceeded "[/color] [b][color=BLUE]([/color][/b]itoa [b][color=RED]([/color][/b]length plst[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [color=#2f4f4f]" proxy objects with the same BoundingBox."[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setvar 'osmode osm[b][color=MAROON])[/color][/b] [b][color=NAVY])[/color][/b][color=#8b4513]; progn[/color][b][color=FUCHSIA])[/color][/b][color=#8b4513]; if[/color][b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b][color=#8b4513];| defun |; [b][color=BLACK]([/color][/b]vl-load-com[b][color=BLACK])[/color][/b] [b][color=BLACK]([/color][/b]princ[b][color=BLACK])[/color][/b][/color]
选定的源代理已分解(抱歉)。
也许其他人可以“开发”或想出更好的办法。