找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 834|回复: 9

[求助]:这样将尺寸值改为固定值?

[复制链接]
发表于 2003-11-18 10:45:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我用xd工具箱中标注-》标注改值,
  
  请输入选项[自身变比(1)/取输入值(2)/恢复默认(R)]<1>:1
    请输入尺寸文字缩放比例<1.0>:

    但修改后的尺寸总是和原来的尺寸值不同,个位数有变化,不知道怎么解决?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-11-18 18:25:29 | 显示全部楼层
四舍五入原因
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-11-19 08:09:13 | 显示全部楼层
最初由 eachy 发布
[B]四舍五入原因 [/B]


不是四舍五入的原因,一般相差2-3,而且用dim标注是对的,而标注修改就改变了数值,奇怪,请版主自己试试!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-11-19 12:08:05 | 显示全部楼层
最初由 coolzhb 发布
[B]

不是四舍五入的原因,一般相差2-3,而且用dim标注是对的,而标注修改就改变了数值,奇怪,请版主自己试试! [/B]

看了看程序,里面的 rtos 写法有误,都是 (rtos  x 2 0) 把后面的 0  改为需要的 2 或者 3 即可。

程序在 \XDSoft\Lisp 目录下 obj_dim.lsp 中查找 c:XDTB_DimChVal
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-11-19 16:02:46 | 显示全部楼层
最初由 eachy 发布
[B]
看了看程序,里面的 rtos 写法有误,都是 [co... [/B]


今天下午仔细研究一下 \XDSoft\Lisp 目录下 obj_dim.lsp 中
c:XDTB_DimChVal程序,发现并不是rtos的写法有误,而是
xd工具箱线性标注取值算法的一个bug。

另外好像还有点bug,我也修改了一下,修改后,程序运行
一切正常。


  1.   [FONT=courier new]
  2. ;;; 命令:xdtb_dimchval
  3. ;;; 可以多选,可修改为输入的具体数值,也可以根据输入的比例,“缩放”该值。

  4. (defun c:xdtb_dimchval (/ ss tf val e tf1 #get_val val1)

  5. ;|defun #get_val (/ p10 p11)
  6.                 (setq p10 (xdrx_getentdxf 10)
  7.                                         p11 (polar p10 (xdrx_getentdxf 50) (distance
  8.                                                                                                                                                                                                                          (xdrx_getentdxf 13)
  9.                                                                                                                                                                                                                          (xdrx_getentdxf 14)
  10.                                                                                                                                                                                  )
  11.                                                         )
  12.                 )
  13.                 (rtos (distance p10 p11) 2 0)
  14.         )
  15. |;
  16.   (defun #get_val (/ p10 p11)
  17.     (rtos (* (cos (- (xdrx_getentdxf 50)
  18.                      (angle (xdrx_getentdxf 13)
  19.                             (xdrx_getentdxf 14)
  20.                      )
  21.                   )
  22.              )
  23.              (distance (xdrx_getentdxf 13) (xdrx_getentdxf 14))
  24.           )
  25.           2
  26.           4
  27.     )
  28.   )
  29.   (prompt "\n请选取要修改的尺寸标注<退出>:")
  30.   (setq ss (ssget '((0 . "dimension"))))
  31.   (if (not tf)
  32.     (progn
  33.       (setq tf t)
  34.       (initget 6 "1 2 R")
  35.       (setq
  36.         tf1 (getkword
  37.               "\n请输入选项[自身变比(1)/取输入值(2)/恢复默认(R)]<1>:"
  38.             )
  39.       )
  40.       (if (not tf1)
  41.         (setq tf1 "1")
  42.       )
  43.       (if (= tf1 "R")
  44.         (progn
  45.           (xdrx_setsstodb ss 0)
  46.           (while (setq e (xdrx_getentdata 0)) ; (if (not
  47.                                         ; (xdrx_dimension_removeoverride e
  48.                                         ; 271)) (xdrx_modent 1 ""))
  49.             (xdrx_modent 1 "")
  50.           )
  51.         )
  52.         (progn
  53.           (initget 6)
  54.           (setq        val (getreal (strcat "\n请输入尺寸文字"
  55.                                      (if (= tf1 "1")
  56.                                        "缩放比例"
  57.                                        "新值"
  58.                                      )
  59.                                      (if #val_z
  60.                                        (strcat "<"
  61.                                                (rtos #val_z
  62.                                                      2
  63.                                                      1
  64.                                                )
  65.                                                ">"
  66.                                        )
  67.                                        ""
  68.                                      )
  69.                                      ":"
  70.                              )
  71.                     )
  72.           )
  73.           (if (not val)
  74.             (setq val #val_z)
  75.             (setq #val_z val)
  76.           )
  77.           (xdrx_setsstodb ss 0)
  78.           (while (setq e (xdrx_getentdata 0))
  79.             (setq val1 (if (= "" (xdrx_getentdxf 1))
  80.                          (#get_val)
  81.                          (xdrx_getentdxf 1)
  82.                        )
  83.             )
  84.             (xdrx_modent
  85.               1
  86.               (if (= tf1 "1")
  87.                 (rtos (* (atof val1) val) 2 0)
  88.                 (rtos val 2 0)
  89.               )
  90.             )
  91.             (entupd e)
  92.           )
  93.         )
  94.       )
  95.     )
  96.   )
  97.   (princ)
  98. )

  99.    
  100.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-11-19 16:33:33 | 显示全部楼层
(rtos val 2 0)
返回的是整数了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-11-19 17:31:20 | 显示全部楼层
最初由 eachy 发布
[B](rtos val 2 0)
返回的是整数了 [/B]


最主要的其实是算法不对,当标注时第一点和第二点和尺寸的角度不一致时,修改尺寸值就变大了,因为它返回的是这两点间的距离,所以必须乘以他们之间夹角的余弦值。看我写的返回值val的求法即可明白!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-19 23:07:46 | 显示全部楼层
用0.28版本测试了一下,coolzhb朋友的分析很对!主要是对线性标注取值方法不对.
但是你贴上来的修改程序 括号不匹配,没有细看分析是哪里
我以前也写过一个程序,这次在测试中发现一个漏洞,就是没有考虑标注override的情况,拟近期完成修改.因此,再次感谢coolzhb朋友,让我发现了自己程序的bug :)
付上我的原程序

  1. (defun c:dmv (/ ss i ent e e1 e10 e13 p14 ang e13e e13p dist dimst st se271 se144 val nval upkey)
  2. (princ "\ndmv ==锁定/缩放/还原 dim标注数值-v3------陌生人.2002.11")
  3. (initget "S R")
  4. (setq key (getstring "\n dim标注数值 S-缩放/R-还原/<锁定>:"))
  5. (if (= "S" (strcase key))
  6.   (setq sc (getdist "\n 数值缩放比例:"))
  7. )
  8. (if (= "" key)(setq key "L"))
  9. (setq ss (ssget '((0 . "DIMENSION"))) i 0 )
  10. (repeat (sslength ss)
  11.   (setq ent (ssname ss i)
  12.         e (entget ent)
  13.         e1 (cdr (assoc 1 e))
  14.         e10 (cdr (assoc 10 e))
  15.         e13 (cdr (assoc 13 e))
  16.         e14 (cdr (assoc 14 e))
  17.         ang (angle e10 e14)
  18.         e13e (polar e13 (+ (/ PI 2)(angle e10 e14)) 100)
  19.         e13p (inters e13 e13e e10 e14 nil)
  20.         dist (distance e13 e13p)
  21.         dimst (cdr (assoc 3 e))
  22.         st (tblsearch "dimstyle" dimst)
  23.         se271 (cdr (assoc 271 st))  
  24.         se144 (cdr (assoc 144 st))  
  25.         val (* se144 dist)         
  26.         i (1+ i)
  27.   )
  28.   (cond
  29.    ((= "S" (strcase key))
  30.     (if (or (= "" e1)(wcmatch e1 "*<>*"))
  31.        (setq val (* val sc) nval (rtos val 2 se271))
  32.        (setq nval (rtos (* (atof e1) sc) 2 se271))
  33.      );if      
  34.    )
  35.    ((= "R" (strcase key)) (setq nval "<>" upkey "Y"))
  36.    ((= "L" (strcase key))
  37.     (if (or (= "" e1)(wcmatch e1 "*<>*"))
  38.        (setq nval (rtos val 2 se271))
  39.        (setq nval e1)
  40.      );if
  41.    )
  42.   );cond
  43.   (setq   e (subst (cons 1 nval) (assoc 1 e) e))
  44.   (entmod e)
  45.   (entupd ent)
  46. );end repeat
  47. (if upkey (command ".dim" "style" dimst "up" ent "" "e"))
  48. (princ)
  49. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-11-20 08:27:19 | 显示全部楼层
最初由 陌生人 发布
[B]用0.28版本测试了一下,coolzhb朋友的分析很对!主要是对线性标注取值方法不对.
但是你贴上来的修改程序 括号不匹配,没有细看分析是哪里
我以前也写过一个程序,这次在测试中发现一个漏洞,就是没有考虑标注override的... [/B]


括号不匹配?可能是贴的过程出现了问题,我把上面的帖子重新贴过了,大家可以下载试试,另外,我贴出obj_dim.lsp,你直接下载覆盖xdsoft\lisp下的同名文件即可。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-20 13:10:59 | 显示全部楼层

括号没有问题

括号没有问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-20 14:07 , Processed in 0.189843 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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