找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1400|回复: 16

[求助] [求助]:请教那位大侠在此标注的LISP文件上加上选择文字的大小和小数点的位数!谢谢!

[复制链接]
发表于 2005-9-4 11:10:47 | 显示全部楼层 |阅读模式

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

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

×
请教那位大侠在此标注的LISP文件上加上选择文字的大小和精度(小数点的位数)!谢谢!
此LISP标注时要加上TXT图层!

[php]
(defun c:tjj()
  (setvar "cmdecho" 0)
  (setvar "osmode" 1)
  (command "osnapcoord" 2)
  (command "ucs" "w")
  (command "layer" "s" "txt" "")
  (setq p4 (getpoint "\n 请输入图框左下角:"))
  (setq p5 (getpoint "\n 请输入图框右上角:"))
  (setq p1 (getpoint "\n 请输入要统计的左下角:"))
  (setq x1 (car p1) y1 (cadr p1))
  (setq p0 (getpoint "\n 请输入要统计的右上角:"))
  (setq p3 (getpoint "\n 请输入统计文字位置:"))
  (setq x4 (car p4) x5 (car p5))
  (setq w (- x5 x4))
  (setq h (* (/ w 280) 2))
  (setq p8 (getpoint "\n 请输入座标放置位置:"))
  (setq p9 (polar p8 0 (* 4 h)))
  (setq p10 (polar p8 0 (* 14 h)))
  (setq p11 (polar p8 0 (* 22 h)))
  (setq p12 (polar p8 (* 1.5 pi) h))
  (setq p13 (polar p11 (* 1.5 pi) h))
  (command "line" p12 p13 "" "")
  (setvar "osmode" 0)
  (command "text" "ml" p9 h 0 "X")
  (command "text" "ml" p10 h 0 "Y")
  (setq txt "ABCDEFGHIJKLMNOPQ")
  (setq ss (ssget "w" p1 p0 '((-4 . "<or") (0 . "arc") (0 . "circle") (-4 . "or>"))))
  (setq i 1)
  (setq pt p3)
  (while ss
     (setq en (ssname ss 0))
     (setq end (entget en))
     (setq rad (+ (cdr (assoc 40 end)) 0.000))
     (setq pci (cdr (assoc 0 end)))
     (setq d (rtos (* 2 rad)))
     (setq ssa (ssget "w" p1 p0 (list (cons 40 rad) (cons 0 pci))))
     (setq nn (sslength ssa))
     (setq stxt (substr txt i 1))
     (setq m 0)
     (setq x 0)
       (repeat nn
          (setq een (ssname ssa m))
          (setq eend (entget een))
          (setq cen (cdr (assoc 10 eend)))
          (setq xxx (- (+ 0.000 (car cen)) x1))
          (setq yyy (- (+ 0.000 (cadr cen)) y1))
          (setq xxxt (rtos xxx))
          (setq yyyt (rtos yyy))
          (setq ssb (ssget "x" (list (cons 10 cen))))
          (setq nnn (sslength ssb))
            (if (= nnn 2)
               (progn
                 (setq f (ssname ssb 0))
                 (setq g (ssname ssb 1))
                 (setq fn (entget f))
                 (setq gn (entget g))
                 (setq radf (+ (cdr (assoc 40 fn)) 0.000))
                 (setq radg (+ (cdr (assoc 40 gn)) 0.000))
                 (setq radma (max radf radg))
                 (setq radmi (min radf radg))
                 (setq p2 (polar cen (* 1.75 pi) (+ 4 radma)))
                 (if (= rad radf) (setq ss (ssdel g ss)) (setq ss (ssdel f ss)))
                 (if (= rad radf) (setq hn fn) (setq hn gn))
                 (setq ty (cdr (assoc 0 hn)))
                 (setq dma (rtos (* 2 radma)))
                 (setq dmi (rtos (* 2 radmi)))
                 (if (= ty "CIRCLE") (setq sssstxt (strcat " %%c" dma "<CB>")) (setq sssstxt (strcat " M" dma)))
                 (setq ssstxt (strcat "-%%C" dmi "<THR>" sssstxt))
                 )
               (setq p2 (polar cen (* 1.75 pi) (+ 3 rad))
                     ssstxt (strcat "-%%C" (rtos (* 2 rad) 2 3) "<THR>"))
              )
          (setq x (+ 1 x))
          (setq xt (itoa x))
          (setq xtxt (strcat stxt xt))
          (setq xxxxt (strcat xtxt ":"))
          (command "text" "ml" p2 h 0 xtxt)
          (setq p8 (polar p8 (* 1.5 pi) (* 2 h)))
          (setq p9 (polar p9 (* 1.5 pi) (* 2 h)))
          (setq p10 (polar p10 (* 1.5 pi) (* 2 h)))
          (setq p11 (polar p11 (* 1.5 pi) (* 2 h)))
          (command "line" (polar p8 (* 1.5 pi) h) (polar p11 (* 1.5 pi) h) "" "")
          (command "text" "ml" p8 h 0 xxxxt)
          (command "text" "ml" p9 h 0 xxxt)
          (command "text" "ml" p10 h 0 yyyt)
          (setq ss (ssdel een ss))
          (setq m (+ 1 m))
         )
     (setq sstxt (strcat stxt " : " (itoa nn) ssstxt))
     (command "text" "ml" pt h 0 sstxt)
     (setq i (+ i 1))
     (setq pt (polar pt (* 1.5 pi) (* 1.5 h)))
     )
  (setvar "osmode" 7)
(prinl)
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-9-4 11:26:13 | 显示全部楼层
错误:
1. (setq ss (ssget "w" p1 p0 '((-4 . " (setq i 1)
2. line命令应以""结束
(command "line" (polar p8 (* 1.5 pi) h) (polar p11 (* 1.5 pi) h) "" "");多了两个引号应为:
(command "line" (polar p8 (* 1.5 pi) h) (polar p11 (* 1.5 pi) h) "")

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

使用道具 举报

 楼主| 发表于 2005-9-4 11:30:28 | 显示全部楼层
最初由 xyp1964 发布
[B]错误:(setq ss (ssget "w" p1 p0 '((-4 . " (setq i 1) [/B]

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

使用道具 举报

发表于 2005-9-4 17:37:22 | 显示全部楼层
就如xyp版主说的,这个ssget有些问题
由于你这个lisp文件看起来是很专用的程序
所以你可能得大概描述一下,它是干什么用的,比如拿来统计什么,标注,圆,还是文字
输出的大概是什么。
至于要求的文字和精度,指的是什么哪一步。
只有说清楚了,才比较好解决:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-4 18:21:53 | 显示全部楼层
过滤器带“OR”用PHP代码吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-4 21:50:26 | 显示全部楼层
此LISP是用来统计相同圆的数量和列出圆的坐标位置!
但是现在列出来的小数点的位数不可以选择!
                            如下      
系号   ---------     X坐标    --------        Y坐标
A1          ---------   52.78952     --------      31.57891
  A2          ---------    3.01238      --------     65.12389
  B1          ---------  3.01549         --------     9.01358
  C1          ---------   39.01589      --------     9.01235
请拿位高手在此LISP文件上加上选择标注后小数点的位数!和数字的大小!谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-4 22:06:27 | 显示全部楼层
[php](load "xyp_lib")
;|加载通用函数(可在签名栏直接下载)
如果已经下载xyp_lib并放到搜索路径下可以不再下载!
利用以下任何一种方式即可加载和运行通用函数内的所有子程序:
1.在acad.lsp中增加(load"xyp_lib")
2.在每个程序内增加(load"xyp_lib")
3.在command下,输入(load"xyp_lib")
4.在菜单.mnl中增加(load"xyp_lib")
5.将xyp_lib.vlx文件直接拽到cad屏幕
★通用函数下载地址:[/COLOR]
http://www.xdcad.net/forum/attachment.php?s=&postid=1606661
http://www.mjtd.com/bbs/dispbbs. ... ID=37554&page=1|;

(defun c:tjj ()
  (cmdla0)
  (mkla "txt" 1)
  (setq        h   (UREAL 7 "" "\n文字高度" h)
        xsd (UINT 1 "" "\n小数点的位数" xsd)
        p4  (getpoint "\n 请输入图框左下角:")
        p5  (getcorner p4 "\n 请输入图框右上角:")
        p1  (getpoint "\n 请输入要统计的左下角:")
        x1  (car p1)
        y1  (cadr p1)
        p0  (getcorner p1 "\n 请输入要统计的右上角:")
        p3  (getpoint "\n 请输入统计文字位置:")
        x4  (car p4)
        x5  (car p5)
        w   (- x5 x4)
        p8  (getpoint p3 "\n 请输入座标放置位置:")
        p9  (polar p8 0 (* 4 h))
        p10 (polar p8 0 (* 14 h))
        p11 (polar p8 0 (* 22 h))
        p12 (polar p8 (* 1.5 pi) h)
        p13 (polar p11 (* 1.5 pi) h)
  )
  (command "line" p12 p13 "")
  (setvar "osmode" 0)
  (command "text" "ml" p9 h 0 "X")
  (command "text" "ml" p10 h 0 "Y")
  (setq        txt "ABCDEFGHIJKLMNOPQRSTUVWXYP"
        ss  (ssget "w" p1 p0 '((0 . "arc,circle")))
        i   1
        pt  p3
  )
  (while ss
    (setq en   (ssname ss 0)
          end  (entget en)
          rad  (+ (cdr (assoc 40 end)) 0.000)
          pci  (cdr (assoc 0 end))
          d    (rtos (* 2 rad) 2 xsd)
          ssa  (ssget "w" p1 p0 (list (cons 40 rad) (cons 0 pci)))
          nn   (sslength ssa)
          stxt (substr txt i 1)
          m    0
          x    0
    )
    (repeat nn
      (setq een         (ssname ssa m)
            eend (entget een)
            cen         (cdr (assoc 10 eend))
            xxx         (- (+ 0.000 (car cen)) x1)
            yyy         (- (+ 0.000 (cadr cen)) y1)
            xxxt (rtos xxx 2 xsd)
            yyyt (rtos yyy 2 xsd)
            ssb         (ssget "x" (list (cons 10 cen)))
            nnn         (sslength ssb)
      )
      (if (= nnn 2)
        (progn
          (setq        f     (ssname ssb 0)
                g     (ssname ssb 1)
                fn    (entget f)
                gn    (entget g)
                radf  (+ (cdr (assoc 40 fn)) 0.000)
                radg  (+ (cdr (assoc 40 gn)) 0.000)
                radma (max radf radg)
                radmi (min radf radg)
                p2    (polar cen (* 1.75 pi) (+ 4 radma))
          )
          (if (= rad radf)
            (setq ss (ssdel g ss))
            (setq ss (ssdel f ss))
          )
          (if (= rad radf)
            (setq hn fn)
            (setq hn gn)
          )
          (setq        ty  (cdr (assoc 0 hn))
                dma (rtos (* 2 radma) 2 xsd)
                dmi (rtos (* 2 radmi) 2 xsd)
          )
          (if (= ty "CIRCLE")
            (setq sssstxt (strcat " %%c" dma ""))
            (setq sssstxt (strcat " M" dma))
          )
          (setq ssstxt (strcat "-%%C" dmi "" sssstxt))
        )
        (setq p2     (polar cen (* 1.75 pi) (+ 3 rad))
              ssstxt (strcat "-%%C" (rtos (* 2 rad) 2 xsd) "")
        )
      )
      (setq x          (+ 1 x)
            xt          (itoa x)
            xtxt  (strcat stxt xt)
            xxxxt (strcat xtxt ":")
      )
      (command "text" "ml" p2 h 0 xtxt)
      (setq p8        (polar p8 (* 1.5 pi) (* 2 h))
            p9        (polar p9 (* 1.5 pi) (* 2 h))
            p10        (polar p10 (* 1.5 pi) (* 2 h))
            p11        (polar p11 (* 1.5 pi) (* 2 h))
      )
      (command "line"
               (polar p8 (* 1.5 pi) h)
               (polar p11 (* 1.5 pi) h)
               ""
      )
      (command "text" "ml" p8 h 0 xxxxt)
      (command "text" "ml" p9 h 0 xxxt)
      (command "text" "ml" p10 h 0 yyyt)
      (setq ss (ssdel een ss)
            m  (+ 1 m)
      )
    )
    (setq sstxt (strcat stxt " : " (itoa nn) ssstxt))
    (command "text" "ml" pt h 0 sstxt)
    (setq i  (+ i 1)
          pt (polar pt (* 1.5 pi) (* 1.5 h))
    )
  )
  (cmdla1)
)
(pxyp"tjj")
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-4 23:23:20 | 显示全部楼层
好像不可以用了!还是我加的不对?请xyp版主再帮忙看看!谢谢!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-9-5 18:20:30 | 显示全部楼层
大概如下,不过没有修改那个直径后面的位数,只改了坐标
第二,对于那些17.5的,暂时没有写成17.50,有待修改,很奇怪
(setq a 17.5)
(setq a (rtos a 2 2))按帮助应该是17.50的,不知道为什么在我机器上都是17.5的



[PHP](defun c:tjj()
  (setvar "cmdecho" 0)
  (setvar "osmode" 1)
  (command "osnapcoord" 2)
  (command "ucs" "w")
  (command "layer" "s" "txt" "")
  (setq txth (getreal "\n字高" ))
  (setq num (getint "\n小数位数"))
  (setq p4 (getpoint "\n 请输入图框左下角:"))
  (setq p5 (getpoint "\n 请输入图框右上角:"))
  (setq p1 (getpoint "\n 请输入要统计的左下角:"))
  (setq x1 (car p1) y1 (cadr p1))
  (setq p0 (getpoint "\n 请输入要统计的右上角:"))
  (setq p3 (getpoint "\n 请输入统计文字位置:"))
  (setq x4 (car p4) x5 (car p5))
  (setq w (- x5 x4))
  (setq h (* (/ w 280) 2))
  (setq h txth)
  (setq p8 (getpoint "\n 请输入座标放置位置:"))
  (setq p9 (polar p8 0 (* 4 h)))
  (setq p10 (polar p8 0 (* 14 h)))
  (setq p11 (polar p8 0 (* 22 h)))
  (setq p12 (polar p8 (* 1.5 pi) h))
  (setq p13 (polar p11 (* 1.5 pi) h))
  (command "line" p12 p13 "" "")
  (setvar "osmode" 0)
  (command "text" "ml" p9 h 0 "X")
  (command "text" "ml" p10 h 0 "Y")
  (setq txt "ABCDEFGHIJKLMNOPQ")
  (setq ss (ssget "w" p1 p0 '((-4 . "<or") (0 . "arc") (0 . "circle") (-4 . "or>"))))
  (setq i 1)
  (setq pt p3)
  
  (while (ssname ss 0)
  
     (setq en (ssname ss 0))
     
     (setq end (entget en))
     (setq rad (+ (cdr (assoc 40 end)) 0.000))
     (setq pci (cdr (assoc 0 end)))
     (setq d (rtos (* 2 rad)))
     (setq ssa (ssget "w" p1 p0 (list (cons 40 rad) (cons 0 pci))))
     (setq nn (sslength ssa))
      
     (setq stxt (substr txt i 1))
     (setq m 0)
     (setq x 0)
       (repeat nn
          (setq een (ssname ssa m))
          (setq eend (entget een))
          (setq cen (cdr (assoc 10 eend)))
          (setq xxx (- (+ 0.000 (car cen)) x1))
          (setq yyy (- (+ 0.000 (cadr cen)) y1))
          ;(setq xxxt (rtos xxx))
          (setq xxxt (rtos (sswr xxx num) 2 num))
          ;(setq yyyt (rtos yyy))
          (setq yyyt (rtos (sswr yyy num) 2 num))
          (setq ssb (ssget "x" (list (cons 10 cen))))
          (setq nnn (sslength ssb))
            (if (= nnn 2)
               (progn
                 (setq f (ssname ssb 0))
                 (setq g (ssname ssb 1))
                 (setq fn (entget f))
                 (setq gn (entget g))
                 (setq radf (+ (cdr (assoc 40 fn)) 0.000))
                 (setq radg (+ (cdr (assoc 40 gn)) 0.000))
                 (setq radma (max radf radg))
                 (setq radmi (min radf radg))
                 (setq p2 (polar cen (* 1.75 pi) (+ 4 radma)))
                 (if (= rad radf) (setq ss (ssdel g ss)) (setq ss (ssdel f ss)))
                 (if (= rad radf) (setq hn fn) (setq hn gn))
                 (setq ty (cdr (assoc 0 hn)))
                 (setq dma (rtos (* 2 radma)))
                 (setq dmi (rtos (* 2 radmi)))
                 (if (= ty "CIRCLE") (setq sssstxt (strcat " %%c" dma "<CB>")) (setq sssstxt (strcat " M" dma)))
                 (setq ssstxt (strcat "-%%C" dmi "<THR>" sssstxt))
                 )
               (setq p2 (polar cen (* 1.75 pi) (+ 3 rad))
                     ssstxt (strcat "-%%C" (rtos (* 2 rad) 2 3) "<THR>"))
              )
          (setq x (+ 1 x))
          (setq xt (itoa x))
          (setq xtxt (strcat stxt xt))
          (setq xxxxt (strcat xtxt ":"))
          (command "text" "ml" p2 h 0 xtxt)
          (setq p8 (polar p8 (* 1.5 pi) (* 2 h)))
          (setq p9 (polar p9 (* 1.5 pi) (* 2 h)))
          (setq p10 (polar p10 (* 1.5 pi) (* 2 h)))
          (setq p11 (polar p11 (* 1.5 pi) (* 2 h)))
          (command "line" (polar p8 (* 1.5 pi) h) (polar p11 (* 1.5 pi) h) "" )
          (command "text" "ml" p8 h 0 xxxxt)
          (command "text" "ml" p9 h 0 xxxt)
          (command "text" "ml" p10 h 0 yyyt)
          (setq ss (ssdel een ss))
          (setq m (+ 1 m))
         )
     (setq sstxt (strcat stxt " : " (itoa nn) ssstxt))
     (command "text" "ml" pt h 0 sstxt)
     (setq i (+ i 1))
     (setq pt (polar pt (* 1.5 pi) (* 1.5 h)))
     )
      
  (setvar "osmode" 7)
(princ)
)

(defun sswr (real num / real1)
(setq a (* real (expt 10 num)))
(setq real2 (- (quzheng (* real (expt 10 (1+ num)))) (* (quzheng (* real (expt 10 num))) 10)))
(if (> real2 4) (setq addnum 1) (setq addnum 0))
(setq real1 (/ (+ (atof (rtos (quzheng (* real (expt 10 num))))) addnum) (expt 10 num)))
real1
)
(defun quzheng(real1 / temp)
(setq temp (atoi (rtos real1)))
temp
)[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-5 18:33:47 | 显示全部楼层
最初由 snoopychen 发布
[B]大概如下,不过没有修改那个直径后面的位数,只改了坐标
第二,对于那些17.5的,暂时没有写成17.50,有待修改,很奇怪
(setq a 17.5)
(setq a (rtos a 2 2))按帮助应该是17.50的,不知道为什么在我机器上都是17.5... [/B]

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

使用道具 举报

 楼主| 发表于 2005-9-5 19:11:08 | 显示全部楼层
谢谢snoopychen 和xyp1964的帮助!
现在可以用了!但是注解里的不可以跟的一起改!
特别是有纯孔的,里面是5位!
请多多指教!谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-5 20:16:19 | 显示全部楼层
frank啊,其实原来的程序写的挺好的,不过你既然是这样要求,那就按照你的改一下吧
现在是写在圆心了,不如原来的好
第二,小数点对于半径和坐标都可以设置
原点位置可以自己指定
[PHP]
(defun c:tjj()
  (setvar "cmdecho" 0)
  (setvar "dimzin" 0)
  (setvar "osmode" 1)
  (command "osnapcoord" 2)
  (command "ucs" "w")
  (command "layer" "s" "txt" "")
  (setq txth (getreal "\n字高" ))
  (setq num (getint "\n坐标小数位数"))
  (setq num1 (getint "\n圆半径小数位数"))
  ;(setq p4 (getpoint "\n 请输入图框左下角:"))
  ;(setq p5 (getpoint "\n 请输入图框右上角:"))
  (setq p000 (getpoint "\n座标原点位置"))
  (setq p1 (getpoint "\n 请输入要统计的左下角:"))
  (setq x1 (car p000) y1 (cadr p000))
  (setq p0 (getpoint "\n 请输入要统计的右上角:"))
  (setq p3 (getpoint "\n 请输入统计文字位置:"))
  (setq x4 (car p4) x5 (car p5))
  ;(setq w (- x5 x4))
  ;(setq h (* (/ w 280) 2))
  (setq h txth)
  (setq p8 (getpoint "\n 请输入座标放置位置:"))
  (setq p9 (polar p8 0 (* 4 h)))
  (setq p10 (polar p8 0 (* 14 h)))
  (setq p11 (polar p8 0 (* 22 h)))
  (setq p12 (polar p8 (* 1.5 pi) h))
  (setq p13 (polar p11 (* 1.5 pi) h))
  (command "line" p12 p13 "" "")
  (setvar "osmode" 0)
  (command "text" "ml" p9 h 0 "X")
  (command "text" "ml" p10 h 0 "Y")
  (setq txt "ABCDEFGHIJKLMNOPQ")
  (setq ss (ssget "w" p1 p0 '((-4 . "<or") (0 . "arc") (0 . "circle") (-4 . "or>"))))
  (setq i 1)
  (setq pt p3)
   
  (while (ssname ss 0)
   
     (setq en (ssname ss 0))
      
     (setq end (entget en))
     (setq rad (+ (cdr (assoc 40 end)) 0.000))
     (setq pci (cdr (assoc 0 end)))
     (setq d (rtos (* 2 rad)))
     (setq ssa (ssget "w" p1 p0 (list (cons 40 rad) (cons 0 pci))))
     (setq nn (sslength ssa))
      
     (setq stxt (substr txt i 1))
     (setq m 0)
     (setq x 0)
       (repeat nn
          (setq een (ssname ssa m))
          (setq eend (entget een))
          (setq cen (cdr (assoc 10 eend)))
          (setq xxx (- (+ 0.000 (car cen)) x1))
          (setq yyy (- (+ 0.000 (cadr cen)) y1))
          ;(setq xxxt (rtos xxx))
          (setq xxxt (rtos (sswr xxx num) 2 num))
          ;(setq yyyt (rtos yyy))
          (setq yyyt (rtos (sswr yyy num) 2 num))
          (setq ssb (ssget "x" (list (cons 10 cen))))
          (setq nnn (sslength ssb))
            (if (= nnn 2)
               (progn
                 (setq f (ssname ssb 0))
                 (setq g (ssname ssb 1))
                 (setq fn (entget f))
                 (setq gn (entget g))
                 (setq radf (+ (cdr (assoc 40 fn)) 0.000))
                 (setq radg (+ (cdr (assoc 40 gn)) 0.000))
                 (setq radma (max radf radg))
                 (setq radmi (min radf radg))
                (setq p2 (polar cen (* 1.75 pi) (+ 4 radma)))
                 ;(setq p2 cen)
                 (if (= rad radf) (setq ss (ssdel g ss)) (setq ss (ssdel f ss)))
                 (if (= rad radf) (setq hn fn) (setq hn gn))
                 (setq ty (cdr (assoc 0 hn)))
                 (setq dma (rtos (sswr (* 2 radma) num1) 2  num1) )
                 (setq dmi (rtos (sswr (* 2 radmi) num1) 2  num1) )
;                 (setq dmi (rtos (* 2 radmi)))
                 
                 (if (= ty "CIRCLE") (setq sssstxt (strcat " %%c" dma "<CB>")) (setq sssstxt (strcat " M" dma)))
                 (setq ssstxt (strcat "-%%C" dmi "<THR>" sssstxt))
                 )
               (setq p2 (polar cen (* 1.75 pi) (+ 3 rad))
               ;(setq p2 cen)
                     ssstxt (strcat "-%%C" (rtos (sswr (* 2 rad) num1) 2 num1) "<THR>"))
              )
          (setq x (+ 1 x))
          (setq xt (itoa x))
          (setq xtxt (strcat stxt xt))
         
          (setq xxxxt (strcat xtxt ":"))
          (command "text" "ml" cen h 0 xtxt)
           
          (setq p8 (polar p8 (* 1.5 pi) (* 2 h)))
          (setq p9 (polar p9 (* 1.5 pi) (* 2 h)))
          (setq p10 (polar p10 (* 1.5 pi) (* 2 h)))
          (setq p11 (polar p11 (* 1.5 pi) (* 2 h)))
          (command "line" (polar p8 (* 1.5 pi) h) (polar p11 (* 1.5 pi) h) "" )
          (command "text" "ml" p8 h 0 xxxxt)
          (command "text" "ml" p9 h 0 xxxt)
          (command "text" "ml" p10 h 0 yyyt)
          (setq ss (ssdel een ss))
          (setq m (+ 1 m))
         )
         
     (setq sstxt (strcat stxt " : " (itoa nn) ssstxt))
     (command "text" "ml" pt h 0 sstxt)
     (setq i (+ i 1))
     (setq pt (polar pt (* 1.5 pi) (* 1.5 h)))
     )
      
  (setvar "osmode" 7)
(princ)
)

(defun sswr (real num / real1)
(setq a (* real (expt 10 num)))
(setq real2 (- (quzheng (* real (expt 10 (1+ num)))) (* (quzheng (* real (expt 10 num))) 10)))
(if (> real2 4) (setq addnum 1) (setq addnum 0))
(setq real1 (/ (+ (atof (rtos (quzheng (* real (expt 10 num))))) addnum) (expt 10 num)))
real1
)
(defun quzheng(real1 / temp)
(setq temp (atoi (rtos real1)))
temp
)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-6 19:02:10 | 显示全部楼层
纯孔就是像螺丝头的让位孔!
snoopychen 这个LISP是用在机械设计里的!

系号 --------- X坐标 -------- Y坐标
A1 --------- 52.78952 -------- 31.57891
A2 --------- 3.01238 -------- 65.12389
B1 --------- 3.01549 -------- 9.01358
C1 --------- 39.01589 -------- 9.01235

注解
A:-2个3.000的通孔
B:-1个5.00000的通孔,8.00000的纯孔,深度是6.0000
C:-1个15.000的通孔
不过里面的文字是用代码的!

我是想注解里面的也可以选择小数点的位数!
还有代码不在圆的中间是在右下方?


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

使用道具 举报

发表于 2005-9-6 23:04:47 | 显示全部楼层
大概改完,见13楼,你的原点定法不对,重复定义会冲掉的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 12:43 , Processed in 0.229615 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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