你做了很好的尝试,马可,你有一些好主意。做得好。
以下是我的做法,请阅读评论:
- [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:draw [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] *error* vl ov tmp cEnt pt[color=black] dEnt[/color][color=black] dObj[/color][b][color=RED])[/color][/b]
- [i][color=#990099];; Define Function and Localise Variables[/color][/i]
- [i][color=#990099];; Don't localise Curv:def, as it remains Global.[/color][/i]
-
- [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
- [i][color=#990099];; Load Visual LISP functions - for use later.[/color][/i]
- [i][color=#990099];; I find it easier to change object properties[/color][/i]
- [i][color=#990099];; using Visual LISP - it can be done in many ways,[/color][/i]
- [i][color=#990099];; but this is just my preference.[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] Curv:def [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] Curv:def [b][color=#ff00ff]"Spline"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
- [i][color=#990099];; First time default, as Curv:def will be nil otherwise.[/color][/i]
- [i][color=#990099];; Error Handler - as we are tampering with Sys Vars[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] *error* [b][color=RED]([/color][/b]msg[b][color=RED])[/color][/b]
- [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] ov [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] vl ov[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Reset Sys Vars[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b]
- [b][color=RED]([/color][/b][b][color=BLUE]wcmatch[/color][/b]
- [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] msg[b][color=RED])[/color][/b] [b][color=#ff00ff]"*BREAK,*CANCEL*,*EXIT*"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
- [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#ff00ff]"\n<< Error: "[/color][/b] msg [b][color=#ff00ff]" >>"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
- [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
- [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] vl [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#ff00ff]"CMDECHO"[/color][/b] [b][color=#ff00ff]"OSMODE"[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Define a list of Sys Vars[/color][/i]
- ov [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]getvar[/color][/b] vl[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Retrieve their Settings[/color][/i]
-
- [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#ff00ff]"Spline Pline"[/color][/b][b][color=RED])[/color][/b]
- [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b]
- [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] tmp
- [b][color=RED]([/color][/b][b][color=BLUE]getkword[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#ff00ff]"\nSpline or Pline? <"[/color][/b] Curv:def [b][color=#ff00ff]">: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
- [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] Curv:def tmp[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
- [i][color=#990099];; Either the user has hit Enter, in which case we don't need to[/color][/i]
- [i][color=#990099];; change the value of Curv:def, else, the user has typed something[/color][/i]
- [i][color=#990099];; other than that of Curv:def, so we set it as the new default.[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b]
- [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] Curv:def [b][color=#ff00ff]"Spline"[/color][/b][b][color=RED])[/color][/b] [b][color=#ff00ff]"_.Spline"[/color][/b] [b][color=#ff00ff]"_.Pline"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Invoke Command[/color][/i]
-
- [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]>[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=#ff00ff]"CMDACTIVE"[/color][/b][b][color=RED])[/color][/b] [b][color=#009900]0[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Whilst the Command is active[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] pause[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; pause for user input[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] cEnt [b][color=RED]([/color][/b][b][color=BLUE]entlast[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Retrieve newly created Curve[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] pt [b][color=RED]([/color][/b][b][color=BLUE]getpoint[/color][/b] [b][color=#ff00ff]"\nSelect Side of Curve to Offset: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
- [i][color=#990099]; If the user selects a point to offset[/color][/i]
-
- [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [i][color=#990099]; Wrap the following[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] vl [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] [b][color=#009900]0[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
- [i][color=#990099];; Turn off OSMODE, as we don't want it to affect the Offset.[/color][/i]
- [i][color=#990099];; Turn off CMDECHO, as we don't want to see the returns of[/color][/i]
- [i][color=#990099];; the offset at the command line.[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] [b][color=#ff00ff]"_.offset"[/color][/b] [b][color=#009900]50[/color][/b] cEnt pt [b][color=#ff00ff]""[/color][/b][b][color=RED])[/color][/b]
- [i][color=#990099];; Perform Offset[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] dEnt [b][color=RED]([/color][/b][b][color=BLUE]entlast[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
- [i][color=#990099];; Collect Offset Object[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] dObj [b][color=RED]([/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b] dEnt[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
- [i][color=#990099];; Convert it to a VLA-OBJECT[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]vla-put-layer[/color][/b] dObj [b][color=#ff00ff]"0"[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; <<---- Change this to your layer[/color][/i]
- [i][color=#990099];; Set Object Layer[/color][/i]
- [b][color=RED])[/color][/b] [i][color=#990099]; End Progn[/color][/i]
-
- [b][color=RED])[/color][/b] [i][color=#990099]; End IF[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] vl ov[b][color=RED])[/color][/b] [i][color=#990099]; Reset Sys Vars[/color][/i]
- [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b]
- [b][color=RED])[/color][/b] [i][color=#990099]; End Draw[/color][/i]
-
-
更改偏移对象的图层。 |