非常感谢阿马康
如果我没听错的话,这个小小的修改就足够了:
- [color=GREEN];; Polyline Area - Lee Mac[/color]
- [color=GREEN];; Prompts the user to make a selection of closed LWPolylines and returns[/color]
- [color=GREEN];; the total area of all objects in the selection, subtracting the area[/color]
- [color=GREEN];; of objects residing entirely inside other objects.[/color]
- ([color=BLUE]defun[/color] c:polyarea ( [color=BLUE]/[/color] dim inc inner ino lst ono outer sel spc )
- ([color=BLUE]setq[/color]
- inner 0.0
- outer 0.0
- ino 0
- ono 0
- )
- ([color=BLUE]if[/color] ([color=BLUE]setq[/color] sel ([color=BLUE]ssget[/color] '((0 . [color=MAROON]"LWPOLYLINE"[/color]) (-4 . [color=MAROON]"&="[/color]) (70 . 1))))
- ([color=BLUE]progn[/color]
- ([color=BLUE]setq[/color] spc
- ([color=BLUE]vlax-get-property[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color]))
- ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]getvar[/color] 'cvport))
- 'paperspace
- 'modelspace
- )
- )
- )
- ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] inc ([color=BLUE]sslength[/color] sel))
- ([color=BLUE]setq[/color] lst ([color=BLUE]cons[/color] ([color=BLUE]vlax-ename->vla-object[/color] ([color=BLUE]ssname[/color] sel ([color=BLUE]setq[/color] inc ([color=BLUE]1-[/color] inc)))) lst))
- )
- ([color=BLUE]foreach[/color] obj1 lst
- ([color=BLUE]if[/color]
- ([color=BLUE]vl-some[/color]
- ([color=BLUE]function[/color]
- ([color=BLUE]lambda[/color] ( obj2 [color=BLUE]/[/color] int pnt tmp )
- ([color=BLUE]and[/color] ([color=BLUE]null[/color] ([color=BLUE]vlax-invoke[/color] obj1 'intersectwith obj2 [color=BLUE]acextendnone[/color]))
- ([color=BLUE]progn[/color]
- ([color=BLUE]setq[/color] pnt ([color=BLUE]vlax-curve-getstartpoint[/color] obj1)
- tmp ([color=BLUE]vla-addray[/color] spc ([color=BLUE]vlax-3D-point[/color] pnt) ([color=BLUE]vlax-3D-point[/color] ([color=BLUE]polar[/color] pnt 0.0 1.0)))
- int ([color=BLUE]vlax-invoke[/color] tmp 'intersectwith obj2 [color=BLUE]acextendnone[/color])
- )
- ([color=BLUE]vla-delete[/color] tmp)
- ([color=BLUE]=[/color] 1 ([color=BLUE]rem[/color] ([color=BLUE]length[/color] int) 2))
- )
- )
- )
- )
- ([color=BLUE]vl-remove[/color] obj1 lst)
- )
- ([color=BLUE]setq[/color] inner ([color=BLUE]+[/color] inner ([color=BLUE]vla-get-area[/color] obj1))
- ino ([color=BLUE]1+[/color] ino)
- )
- ([color=BLUE]setq[/color] outer ([color=BLUE]+[/color] outer ([color=BLUE]vla-get-area[/color] obj1))
- ono ([color=BLUE]1+[/color] ono)
- )
- )
- )
- ([color=BLUE]setq[/color] dim ([color=BLUE]getvar[/color] 'dimzin))
- ([color=BLUE]setvar[/color] 'dimzin 0)
- ([color=BLUE]princ[/color]
- ([color=BLUE]strcat[/color]
- [color=MAROON]"\nOuter Area: "[/color] ([color=BLUE]rtos[/color] outer 2 [color=MAROON]" from "[/color] ([color=BLUE]itoa[/color] ono) [color=MAROON]" object(s)."[/color]
- [color=MAROON]"\nInner Area: "[/color] ([color=BLUE]rtos[/color] inner 2 [color=MAROON]" from "[/color] ([color=BLUE]itoa[/color] ino) [color=MAROON]" object(s)."[/color]
- [color=MAROON]"\nTotal Area: "[/color] ([color=BLUE]rtos[/color] ([color=BLUE]-[/color] outer inner) 2
- )
- )
- ([color=BLUE]setvar[/color] 'dimzin dim)
- )
- )
- ([color=BLUE]princ[/color])
- )
- ([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color])
|