明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6064|回复: 20

求一个多图元类型自动标注程序!

  [复制链接]
发表于 2012-9-5 10:14 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 半听可乐 于 2012-12-10 13:01 编辑

本人尝试了一些自动标注程序,包括一些广为熟知的商用软件里的自动标注,发现大多只对单一对象就行标注,能不能实现对指定的多种类型的图元进行标注呢?因为有些图元不光要标间距,还要标与周围墙、柱子的距离,这时就得手工调整了,如果工程较大那真是苦不堪言,一次就罢了,改图时那种痛~~~不说了,各位高手请看插图和附件

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

最佳答案

查看完整内容

帮你做了一个,严重建议你将喷头的块炸开成圆。
发表于 2012-9-5 10:14 | 显示全部楼层
本帖最后由 springwillow 于 2012-12-12 17:42 编辑

帮你做了一个,严重建议你将喷头的块炸开成圆。

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
半听可乐 + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2012-9-5 13:06 | 显示全部楼层
喷头标注演示

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2012-9-5 13:10 | 显示全部楼层
xyp1964 发表于 2012-9-5 13:06
喷头标注演示

院长动作真快!佩服佩服!可以标柱中、墙中吗?

点评

“标柱中和墙中”似乎没有意义  发表于 2012-9-5 13:21
回复

使用道具 举报

 楼主| 发表于 2012-9-5 13:33 | 显示全部楼层
半听可乐 发表于 2012-9-5 13:10
院长动作真快!佩服佩服!可以标柱中、墙中吗?

便于工人下料啊,尺寸看起来也简单
回复

使用道具 举报

发表于 2012-9-5 14:16 | 显示全部楼层
你说的2和4不是cad认识的类型,要做也得做一些处理
回复

使用道具 举报

 楼主| 发表于 2012-9-5 16:53 | 显示全部楼层
本帖最后由 半听可乐 于 2012-9-5 16:54 编辑
天意今天 发表于 2012-9-5 14:16
你说的2和4不是cad认识的类型,要做也得做一些处理


就是想要高手的处理,我的思路是
①判断墙线间距,如果间距在500以内,则在两墙线之间画中心线,个人提供中心线参考程序如下
②把画出的中心线当作自动标注的捕捉点之一,自动标注
③标注完成后删除中心线
也许没那么复杂(我想如果能自动计算出中心点,而不需要画线)

;---------------------------------------------------------------------------------------------------------------------
;★DB_AICENT 中心线绘制(支持矩形框,中心线为黄色虚线,在cen层)
;by 向赞扬
;---------------------------------------------------------------------------------------------------------------------
(defun C:DB_AICENT(/     en    en_data         lx     pt0
      nx     cenpt  r   pt3x  pt3y pt4x   pt4y   pt5
      pt5x   pt5y   pt6   pt6x  pt6y l      l1     en3
      en1    en1_data   en2  en2_data
     )
  (terpri)
  (setq v1 (getvar "osmode"))
  (setq v2 (getvar "cmdecho"))
  (setq v3 (getvar "blipmode"))
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (SETVAR "OSMODE" 0)
  (graphscr)
  (setq en (entsel "\nselection a object!"))
  (setq en_data (entget (car en)))
  (setq lx_list (assoc 0 en_data))
  (setq lx (cdr lx_list))
  (cond ((= "CIRCLE" lx)
  (progn
    (setq v4 (getvar "CLAYER"))
    (setq pt0 (cadr en))
    (setq nx (cdr (assoc 0 en_data)))
    (setq cenpt (osnap pt0 "center"))
    (setq r (cdr (assoc 40 en_data)))
    (setq pt1 (polar cenpt pi (+ (* r 0.2) r)))
    (setq pt2 (polar cenpt 0 (+ (* r 0.2) r)))
    (setq pt3 (polar cenpt (* 0.5 pi) (+ (* r 0.2) r)))
    (setq pt4 (polar cenpt (* 1.5 pi) (+ (* r 0.2) r)))
    (command "osnap" "none")
    (if (not (tblsearch "LAYER" "Cen"))
      (command "layer" "m" "Cen" "c" 2 "" "l" "center2" "" "lw"
        0.18 "" "")
    )
    (command "layer" "s" "cen" "")
    (command "line" pt1 pt2 "")
    (command "line" pt3 pt4 "")
    (setvar "CLAYER" v4)
  )
)
((= "ARC" lx)
  (progn
    (setq v4 (getvar "CLAYER"))
    (setq pt0 (cadr en))
    (setq nx (cdr (assoc 0 en_data)))
    (setq cenpt (osnap pt0 "center"))
    (setq r (cdr (assoc 40 en_data)))
    (setq pt1 (polar cenpt pi (+ (* r 0.2) r)))
    (setq pt2 (polar cenpt 0 (+ (* r 0.2) r)))
    (setq pt3 (polar cenpt (* 0.5 pi) (+ (* r 0.2) r)))
    (setq pt4 (polar cenpt (* 1.5 pi) (+ (* r 0.2) r)))
    (command "osnap" "none")
    (if (not (tblsearch "LAYER" "Cen"))
      (command "layer" "m" "Cen" "c" 2 "" "l" "center2" "" "lw"
        0.18 "" "")
    )
    (command "layer" "s" "cen" "")
    (command "line" pt1 pt2 "")
    (command "line" pt3 pt4 "")
    (setvar "CLAYER" v4)
  )
)
((= "LINE" lx)
  (progn
    (setq v4 (getvar "CLAYER"))
    (setq pt1 (osnap (cadr en) "nearest"))
    (setq en1   (entsel "\n selection another line")
   en1_data (entget (car en1))
    )
    (setq pt2 (osnap (cadr en1) "nearest"))
    (command "line" pt1 (osnap pt2 "perpendicular") "")
    (setq en2 (entlast))
    (setq en2_data (entget en2))
    (setq pt3x (cadr (assoc 10 en2_data)))
    (setq pt3y (caddr (assoc 10 en2_data)))
    (setq pt3 (list pt3x pt3y))
    (setq pt4x (cadr (assoc 11 en2_data)))
    (setq pt4y (caddr (assoc 11 en2_data)))
    (setq pt4 (list pt4x pt4y))
    (setq l (distance pt3 pt4))
    (SETQ l1 (/ l 2))
    (command "offset" l1 en pt2 "")
    (setq en3 (entlast))
    (if (not (tblsearch "LAYER" "Cen"))
      (command "layer" "m" "Cen" "c" 2 "" "l" "center2" "" "lw"
        0.18 "" "")
    )
    (command "change" en3 "" "p" "la" "Cen" "c" "byl" "lt" "byl"
      "")
    (setq pt5x (cadr (assoc 10 (entget en3)))
   pt5y (caddr (assoc 10 (entget en3)))
   pt5  (list pt5x pt5y)
   pt6x (cadr (assoc 11 (entget en3)))
   pt6y (caddr (assoc 11 (entget en3)))
   pt6  (list pt6x pt6y)
    )
    (command "osnap" "none")
    (command "lengthen" "de" 3 pt5 "")
    (command "lengthen" "de" 3 pt6 "")
    (command "ERASE" en2 "")
    (setvar "CLAYER" v4)
  )
)
((= "LWPOLYLINE" lx)
  (progn
    (SETVAR "OSMODE" 0)
    (command "ucs" "w" )
    (setq v4 (getvar "CLAYER"))
    (setq pt1(cdr(assoc 10 en_data))
    )
    (setq listlength(length en_data))
   (setq pt4(cdr(nth (-  listlength 5) en_data)))
    (setq pt3(cdr(nth (-  listlength 9) en_data)))
    (setq pt2(cdr(nth (-  listlength 13) en_data)))
    (setq al(angle pt1 pt2))
    (setq l(distance pt1 pt2))
    (setq h(distance pt1 pt4))
           (command "line" pt1 pt3 "")
    (setq en2 (entlast))
    (command "_divide" en2 2)
    (setq en3(entlast))
    (setq en3_data (entget en3))
    (setq cenpt(cdr(assoc 10 en3_data)))
    (setq pt5(polar cenpt (+ pi al) (/ l 2)))
    (setq pt6(polar cenpt al (/ l 2)))
    (setq pt7(polar cenpt (+ al (* pi 1.5)) (/ h 2)))
    (setq pt8(polar cenpt (+ al (/ pi 2)) (/ h 2)))
    (command "erase" en2 en3 "")
    (if (not (tblsearch "LAYER" "Cen"))
    (command "layer" "m" "Cen" "c" 2 "" "l" "center2" "" "lw" 0.18 "" "")
  )
(command "layer" "s" "cen" "")    (command "line" pt5 pt6 "")
    (setq en4(entlast))
    (command "line" pt7 pt8 "")
    (setq en5(entlast))
    (setq dee(* 0.1 l))
    (command "lengthen" "de" dee pt5 pt6 pt7 pt8 "")
    ;(print "Selective is spline can't add centerline!")
    (setvar "CLAYER" v4)
  )
)
  )
  (setvar "osmode" v1)
  (setvar "cmdecho" v2)
  (setvar "blipmode" v3)
  (princ)
)
回复

使用道具 举报

发表于 2012-9-5 19:13 | 显示全部楼层
半听可乐 发表于 2012-9-5 16:53
就是想要高手的处理,我的思路是
①判断墙线间距,如果间距在500以内,则在两墙线之间画中心线,个人提 ...

关注,感觉自己到这样的
回复

使用道具 举报

 楼主| 发表于 2012-9-6 16:02 | 显示全部楼层
大神何在?顶的好辛苦!
回复

使用道具 举报

发表于 2012-9-6 20:44 | 显示全部楼层
   请2楼院长帮指点下好了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 16:20 , Processed in 0.259469 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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