明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1121|回复: 2

[讨论] 讨论setvar的undo编组问题

[复制链接]
发表于 2015-1-24 20:01:03 | 显示全部楼层 |阅读模式
本帖最后由 lostbalance 于 2015-1-24 23:24 编辑

前几天把编的程序发给同事用,然后他说遇到几次小数精度出现问题,也就是dimzin参数没有正常恢复初始值。
因为程序总数也不算少,具体是哪里出问题还无法辨别出来。但初步看了下涉及到dimzin参数的代码,有修改代码,有恢复代码,error里也有恢复代码,所以考虑是不是和undo、error里的代码顺序有关系。
以下是编了一个测试的代码,比较了下正常运行和esc退出两种方式下,用u命令撤销操作的dimzin值变化(初始设置为8),发现如下:
正常运行后,值为4,u一次后变为1,u两次后变为8;
esc退出后,值为8,u一次后变为1,u两次后变为8;
初始值为8,dimzin命令后改为0,再运行代码,上述两种方式,u两次都值都变为8,而不是0。

那么是否可以总结如下:
1. 在lis中,连续的setvar dimzin,会自动编组,一次u就可以全部恢复?
2. undo编组开始前的连续的setvar dimzin,属于前一个undo编组?
3. undo编组结束后的连续的setvar dimzin,自动归于该undo编组中?
4. 其他系统变量也是这样?
  1. (defun c:qq(/ *error*)
  2.   (defun *error* ( msg ) ;错误恢复
  3.     (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  4.       (princ msg)
  5.     )
  6.     (setvar "dimzin" 5)
  7.     (while (= 8 (logand 8 (getvar 'undoctl)))
  8.       (vl-cmdf ".undo" "END")
  9.     )
  10.     (setvar "dimzin" 6)
  11.     (setvar "dimzin" 7)
  12.     (setvar "dimzin" 8)
  13.     (princ)
  14.   )
  15.   (setvar "cmdecho" 0)
  16.   (setvar "dimzin" 7)
  17.   (setvar "dimzin" 6)
  18.   (setvar "dimzin" 1)
  19.   (vl-cmdf ".undo" "be")
  20.   (setvar "dimzin" 2)
  21.   (setq a (getpoint))
  22.   (setvar "dimzin" 3)
  23.   (while (= 8 (logand 8 (getvar 'undoctl)))
  24.     (vl-cmdf ".undo" "END")
  25.   )
  26.   (setvar "dimzin" 4)
  27.   (princ)
  28. )
  29. (defun c:qqq()
  30.   (princ (getvar "dimzin"))
  31.   (princ)
  32. )

复制代码
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2015-1-24 23:25:55 | 显示全部楼层
自己顶一下,求解惑
发表于 2015-1-25 08:22:37 | 显示全部楼层
u一次后变为1
    删除(vl-cmdf ".undo" "be")与(vl-cmdf ".undo" "END")之间
u两次后变为8
    因系统初始值为8
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-23 13:14 , Processed in 0.171845 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表