明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1297|回复: 6

請幫忙看看這段程式!!!!

[复制链接]
发表于 2006-12-14 17:44 | 显示全部楼层 |阅读模式

(defun c:dcc()
  (setq pp1 (tblnext "dimstyle"))
(setvar "cmdecho" 0)
  (setvar "dimzin" 1)
  (setq dh (getvar "dimdec"))
  (setq dh_n (getint "\n<苤杅弇杅:"))
  (setq sss (ssget ))
  (setq n 0)
  (setq i 0)
  (repeat (sslength sss)
  (setq en(ssname sss n))
    (setq en_date (entget en))
    (setq ABC (strcase (cdr (assoc 0 en_date))))
    (if (= ABC "DIMENSION")
         (changdimedc)
      )
    (setq n (1+ n)))
  (princ)
  )
(defun changdimedc()
  (setq dimname (strcase (cdr (assoc 3 en_date))))
  (setq dimnamelist (tblobjname "dimstyle" dimname))
  (setq lplp (tblsearch "dimstyle" dimname))
  (setq en_date (entget dimnamelist))
      (setq olddimdec_list (assoc 271 en_date))
      (setq newdimdec_list (cons 271 dh_n))
      (setq en_date (subst newdimdec_list olddimdec_list en_date))
      (entmod en_date)
  )

上面的程式是更新尺寸的小數位數的為什麼不起作用

发表于 2006-12-14 19:51 | 显示全部楼层
因为en_date中不含3号组码,所以(assoc 3 en_date)为nil,程序不能运行.不过我认为象这个问题最好用Vlisp来解决!
 楼主| 发表于 2006-12-15 08:55 | 显示全部楼层
上面樓主如果用Vlisp解決的話怎樣操作能不能說清楚一點,幫忙把原代碼寫出來行嗎?
发表于 2006-12-15 20:59 | 显示全部楼层
(defun c:test ()
  (vl-load-com)
  (setq selsets (vla-get-selectionsets
    (vla-get-ActiveDocument (vlax-get-acad-object))
  )
  )
  (if (> (vla-get-count selsets) 0)
    (if (vla-item selsets
    "ss1"
 )
      (vla-delete
 (vla-item selsets
    "ss1"
 )
      )
    )
  )
  (setq s1    (vla-add selsets "ss1")
 fillercode (vlax-make-safearray vlax-vbinteger '(0 . 0))
 fillertype (vlax-make-safearray vlax-vbvariant '(0 . 0))
  )
  (vlax-safearray-fill fillercode '(0))
  (vlax-safearray-fill fillertype '("DIMENSION"))
  (vlax-make-variant fillercode)
  (vlax-make-variant fillertype)
  (vla-selectonscreen s1 fillercode fillertype)
  (while (not
    (and (>= (setq n (getint "\n输入改变后小数点后的位数:")) 0)
  (<= n 8)
    )
  )
    (princ "\n您输入了一个无效的数,请输入\"0-8\"之间的数字")
  )
  (setq precision (cond ((= n 0) acDimPrecisionZero)
   ((= n 1) acDimPrecisionOne)
   ((= n 2) acDimPrecisionTwo)
   ((= n 3) acDimPrecisionThree)
   ((= n 4) acDimPrecisionFour)
   ((= n 5) acDimPrecisionFive)
   ((= n 6) acDimPrecisionSix)
   ((= n 7) acDimPrecisionSeven)
   ((= n 8) acDimPrecisionEight)
    )
  )
  (vlax-for dimobj s1
    (if (vlax-property-available-p dimobj "PrimaryUnitsPrecision")
      (if (/= (vla-get-PrimaryUnitsPrecision dimobj) precision)
 (vla-put-PrimaryUnitsPrecision dimobj precision)
      )
    )
    (if (vlax-property-available-p dimobj "TextPrecision")
      (if (/= (vla-get-TextPrecision dimobj) precision)
 (vla-put-TextPrecision dimobj precision)
      )
    )
    (if (vlax-property-available-p dimobj "SuppressTrailingZeros")
      (if (= (vla-get-SuppressTrailingZeros dimobj) :vlax-true)
 (vla-put-SuppressTrailingZeros dimobj :vlax-false)
      )
    )
    (vla-update dimobj)
  )
)
发表于 2006-12-15 21:00 | 显示全部楼层
上面一段代码应该能满足你的需要!
发表于 2006-12-16 18:44 | 显示全部楼层

这样试试:

(defun c:dcc()
 (setvar "cmdecho" 0)
 (setvar "dimzin" 0)
 (setq dh_n (getint "\n小数位数 :"))
 (if (setq sss (ssget '((0 . "DIMENSION")))) (progn
  (setvar "dimdec" dh_n)
  (COMMAND "-DIMSTYLE" "_APPLY" SSS "")
 ))
 (setvar "cmdecho" 1)
 (princ)
)

发表于 2006-12-16 22:02 | 显示全部楼层
ZZXXQQ大侠的程序真是简单明了又实用!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-12 09:25 , Processed in 0.148294 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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