维姆克鲁兹,干得好!如果您不介意,我会对您的代码发表一些评论:
在继续处理之前验证用户的输入可能很有用:
- (if (and (setq p1 (getpoint "\nFirst pick point: "))
- (setq p2 (getpoint "\nSecond pick point: ")))
- (progn
- ...
请注意,您在调用绘图命令后禁用了自动OSNAP,因此可能会受到当前模式的影响:
- (command "_.pline" newp1 newp2 "")
- (setq osm (getvar "OSMODE"))
- (setvar "osmode" 0)
一个好的编程实践是完全恢复受影响的环境,因此最好将原始的*error*函数保留到变量中,并替换您在结束或出错时定义的函数(类似于您对OSMODE系统变量所做的操作)。
如果在绘制某些实体之后发生错误,则在错误处理函数中调用UNDO命令将确保用户不会得到不完整的结果。
对于模式选择,您可能还需要查看GETKWORD和INITGET函数(以摆脱对话框)。
如果您决定坚持使用该对话框,则可以在其中添加文本高度字段;此外,通过使用单选按钮而不是模式按钮,将能够以以前使用的模式作为默认模式提示用户。
最后,但并非最不重要的是,您应该本地化您的变量,以确保不会干扰其他例程。 |