对于这种方法,vl排序的使用效率很低:当程序只需要最接近块插入点的项时,无需为foreach循环的每次迭代对列表中的每个项重新排序。
对于你的方法,我建议如下:
- ([color=BLUE]defun[/color] c:test ( [color=BLUE]/[/color] d1 d2 en id l1 l2 p1 ss )
- ([color=BLUE]if[/color] ([color=BLUE]setq[/color] ss ([color=BLUE]ssget[/color] [color=MAROON]"_:L"[/color] '((0 . [color=MAROON]"INSERT,LINE"[/color]))))
- ([color=BLUE]progn[/color]
- ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] id ([color=BLUE]sslength[/color] ss))
- ([color=BLUE]setq[/color] en ([color=BLUE]entget[/color] ([color=BLUE]ssname[/color] ss ([color=BLUE]setq[/color] id ([color=BLUE]1-[/color] id)))))
- ([color=BLUE]if[/color] ([color=BLUE]=[/color] [color=MAROON]"INSERT"[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 0 en)))
- ([color=BLUE]setq[/color] l1 ([color=BLUE]cons[/color] ([color=BLUE]list[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 10 en)) ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] -1 en))) l1))
- ([color=BLUE]setq[/color] l2 ([color=BLUE]cons[/color] ([color=BLUE]list[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 10 en)) ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 11 en))) l2))
- )
- )
- ([color=BLUE]foreach[/color] br l1
- ([color=BLUE]setq[/color] d1 (dis ([color=BLUE]car[/color] br) ([color=BLUE]car[/color] l2))
- en ([color=BLUE]car[/color] l2)
- )
- ([color=BLUE]foreach[/color] ln ([color=BLUE]cdr[/color] l2)
- ([color=BLUE]if[/color] ([color=BLUE]<[/color] ([color=BLUE]setq[/color] d2 (dis ([color=BLUE]car[/color] br) ln)) d1)
- ([color=BLUE]setq[/color] d1 d2
- en ln
- )
- )
- )
- ([color=BLUE]command[/color] [color=MAROON]"_.mirror"[/color] ([color=BLUE]cadr[/color] br) [color=MAROON]""[/color]
- [color=MAROON]"_non"[/color] ([color=BLUE]setq[/color] p1 ([color=BLUE]apply[/color] '[color=BLUE]mapcar[/color] ([color=BLUE]cons[/color] '([color=BLUE]lambda[/color] ( a b ) ([color=BLUE]/[/color] ([color=BLUE]+[/color] a b) 2.0)) en)))
- [color=MAROON]"_non"[/color] ([color=BLUE]polar[/color] p1 ([color=BLUE]+[/color] ([color=BLUE]apply[/color] '[color=BLUE]angle[/color] en) ([color=BLUE]/[/color] [color=BLUE]pi[/color] 2.0)) 1.0)
- [color=MAROON]"_Y"[/color]
- )
- )
- )
- )
- ([color=BLUE]princ[/color])
- )
- ([color=BLUE]defun[/color] dis ( a b )
- ([color=BLUE]min[/color] ([color=BLUE]distance[/color] a ([color=BLUE]car[/color] b)) ([color=BLUE]distance[/color] a ([color=BLUE]cadr[/color] b)))
- )
- ([color=BLUE]princ[/color])
仍然没有修改为包含无镜像块。 |