明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2299|回复: 9

[基础] 程序中途出错,如何修改

[复制链接]
发表于 2014-4-2 00:22 | 显示全部楼层 |阅读模式
1、TT的目的是想提取目标标注样式后在“辅助层”图层中针对性的标注,程序结束后返回程序开始前的标注样式和图层,估计问题是发生在getpoint上,这个地方该怎么修改才能达到目的呢;
2、想用while连续去标注,知道程序退出,该怎么加呢?

谢谢大家!

  1. (defun newer2(s)
  2.     (progn
  3.        (setq *error* older2)
  4.        (if oldlayer (setvar "clayer" oldlayer))
  5.        (if olddimstyle (setvar "dimstyle" olddimstyle))
  6.     )
  7.    (princ)
  8. )

  9. (defun C:TT( /    )
  10. (progn
  11.     (setq older2 *error*)   ;保存原有*error*函数
  12.      (setvar "CMDECHO" 0)
  13.     (command "_.UNDO" "_BEGIN")
  14.     (setq oldlayer (getvar "clayer"));_记录当前图层
  15.     (setq olddimstyle (getvar "dimstyle"));_记录当前标注样式
  16.     (setq *error* newer2)
  17.          (if (not (tblsearch "layer" "辅助层")) ;;判断是否存在辅助层,无则创建
  18.            (command "layer" "m" "辅助层" "c" "8" "" "l" "continuous" "" "")
  19.          )
  20.   )
  21.   
  22. (progn
  23.       (and (princ "\n选择标注样式 :") (setq yss2 (ssget ":S" '((0 . "DIMENSION")))));选择标注样式
  24.     (setq dimname2 (cdr(assoc 3 (entget(ssname yss2  0)))));提取目标标注样式名称
  25.       (command "layer" "s" "辅助层" "");将辅助层置为当前,再标注
  26.       (command "dimstyle" "r" dimname2 );将目标标注样式置为当前
  27.       (command "dimaligned" getpoint );开始标注,估计问题发生在这个getpoint上
  28.   )
  29.     (command "_.UNDO" "_END")
  30.     (setvar "dimstyle" olddimstyle);_还原标注样式样式
  31.     (setvar "clayer" oldlayer);_还原图层
  32.     (setq *error* older2)
  33.      (setvar "cmdecho" 1);_打开命令提示
  34.     (princ)
  35. )

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-4-2 08:13 | 显示全部楼层
没调试,您先试这样改

(command "dimaligned")
(while (= (logand (getvar "CmdActive") 1) 1) (command pause))
 楼主| 发表于 2014-4-2 08:22 | 显示全部楼层
Andyhon 发表于 2014-4-2 08:13
没调试,您先试这样改

(command "dimaligned")

谢谢Andyhon,改为(command "dimaligned"),仍然不行,出现如下信息:
: tt

选择标注样式 :
选择对象:

输入点无效。; 错误: *error* 函数中出错AutoCAD 变量设置被拒绝: "dimstyle" "1:200"
发表于 2014-4-2 09:03 | 显示全部楼层
;;(setvar "dimstyle" olddimstyle) ;_还原标注样式样式

The DIMSTYLE system variable is read-only; to change the current dimension style, use the DIMSTYLE command.
发表于 2014-4-2 09:07 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2014-4-2 20:12 编辑
  1. (defun newer2(s)
  2.     (progn
  3.        (setq *error* older2)
  4.        (if oldlayer (setvar "clayer" oldlayer))
  5.        (if olddimstyle (setvar "dimstyle" olddimstyle))
  6.     )
  7.    (princ)
  8. )
  9. (defun C:TT( /    )
  10. (progn
  11.     (setq older2 *error*)   ;保存原有*error*函数
  12.      (setvar "CMDECHO" 0)
  13.     (command "_.UNDO" "_BEGIN")
  14.     (setq oldlayer (getvar "clayer"));_记录当前图层
  15.     (setq olddimstyle (getvar "dimstyle"));_记录当前标注样式
  16.     (setq newer2 *error*)
  17.          (if (not (tblsearch "layer" "辅助层")) ;;判断是否存在辅助层,无则创建
  18.            (command "layer" "m" "辅助层" "c" "8" "" "")
  19.          )
  20.   )
  21. (if
  22.       (and (princ "\n选择标注样式 :") (setq yss2 (ssget ":S" '((0 . "DIMENSION")))));选择标注样式
  23. (progn
  24.     (setq dimname2 (cdr(assoc 3 (entget(ssname yss2  0)))));提取目标标注样式名称
  25.       (command "-layer" "s" "辅助层" "");将辅助层置为当前,再标注
  26.       (command "-DIMSTYLE" "r" dimname2);将目标标注样式置为当前
  27.       (command "dimaligned"); getpoint );开始标注,估计问题发生在这个getpoint上
  28.       (while (> (getvar "CMDACTIVE") 0) (command PAUSE))
  29.           (command "dimcontinue");连续标注
  30. ;(command "dimbaseline");或基线标注
  31.           (while (> (getvar "CMDACTIVE") 0) (command PAUSE))
  32.   ))
  33.     (command "_.UNDO" "_END")
  34.     (command "-DIMSTYLE" "r" olddimstyle);_还原标注样式样式
  35.     (setvar "CLAYER" oldlayer);_还原图层
  36.     (setq *error* older2)
  37.     (setvar "CMDECHO" 1);_打开命令提示
  38.     (princ)
  39. )
 楼主| 发表于 2014-4-2 10:02 | 显示全部楼层
ZZXXQQ 发表于 2014-4-2 09:07

谢谢版主出手,测试了一下,出现两个问题:
1、程序结束时不能还原程序开始之前的标注样式(图层可以还原),调试过程中也出现如下错误提示:
: tt
选择标注样式 :
选择对象:
; 错误: *error* 函数中出错AutoCAD 变量设置被拒绝: "dimstyle" "1:200"

2、我把连续标注dimcontinue改为继续标注dimcontinue,可是只能继续一次,怎么才能多次。
 楼主| 发表于 2014-4-2 10:24 | 显示全部楼层
Andyhon 发表于 2014-4-2 09:03
;;(setvar "dimstyle" olddimstyle) ;_还原标注样式样式

The DIMSTYLE system variable is read-only; t ...

你是说还原标注样式要用(command "dimstyle" "r" "原标注样式名"),是吗?

点评

验证过就消化吸收了!  发表于 2014-4-2 11:14
 楼主| 发表于 2014-4-3 14:46 | 显示全部楼层
ZZXXQQ 发表于 2014-4-2 09:07

看到版主修改后的代码了,能成功返回程序开始之前的的图层和标注样式了,现在仍然有两个问题:
1、若把while后的连续标注"dimcontinue”改为对齐标注"dimaligned“,程序最多能对齐标注两次;
2、若在标注过程中使用Esc中途退出,则不能成功返回程序开始之前的的图层和标注样式,估计出错函数还需完善。

发表于 2014-4-4 21:03 | 显示全部楼层
游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0
 楼主| 发表于 2014-4-8 10:26 | 显示全部楼层
ZZXXQQ 发表于 2014-4-4 21:03
[/post]

版主的可以达到循环标注的目的,只不过有一点美中不足的是不能用右键退出循环,用键盘Esc可以达到,算了,那就这样吧,感谢版主一直的帮助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 01:15 , Processed in 0.275848 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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