明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: sboo292929

!公差标注lisp程序!更新第三版(050829)

  [复制链接]
 楼主| 发表于 2005-8-29 21:58 | 显示全部楼层

更新第三版(050829):在当前文件,可以记忆上次输入的数值;减少了错误的发生!

希望大家发表一下意见!

发表于 2005-8-29 22:21 | 显示全部楼层
建议第四版改成为种方式:
1.首先选择标注对象,通过标注对象查询其公差情况,并在后继的提示输入公差中显示选定标注对象的公差内容,如果标注对象未有公差,则以默认的公差值提示。
2.请允许多选,就是一次可以选定多个标注对象,不要一次只选择一个。
3.注意如果标注对象内容未被修改(也就是<>状态),应直接利用标注对象自身的公差方式来标注,而不要采用多行文字的方式。
4.下公差最好还是让用户自己写-号,而不要让程序去加,这样会习惯一些。
5.程序有BUG,如果下公差带有-号,则显示值会变成了“--”号。
6.请按照ACAD的方式,对象就是对象,不要写成物体。
7.另外,请把本文的标题改一下,不要写“全球首创”了,在你之前有知有多少人写过这样的程序,包括我在内。
 楼主| 发表于 2005-8-30 19:31 | 显示全部楼层

多谢老大指导!

继续奋斗!

发表于 2005-9-6 10:20 | 显示全部楼层
怎么解决上下公差都为正或都为负
发表于 2005-9-6 10:31 | 显示全部楼层

放在那里啊?什么是启动组啊?菜鸟我不明白啊!!!!!!!!!!!

发表于 2005-9-10 13:01 | 显示全部楼层

 当上偏差或下偏差有一个为零时,"0"就和"+"或"-"对起,那看起来很别扭,我帮你改了一下:

(defun c:gc (/ ++++ ---- ltoll+ ltoll-   ltola ltolb diment ENT dimtext
        ldimdata rr ltoltext1 ccc pr01 ltoltext2 ddd pr02 crackl)
  (setvar "cmdecho" 0)
  (if (null ltoldata+)(setq ltoldata+ "0.1"))
  (if (null ltoldata-)(setq ltoldata- "0.1"))
  (setq ++++ (strcat "\n输入上公差" "<" ltoldata+ ">" ":"))
  (initget 128)(setq ltoll+ (getkword ++++))(if (null ltoll+)(setq ltoll+ ltoldata+))
  (setq ---- (strcat "\n输入下公差" "<" ltoldata- ">" ":"))
  (initget 128)(setq ltoll- (getkword ----))(if (null ltoll-)(setq ltoll- ltoldata-))
   (COND
      ((= (STRLEN ltoll+) 1)
  (setq ltola (strcat "{\\H0.6x;\\S " ltoll+ "^"ltoll-";}")))
      ((= (STRLEN ltoll-) 1)
   (setq ltola (strcat "{\\H0.6x;\\S" ltoll+ "^ "ltoll-";}")))
   (T (setq ltola (strcat "{\\H0.6x;\\S" ltoll+ "^" ltoll-";}"))))
  (if (= ltoll+ ltoll-)(setq ltolb (strcat "%%P" ltoll+)))
  (setq ltoldata+ ltoll+);;保存本次输入正公差数值
  (setq ltoldata- ltoll-);;保存本次输入负公差数值
  ;;选择开始
  (SETQ diment (ENTSEL "\n选择应用公差的尺寸 : "));;选择物件
  (if (null diment)(exit (PRINC "\n错误! 没有选择任何物件!")));;判断是否为有效选取
  (SETQ ENT (ENTGET (CAR diment)));;取得选择的资料串行
  (setq dimtext (CDR (ASSOC 0 ENT)));;取得资料串行名称,判断选择的物件是否为尺寸
  (if (/= dimtext "DIMENSION")(exit (princ "\n错误! 选择的物件非尺寸或尺寸已分解!")))
  (setq ldimdata (CDR (ASSOC 1 ENT)));;取得尺寸资料串行
  (setq rr (substr ldimdata 1 2));;抽取尺寸值前2位
  (if (or (= rr "") (= rr "<>"))
    (progn
    (setq ltoltext1 (strcat "<>" ltola))
    (setq ccc(subst (cons 1 ltoltext1)(assoc 1 ENT)ENT))
    (entmod ccc);;(entupd diml1)
    (princ)
    )
    (progn
      (if (or (/= rr "") (/= rr "<>"))(exit (princ "\n错误! 尺寸被修改过! 只支持实际数值及未分解的尺寸!")))
      )
    )
  (if (= ltoldata+ ltoldata-)
    (progn
    (setq ltoltext2 (strcat "<>" ltolb))
    (setq ddd(subst (cons 1 ltoltext2)(assoc 1 ENT)ENT))
    (entmod ddd)
    (princ)
    )
    (progn
      (setq crackl 2006)
      )
    )
  (princ (strcat "\nOK! 恭喜你成功标注公差!"))
  (princ)
  )

 

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

本版积分规则

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

GMT+8, 2024-5-7 01:39 , Processed in 0.202526 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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