明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1094|回复: 4

LISP问题求助?

[复制链接]
发表于 2007-8-19 15:09:00 | 显示全部楼层 |阅读模式

小弟想实现这样一功能,就是当选择一个尺寸时可以将其DIMSCALE的值设为当前DIMSCALE,程序如下:但是运行后达不到想要的效果,请高支招,谢谢!

(defun c:dsa()
  (setq ss1 (ssget ":s" (list (cons 0 "dimension"))))
  (setq ss2 (entget (ssname ss1 0)))
  (setq ss3 (cdr (assoc 1040 ss2)))
  (command "dimscale" ss3)
)

发表于 2007-8-19 16:22:00 | 显示全部楼层

我试过了,根本就没有ss3的这个变量呀

1040的这个群码,我也没找到

发表于 2007-8-20 09:11:00 | 显示全部楼层

下面这个应该可以的,可以框选,选完后点右键。

(defun C:eds()
  (setq oldsty(getvar"dimstyle"))
  (setq newsc (getreal"\n请输入新的比例:"))
  (if (> newsc 0)
    (progn
      (setvar"dimscale" newsc)
      (command"_dimstyle" "apply" (ssget '((0 . "dimension"))) "")
      (command "_dimstyle" "restore" oldsty)
      )
    )
  )

 楼主| 发表于 2007-8-21 12:25:00 | 显示全部楼层

楼上的不可以,不是我要求的结果.

不过通过小弟从网上找到的资料并整理,已经可以通过程序实现了.待会上传源码.感谢楼上两位仁兄的支持.

 楼主| 发表于 2007-8-25 20:58:00 | 显示全部楼层

;====================================
;根据选择对象的标注比例来设置当前尺寸标注比例
(defun c:dsa( / ss1 ss0 oldDscale )
 (setvar "cmdecho" 0)
 (setq ss0 (ssget ":s" (list (cons 0 "dimension"))))
 (setq ss1 (entget (ssname ss0 0) '("ACAD")))
 (setq oldDscale (cdr (assoc 1040 (cdadr (assoc -3 ss1)))))
   (if (= oldDscale nil)
      (princ "\n当前尺寸全局比例已改为1.00")    
      (setvar "dimscale" 1)
   )
  (setvar "dimscale" oldDscale)
 (setvar "cmdecho" 1)
)

不过这个程序有个BUG,就是当选择对象的DIMSCALE为1时,程序会出错,也就是程序中的变量"oldDscale"的值会为空,故我在程序中加了一个IF判断语句。还望高手可以指正。非常感谢!

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

本版积分规则

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

GMT+8, 2025-8-4 04:31 , Processed in 0.171536 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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