然后试试这个:
- [b][color=BLACK]([/color][/b]defun c:anglefix [b][color=FUCHSIA]([/color][/b] / DTR RTD mid *error* Svars SS i e enx o spt ept cen ang [b][color=FUCHSIA])[/color][/b] [color=#8b4513]; localise the used defuns and set[b][color=FUCHSIA]([/color][/b]ted[b][color=FUCHSIA])[/color][/b] q[b][color=FUCHSIA]([/color][/b]uotes[b][color=FUCHSIA])[/color][/b][/color]
- [color=#8b4513]; define some functions to help for the task:[/color]
- [b][color=FUCHSIA]([/color][/b]defun DTR [b][color=NAVY]([/color][/b]a[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]* PI [b][color=MAROON]([/color][/b]/ a 180[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b][color=#8b4513]; converts degrees to radians[/color]
- [b][color=FUCHSIA]([/color][/b]defun RTD [b][color=NAVY]([/color][/b]a[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]/ [b][color=MAROON]([/color][/b]* a 180[b][color=MAROON])[/color][/b] PI[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b][color=#8b4513]; converts radians to degrees[/color]
- [b][color=FUCHSIA]([/color][/b]defun mid [b][color=NAVY]([/color][/b]p1 p2[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]mapcar [b][color=MAROON]([/color][/b]function [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=MAROON])[/color][/b] p1 p2[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [color=#8b4513]; finds the midpoint between 2 points[/color]
- [b][color=FUCHSIA]([/color][/b]defun *error* [b][color=NAVY]([/color][/b]m[b][color=NAVY])[/color][/b]
- [b][color=NAVY]([/color][/b]and Svars [b][color=MAROON]([/color][/b]mapcar 'setvar [b][color=GREEN]([/color][/b]mapcar 'car Svars[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]mapcar 'cdr Svars[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [color=#8b4513]; Restore the system variables[/color]
- [b][color=NAVY]([/color][/b]and m [b][color=MAROON]([/color][/b]print m[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]princ[b][color=NAVY])[/color][/b]
- [b][color=FUCHSIA])[/color][/b][color=#8b4513]; defun *error*[/color]
- [b][color=FUCHSIA]([/color][/b]setq Svars [color=#8b4513]; store the system variables into assoc list, where each item is [b][color=NAVY]([/color][/b]<varName> . <varVal>[b][color=NAVY])[/color][/b][/color]
- [b][color=NAVY]([/color][/b]mapcar '[b][color=MAROON]([/color][/b]lambda [b][color=GREEN]([/color][/b]x[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons x [b][color=BLUE]([/color][/b]getvar x[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
- '[b][color=MAROON]([/color][/b][color=#2f4f4f]"AUNITS"[/color] [color=#2f4f4f]"ANGDIR"[/color] [color=#2f4f4f]"ANGBASE"[/color][b][color=MAROON])[/color][/b]
- [b][color=NAVY])[/color][/b]
- [b][color=FUCHSIA])[/color][/b][color=#8b4513]; setq Svars [/color]
- [b][color=FUCHSIA]([/color][/b]and Svars [b][color=NAVY]([/color][/b]mapcar 'setvar [b][color=MAROON]([/color][/b]mapcar 'car Svars[b][color=MAROON])[/color][/b] '[b][color=MAROON]([/color][/b]0 0 0[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [color=#8b4513]; set new values for the variables[/color]
- [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]setq SS [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"LINE"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [color=#8b4513]; prompt for a SS of lines, if valid then iterate thru it[/color]
- [b][color=NAVY]([/color][/b]repeat [b][color=MAROON]([/color][/b]setq i [b][color=GREEN]([/color][/b]sslength SS[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [color=#8b4513]; iterate through the selection set[/color]
- [b][color=MAROON]([/color][/b]setq
- e [b][color=GREEN]([/color][/b]ssname SS [b][color=BLUE]([/color][/b]setq i [b][color=RED]([/color][/b]1- i[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [color=#8b4513]; entity[/color]
- enx [b][color=GREEN]([/color][/b]entget e[b][color=GREEN])[/color][/b] [color=#8b4513]; entity's data [b][color=GREEN]([/color][/b]elist[b][color=GREEN])[/color][/b][/color]
- o [b][color=GREEN]([/color][/b]vlax-ename->vla-object e[b][color=GREEN])[/color][/b] [color=#8b4513]; convert the entity into vla-object [b][color=GREEN]([/color][/b]for vla-Rotate[b][color=GREEN])[/color][/b][/color]
- spt [b][color=GREEN]([/color][/b]trans [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 10 enx[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] 1 0[b][color=GREEN])[/color][/b] [color=#8b4513]; start point, coordinate translated from WCS to UCS[/color]
- ept [b][color=GREEN]([/color][/b]trans [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 11 enx[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] 1 0[b][color=GREEN])[/color][/b] [color=#8b4513]; end point, coordinate translated from WCS to UCS[/color]
- cen [b][color=GREEN]([/color][/b]mid spt ept[b][color=GREEN])[/color][/b] [color=#8b4513]; mid point[/color]
- ang [b][color=GREEN]([/color][/b]angle spt ept[b][color=GREEN])[/color][/b] [color=#8b4513]; angle of the line [b][color=GREEN]([/color][/b]in radians[b][color=GREEN])[/color][/b][/color]
- [b][color=MAROON])[/color][/b][color=#8b4513]; setq[/color]
- [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]not [b][color=BLUE]([/color][/b]<= 90 [b][color=RED]([/color][/b]RTD ang[b][color=RED])[/color][/b] 270[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [color=#8b4513]; if angle is not between 90 and 270 degrees[/color]
- [b][color=GREEN]([/color][/b]cond [color=#8b4513]; depending on the angle perform the corresponding action, using [b][color=BLUE]([/color][/b]cond[b][color=BLUE])[/color][/b][/color]
- [b][color=BLUE]([/color][/b][b][color=RED]([/color][/b]< [b][color=PURPLE]([/color][/b]RTD ang[b][color=PURPLE])[/color][/b] 90[b][color=RED])[/color][/b] [color=#8b4513]; angle is below 90 deg[/color]
- [b][color=RED]([/color][/b]setq ang [b][color=PURPLE]([/color][/b]+ ang PI[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [color=#8b4513]; add 180 degrees [b][color=RED]([/color][/b]value in radians[b][color=RED])[/color][/b] - this line is redundant, unless you want do do calculations[/color]
- [b][color=RED]([/color][/b]vla-Rotate o [b][color=PURPLE]([/color][/b]vlax-3D-point cen[b][color=PURPLE])[/color][/b] PI[b][color=RED])[/color][/b] [color=#8b4513]; rotate the line on +180 degrees, from its center[/color]
- [b][color=BLUE])[/color][/b]
- [b][color=BLUE]([/color][/b][b][color=RED]([/color][/b]> [b][color=PURPLE]([/color][/b]RTD ang[b][color=PURPLE])[/color][/b] 270[b][color=RED])[/color][/b] [color=#8b4513]; angle is above 270 deg[/color]
- [b][color=RED]([/color][/b]setq ang [b][color=PURPLE]([/color][/b]- ang PI[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [color=#8b4513]; subtract 180 degrees [b][color=RED]([/color][/b]value in radians[b][color=RED])[/color][/b] - this line is redundant, unless you want do do calculations[/color]
- [b][color=RED]([/color][/b]vla-Rotate o [b][color=PURPLE]([/color][/b]vlax-3D-point cen[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]- PI[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [color=#8b4513]; rotate the line on -180 degrees, from its center[/color]
- [b][color=BLUE])[/color][/b]
- [b][color=GREEN])[/color][/b][color=#8b4513]; cond[/color]
- [b][color=MAROON])[/color][/b][color=#8b4513]; if[/color]
- [b][color=NAVY])[/color][/b][color=#8b4513]; repeat[/color]
- [b][color=FUCHSIA])[/color][/b][color=#8b4513]; if[/color]
- [b][color=FUCHSIA]([/color][/b]and Svars [b][color=NAVY]([/color][/b]mapcar 'setvar [b][color=MAROON]([/color][/b]mapcar 'car Svars[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]mapcar 'cdr Svars[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [color=#8b4513]; Restore the system variables[/color]
- [b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b] [color=#8b4513]; exit cleanly[/color]
- [b][color=BLACK])[/color][/b][color=#8b4513]; defun[/color]
- [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=#8b4513]; load the visual lisp extensions[/color]
我不经常使用trans,所以我可能会感到困惑,如果代码表现不符合预期,您可能需要切换如下值
(trans….0 1)而不是电流(trans….1 0)。 |