FWIW,这是另一个版本,允许用户以任何顺序拾取矩形角点,并考虑任何UCS(假设UCS轴平行于矩形):
- ([color=BLUE]defun[/color] c:rprof ( [color=BLUE]/[/color] fn1 fn2 pt1 pt2 rgt thk tmp top )
- ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]setq[/color] pt1 ([color=BLUE]getpoint[/color] [color=MAROON]"\nSpecify first corner: "[/color]))
- ([color=BLUE]setq[/color] pt2 (([color=BLUE]if[/color] ([color=BLUE]zerop[/color] ([color=BLUE]getvar[/color] 'worlducs)) [color=BLUE]getpoint[/color] [color=BLUE]getcorner[/color]) pt1 [color=MAROON]"\nSpecify opposite corner: "[/color]))
- )
- ([color=BLUE]progn[/color]
- ([color=BLUE]setq[/color] thk ([color=BLUE]cond[/color] (([color=BLUE]getdist[/color] [color=MAROON]"\nSpecify thickness <25.4>: "[/color])) (25.4))
- fn1 ([color=BLUE]lambda[/color] ( x ) ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] x ([color=BLUE]list[/color] 0 thk 0)))
- fn2 ([color=BLUE]lambda[/color] ( x ) ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] x ([color=BLUE]list[/color] thk 0 0)))
- tmp ([color=BLUE]mapcar[/color] '[color=BLUE]max[/color] pt1 pt2)
- pt1 ([color=BLUE]mapcar[/color] '[color=BLUE]min[/color] pt1 pt2)
- pt2 tmp
- top ([color=BLUE]mapcar[/color] 'fn1 ([color=BLUE]list[/color] ([color=BLUE]cons[/color] ([color=BLUE]car[/color] pt1) ([color=BLUE]cdr[/color] pt2)) pt2))
- rgt ([color=BLUE]mapcar[/color] 'fn2 ([color=BLUE]list[/color] ([color=BLUE]cons[/color] ([color=BLUE]car[/color] pt2) ([color=BLUE]cdr[/color] pt1)) pt2))
- )
- (myrectangle ([color=BLUE]append[/color] top ([color=BLUE]reverse[/color] ([color=BLUE]mapcar[/color] 'fn1 top))))
- (myrectangle ([color=BLUE]append[/color] rgt ([color=BLUE]reverse[/color] ([color=BLUE]mapcar[/color] 'fn2 rgt))))
- )
- )
- ([color=BLUE]princ[/color])
- )
- ([color=BLUE]defun[/color] myrectangle ( lst )
- ( ([color=BLUE]lambda[/color] ( ocs )
- ([color=BLUE]entmake[/color]
- ([color=BLUE]append[/color]
- '( (000 . [color=MAROON]"LWPOLYLINE"[/color])
- (100 . [color=MAROON]"AcDbEntity"[/color])
- (100 . [color=MAROON]"AcDbPolyline"[/color])
- (090 . 4)
- (070 . 1)
- )
- ([color=BLUE]list[/color] ([color=BLUE]cons[/color] 038 ([color=BLUE]caddr[/color] ([color=BLUE]trans[/color] ([color=BLUE]car[/color] lst) 1 ocs))))
- ([color=BLUE]mapcar[/color] '([color=BLUE]lambda[/color] ( x ) ([color=BLUE]cons[/color] 10 ([color=BLUE]trans[/color] x 1 ocs))) lst)
- ([color=BLUE]list[/color] ([color=BLUE]cons[/color] 210 ocs))
- )
- )
- )
- ([color=BLUE]trans[/color] '(0 0 1) 1 0 [color=BLUE]t[/color])
- )
- )
- ([color=BLUE]princ[/color])
|