明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1641|回复: 7

求改通过选择对象来识别图层的与设置字高

[复制链接]
发表于 2012-12-11 19:20:20 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 flytoday 于 2012-12-11 20:11 编辑

;;梁线层名为11-Y;中心线层名为5;标注的梁宽层为当前层。
(vl-load-com)
(defun x_ssn (ss / n lst)
  (repeat (setq N (sslength ss))
    (setq LST (cons (ssname SS (setq N (1- N))) LST))
  )
)
(defun t_mak (l_n t_10 t_11 t_t t_50 t_72 t_73 t_h t_w t_st /)
  (entmake (list '(0 . "text")
     '(100 . "AcDbEntity")
     (cons 8 l_n)
     '(100 . "AcDbText")
     (cons 10 t_10)
     (cons 1 t_t)
     (cons 40 t_h)
     (cons 41 t_w)
     (cons 7 t_st)
     (cons 72 t_72)
     (cons 11 t_11)
     (cons 50 t_50)
     (cons 73 t_73)
     ) ;_ 结束list
  ) ;_ 结束entmake
) ;_ 结束defun
(defun ch_dxf (en num ch / old_num new_num ent)
  (if (setq ent      (entget en)
      new_num (cons num ch)
      old_num (assoc num ent)
      )
    (entmod (subst new_num old_num ent))
    (entmod (reverse (cons new_num (reverse ent))))
  )
)
(defun beam_w (en lay / ent pt1 pt2 mid_pt ang n ss dist)
;;;  (setq en (car(entsel)) lay "11-Y")
  (setq ent (entget en))
  (setq  pt1 (cdr (assoc 10 ent))
  pt2 (cdr (assoc 11 ent))
  )
  (setq mid_pt (mapcar '(lambda (x y) (/ (+ x y) 2)) pt1 pt2))
  (setq ang (angle pt1 pt2))
  (setq n 0)
  (while
    (= nil
       (setq ss
        (ssget "f"
         (list (polar mid_pt (+ ang (/ pi 2)) (+ 76 (* n 25)))
         (polar mid_pt (+ ang (/ pi -2)) (+ 76 (* n 25)))
         )
         (list '(0 . "line") (cons 8 lay))
        )
       )
    )
     (setq n (1+ n))
  )
  (setq  dist (*  2
    (distance mid_pt
        (vlax-curve-getClosestPointTo
          (vlax-ename->vla-object (ssname ss 0))
          mid_pt
        )
    )
       )
  )
  (t_mak "0"
   '(0 0 0)
   mid_pt
   (strcat "梁宽" (rtos dist))
   ang
   1
   0
   250
   0.75
   "standard"
  )
  dist
)
(defun m_dela (m_list / x m_list1)
  (setq m_list1 nil)
  (mapcar '(lambda (x)
       (if (not (member x m_list1))
         (setq m_list1 (cons x m_list1))
       )
     )
    m_list
  )
  (setq m_list (reverse m_list1))
)
(defun c:test1 (/ ss1 ss2 lst1 lst2 n)
(setq ss1 (ssget '((0 . "line") (8 . "5"))))
  (setq ss2 (ssget "X" '((0 . "line") (8 . "11-Y"))))
  (mapcar '(lambda (x) (ch_dxf x 6 "continuous")) (x_ssn ss2))
  (setq  lst1 (mapcar '(lambda (x) (list (rtos (beam_w x "11-Y")) x))
         (x_ssn ss1)
       )
  )
  (setq
    lst2 (m_dela
     (mapcar '(lambda (x) (rtos (beam_w x "11-Y"))) (x_ssn ss1))
   )
  )
  (setq n 0)
  (while (< n (length lst2))
    (mapcar '(lambda (x)
         (if (member (nth n lst2) x)
     (vla-put-color (vlax-ename->vla-object (cadr x)) (1+ n))
     t
         )
       )
      lst1
    )
    (setq n (1+ n))
  )
  (mapcar '(lambda (x) (ch_dxf x 6 "DASH")) (x_ssn ss2))
  (princ)
)

最佳答案

查看完整内容

使用前先将虚线变为实线,我将那部分注释掉了,要加那部分处理的话,原有的代码是不够的,要考虑考虑

点评

这段程序只考虑了提问者提供的样图,在地板改了一下,还不够灵活  发表于 2012-12-11 20:24
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-12-11 19:20:21 | 显示全部楼层
使用前先将虚线变为实线,我将那部分注释掉了,要加那部分处理的话,原有的代码是不够的,要考虑考虑
  1. (vl-load-com)
  2. (defun x_ssn (ss / n lst)
  3.   (repeat (setq N (sslength ss))
  4.     (setq LST (cons (ssname SS (setq N (1- N))) LST))
  5.   )
  6. )
  7. (defun t_mak (l_n t_10 t_11 t_t t_50 t_72 t_73 t_h t_w t_st /)
  8.   (entmake (list '(0 . "text")
  9.                  '(100 . "AcDbEntity")
  10.                  (cons 8 l_n)
  11.                  '(100 . "AcDbText")
  12.                  (cons 10 t_10)
  13.                  (cons 1 t_t)
  14.                  (cons 40 t_h)
  15.                  (cons 41 t_w)
  16.                  (cons 7 t_st)
  17.                  (cons 72 t_72)
  18.                  (cons 11 t_11)
  19.                  (cons 50 t_50)
  20.                  (cons 73 t_73)
  21.            ) ;_ 结束list
  22.   ) ;_ 结束entmake
  23. ) ;_ 结束defun
  24. (defun ch_dxf (en num ch / old_num new_num ent)
  25.   (if (setq ent            (entget en)
  26.             new_num (cons num ch)
  27.             old_num (assoc num ent)
  28.       )
  29.     (entmod (subst new_num old_num ent))
  30.     (entmod (reverse (cons new_num (reverse ent))))
  31.   )
  32. )
  33. (defun beam_wt (en lay t_h / ent pt1 pt2 mid_pt ang n ss dist)
  34. ;;;  (setq en (car(entsel)) lay "11-Y")
  35.   (setq ent (entget en))
  36.   (setq        pt1 (cdr (assoc 10 ent))
  37.         pt2 (cdr (assoc 11 ent))
  38.   )
  39.   (setq mid_pt (mapcar '(lambda (x y) (/ (+ x y) 2)) pt1 pt2))
  40.   (setq ang (angle pt1 pt2))
  41.   (setq n 0)
  42.   (while
  43.     (= nil
  44.        (setq ss
  45.               (ssget "f"
  46.                      (list (polar mid_pt (+ ang (/ pi 2)) (+ 76 (* n 25)))
  47.                            (polar mid_pt (+ ang (/ pi -2)) (+ 76 (* n 25)))
  48.                      )
  49.                      (list '(0 . "line") (cons 8 lay))
  50.               )
  51.        )
  52.     )
  53.      (setq n (1+ n))
  54.   )
  55.   (setq        dist (*        2
  56.                 (distance mid_pt
  57.                           (vlax-curve-getClosestPointTo
  58.                             (vlax-ename->vla-object (ssname ss 0))
  59.                             mid_pt
  60.                           )
  61.                 )
  62.              )
  63.   )
  64.   (t_mak "0"
  65.          '(0 0 0)
  66.          mid_pt
  67.          (strcat "梁宽" (rtos dist))
  68.          ang
  69.          1
  70.          0
  71.          t_h
  72.          0.75
  73.          "standard"
  74.   )
  75.   dist
  76. )
  77. (defun beam_w (en lay / ent pt1 pt2 mid_pt ang n ss)
  78.   (setq ent (entget en))
  79.   (setq        pt1 (cdr (assoc 10 ent))
  80.         pt2 (cdr (assoc 11 ent))
  81.   )
  82.   (setq mid_pt (mapcar '(lambda (x y) (/ (+ x y) 2)) pt1 pt2))
  83.   (setq ang (angle pt1 pt2))
  84.   (setq n 0)
  85.   (while
  86.     (= nil
  87.        (setq ss
  88.               (ssget "f"
  89.                      (list (polar mid_pt (+ ang (/ pi 2)) (+ 76 (* n 25)))
  90.                            (polar mid_pt (+ ang (/ pi -2)) (+ 76 (* n 25)))
  91.                      )
  92.                      (list '(0 . "line") (cons 8 lay))
  93.               )
  94.        )
  95.     )
  96.      (setq n (1+ n))
  97.   )
  98. (*        2
  99.                 (distance mid_pt
  100.                           (vlax-curve-getClosestPointTo
  101.                             (vlax-ename->vla-object (ssname ss 0))
  102.                             mid_pt
  103.                           )
  104.                 )
  105.              )
  106. )
  107. (defun m_dela (m_list / x m_list1)
  108.   (setq m_list1 nil)
  109.   (mapcar '(lambda (x)
  110.              (if (not (member x m_list1))
  111.                (setq m_list1 (cons x m_list1))
  112.              )
  113.            )
  114.           m_list
  115.   )
  116.   (setq m_list (reverse m_list1))
  117. )
  118. (defun c:test1 (/ ss1 ss2 lst1 lst2 n lay1 lay2 t_h)
  119.   (setq lay1 (cdr(assoc 8 (entget(car(entsel "\n拾取中心线层:"))))))
  120.   (setq lay2 (cdr(assoc 8 (entget(car(entsel "\n拾取梁线层:"))))))
  121.   (setq t_h (getreal "\n输入字高:"))
  122.   (setq ss1 (ssget (list '(0 . "line") (cons 8 lay1))))
  123. ;;;  (setq ss2 (ssget "X" '((0 . "line") (8 . "11-Y"))))
  124. ;;;  (mapcar '(lambda (x) (ch_dxf x 6 "continuous")) (x_ssn ss2))
  125.   (setq        lst1 (mapcar '(lambda (x) (list (rtos (beam_wt x lay2 t_h)) x))
  126.                      (x_ssn ss1)
  127.              )
  128.   )
  129.   (setq
  130.     lst2 (m_dela
  131.            (mapcar '(lambda (x) (rtos (beam_w x lay2))) (x_ssn ss1))
  132.          )
  133.   )
  134.   (setq n 0)
  135.   (while (< n (length lst2))
  136.     (mapcar '(lambda (x)
  137.                (if (member (nth n lst2) x)
  138.                  (vla-put-color (vlax-ename->vla-object (cadr x)) (1+ n))
  139.                  t
  140.                )
  141.              )
  142.             lst1
  143.     )
  144.     (setq n (1+ n))
  145.   )
  146. ;;;  (mapcar '(lambda (x) (ch_dxf x 6 "DASH")) (x_ssn ss2))
  147.   (princ)
  148. )

评分

参与人数 1明经币 +1 收起 理由
flytoday + 1 很强大~

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-12-11 19:22:17 | 显示全部楼层
求路过的大师改下通过选择对象来识别图层。。并进行设置标注字高。。~

谢谢~
回复

使用道具 举报

发表于 2012-12-11 19:47:01 | 显示全部楼层
留位,难度好像不大
回复

使用道具 举报

发表于 2012-12-11 21:43:45 来自手机 | 显示全部楼层
看看,,,,,,,
回复

使用道具 举报

发表于 2012-12-11 22:36:56 | 显示全部楼层
到哪都是有钱人的天下。 楼主省心又省力呀。
回复

使用道具 举报

发表于 2012-12-12 08:06:54 来自手机 | 显示全部楼层
感谢的热心帮助
回复

使用道具 举报

发表于 2012-12-12 08:07:31 来自手机 | 显示全部楼层
感谢的xss1热心帮助
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-3 13:34 , Processed in 0.191841 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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