明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3341|回复: 26

[讨论] 统计圆数量并列表

[复制链接]
发表于 2014-11-12 23:21 | 显示全部楼层 |阅读模式
想得到的效果:

1 框选图形,能统计所有圆的数量并列表。

2 圆的右下角以字母标记。

相同半径的圆分别以 A1,A2,A3,命名。以此类推。

不同半径的以B1,C1,,,,,表示。

3.要能过滤圆弧,长圆形。

我自己的源码目前只能统计数量,还达不到上述效果。请教高手该如何解决!

[img]http://v1.freep.cn/3tb_1411122315053su1512293.jpg[img]

(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)
)

   
  
 楼主| 发表于 2014-11-12 23:22 | 显示全部楼层
 楼主| 发表于 2014-11-12 23:22 | 显示全部楼层
发表于 2014-11-13 10:40 | 显示全部楼层
支持下你
发表于 2014-11-13 18:52 | 显示全部楼层
本帖最后由 SunSpring 于 2014-11-15 17:52 编辑



很早之前写的,有需要的下载看看吧。可自动识别沉头孔和螺纹孔。选择的左下角点为原点。


本帖子中包含更多资源

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

x

点评

ERROR!! ==> 函数错误: <Selection set: 18b>!!!  发表于 2015-4-20 15:29

评分

参与人数 1金钱 +5 收起 理由
sjj + 5 形未定义,可能少了什么形字体

查看全部评分

 楼主| 发表于 2014-11-13 23:54 来自手机 | 显示全部楼层
虽然收币,但也应该,毕竟源码。我的币只有五个,还是买了!试试看!谢谢!
 楼主| 发表于 2014-11-14 13:55 来自手机 | 显示全部楼层
SunSpring 发表于 2014-11-13 18:52
很早之前写的,有需要的下载看看吧。

亲,我试用了你的程序,有表格出来,但是没有任何字符列出来啊!!!!亲看看怎么回事?测试环境 autoCAD2004,有VB,c++。
 楼主| 发表于 2014-11-14 13:56 来自手机 | 显示全部楼层
SunSpring 发表于 2014-11-13 18:52
很早之前写的,有需要的下载看看吧。

亲,我试用了你的程序,有表格出来,但是没有任何字符列出来啊!!!!亲看看怎么回事?测试环境 autoCAD2004,有VB,c++。
发表于 2014-11-14 14:13 | 显示全部楼层
lengxiaxi 发表于 2014-11-14 13:56
亲,我试用了你的程序,有表格出来,但是没有任何字符列出来啊!!!!亲看看怎么回事?测试环境 autoCAD ...

  1. (defun maketext (locationpoint textheight text rowtype)
  2.   ;(makestyle "工程图" "hztxt_e.shx" "hztxt.shx" 0.8)
  3.   (entmake (list '(0 . "TEXT")
  4.                  '(100 . "AcDbText") (cons 40 textheight)
  5.                  (cons 1 text)
  6.                  (cons 72 rowtype)
  7.                  '(10 0.0 0.0 0.0)
  8.                  (cons 11 locationpoint)
  9.                  '(73 . 2) ;'(7 . "工程图")
  10.            )
  11.   )
  12. )


按照上面的注释掉,再试试看
发表于 2014-11-14 21:49 | 显示全部楼层
SunSpring 发表于 2014-11-13 18:52
很早之前写的,有需要的下载看看吧。

这个圆心坐标,不知道能不能统计圆大小和数量....谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2018-6-22 05:24 , Processed in 0.290322 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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