明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 929|回复: 0

[提问] 请教关于打散和合并属性块的问题

[复制链接]
发表于 2014-9-29 17:05:11 | 显示全部楼层 |阅读模式
本帖最后由 wmz 于 2014-9-29 17:12 编辑

;;;;;南方CASS的地形点是用的属性块,他有打散和合并功能,不知是如何实现的
;;;;;我现在用了一种办法但感觉实在是太笨了!请教哪位大侠能指教一二!
;;;;;以下是我的代码:

  (vl-load-com)
;;;打散
(defun c:DSKY (/ bl blc blxs ZG s n s0 s1 d1 m k jd b)
  (setq blc (getvar "userr1") blxs (/ blc 1000.0))
  (setq  bl (* blxs 0.4) ZG (* 2.0 blxs))
  (setq s (ssget))
  (setq n (sslength s) m 0)
  (repeat n
    (setq s0 (ssname s m) m (+ m 1) k 0)
    (setq s1 (entget s0 (list "SOUTH")))
    (setq d1 (cdr(assoc 10 s1)))
    (setq JD (cdr(assoc 50 s1)))
    (setq  b (cdadr (cadr (assoc -3 s1))))
    (setq  b (vl-princ-to-string b))
    (setq  b (vl-string-translate "" "" B))
    (cond ((= b "202101")(setq height (last d1))
           (command "_.erase" s0 "")
           (MKINSERT d1 bl bl bl JD "202101")
           (MKTEXTA d1 ZG JD (rtos height 2 2) "202111")
          )
          ((= b "186400")(setq H (rtos (last d1) 2 1))
           (command "_.erase" s0 "")
           (setq k (vl-string-search "." h))
           (setq h1 (substr h 1 k) h2 (substr h (+ k 2) 1))
           (MKINSERT d1 bl bl bl JD "186400")
           (MKTEXTB d1 ZG JD h1 "186411")
           (MKTEXTC d1 ZG JD h2 "186412")
          )
    )
  )
)
;;;合并
(defun c:HBKY (/ bl blc blxs ZG lay s n s0 s1 d1 m k jd b)
  (command "layer" "m" "GCD" "c" "1" "" "L" "CONTINUOUS" ""  "")
  (setq blc (getvar "userr1") blxs (/ blc 1000.0))
  (setq  bl (* blxs 0.4) ZG (* 2.0 blxs))
  (setq s (ssget))
  (setq n (sslength s) m 0)(print "n=")(princ n)(princ)
  (repeat n
    (setq  s0 (ssname s m) m (+ m 1) k 0)
    (setq  s1 (entget s0 (list "SOUTH")))
    (setq lay (cdr(assoc 8 s1)))
    (setq   e (cdr (assoc 0 s1)))
    (if (and(= e "TEXT")(= lay "GCD"))(command "erase" s0 ""))
    (if (and(= e "INSERT")(= lay "GCD"))(progn
       (setq d1 (cdr(assoc 10 s1)))
       (setq JD (cdr(assoc 50 s1)))
       (setq  b (cdadr (cadr (assoc -3 s1))))
       (setq  b (vl-princ-to-string b))
       (setq  b (vl-string-translate "" "" B))
       (cond ((= b "202101")(setq height (rtos (last d1) 2 2))
              (command "_.erase" s0 "")
              (MINSERTAA d1 (/ bl 2.0) height)
             )
             ((= b "186400")(setq H (rtos (last d1) 2 1))
              (command "_.erase" s0 "")
              (setq k (vl-string-search "." h))
              (setq h1 (substr h 1 k) h2 (substr h (+ k 2) 1))
              (MINSERTSS d1 (/ bl 2.0) JD h1 h2)
             )
       )
     ))
  )
)
;;插入块打散后用
(defun MKINSERT (PT SX SY SSZ ZJ DATA)
  (entmake (list '(0 . "INSERT")
                 '(100 . "AcDbBlockReference")
                 (cons 2 "GC200")
                 (cons 8 "GCD")
                 (cons 10 PT)
                 (cons 41 SX)
                 (cons 42 SY)
                 (cons 43 SSZ)
                 (cons 50 ZJ)
                 (list -3 (list "SOUTH" (cons 1000 DATA)))
            )
  )
)
;;;写文字岸上点打散后用
(defun MKTEXTA (PT HEI ANG STR DATA / PTX TOBJ)
    (setq pty (polar pt ANG 0.5))
    (entmake (list '(0 . "TEXT")
                   (cons 7 "HZ")
                   (cons 8 "GCD")            
                   (cons 10 PT)
                   (cons 40 HEI) ;;字高
                   (cons 41 0.8)            
                   (cons 50 ANG)
                   (cons 1 STR)
                   (cons 72 0)  ;;左对齐
                   (cons 73 2)
                   (cons 11 pty)
                   (list -3 (list "SOUTH" (cons 1000 DATA)))
              )
    )
)
;;;写文字水下点左打散后用
(defun MKTEXTB (PT HEI ANG STR DATA / PTz TOBJ)
    (setq ptz (polar pt ANG -0.3))
    (entmake (list '(0 . "TEXT")
                   (cons 7 "HZ")
                   (cons 8 "GCD")            
                   (cons 10 PT)
                   (cons 40 HEI) ;;字高
                   (cons 41 0.8)            
                   (cons 50 ANG)
                   (cons 1 STR)
                   (cons 11 ptz)
                   (cons 72 2)  ;;右对齐
                   (cons 73 0)
                   (list -3 (list "SOUTH" (cons 1000 DATA)))
              )
    )
)
;;;写文字水下点右打散后用
(defun MKTEXTC (PT HEI ANG STR DATA / PTy TOBJ)
    (setq pty (polar pt ANG 0.2))
    (entmake (list '(0 . "TEXT")
                   (cons 7 "HZ")
                   (cons 8 "GCD")            
                   (cons 10 PTy)
                   (cons 40 HEI) ;;字高
                   (cons 41 0.8)            
                   (cons 50 ANG)
                   (cons 1 STR)
                   (cons 11 pty)
                   (cons 72 0)  ;;左对齐
                   (cons 73 0)
                   (list -3 (list "SOUTH" (cons 1000 DATA)))
              )
    )
)

;;;插入块(岸上点)合并用
(defun MINSERTAA (inspt scale height / pt)
  (setq pt (polar inspt 0 (* 1.2 scale)))
  (entmake (list
             '(0 . "INSERT")
             '(100 . "AcDbEntity")
             '(100 . "AcDbBlockReference")
             '(66 . 1);;;属性跟随标志,1跟随,0不跟随
             (cons 2 "GC200")
             (cons 10 inspt)
             (cons 41 scale)
             (cons 42 scale)
             (cons 43 scale)
             '(-3 ("SOUTH" (1000 . "202101")))
           )
  )
  ;;;插入属性
    (entmake (list
            '(0 . "ATTRIB")
            '(100 . "AcDbEntity")
            '(100 . "AcDbText")
            (cons 10 pt)
            (cons 40 (* 10.0 scale))
            (cons 50 0)
            (cons 41 0.8)
            (cons 51 0)
            (cons 1 height)
            (cons 7 "HZ")
            (cons 72 0)
            (cons 11 pt)
            '(100 . "AcDbAttribute")
            (cons 2 "height")
            (cons 70 0)
            (cons 74 2)
           )
    )
           ;;;结束标志
          (entmake '((0 . "SEQEND")))
           (princ)
  )
;;;插入块(水下点)合并用
(defun MINSERTSS (inspt scale JD integer decimal / pt ptz pty)
  (setq pt (polar inspt 0 (* 1.2 scale)))
  (setq ptz (polar pt jd -0.4))
  (setq pty (polar pt jd 0.2))
  (entmake (list
             '(0 . "INSERT")
             '(100 . "AcDbEntity")
             '(100 . "AcDbBlockReference")
             '(66 . 1);;;属性跟随标志,1跟随,0不跟随
             (cons 2 "GC200")
             (cons 10 inspt)
             (cons 41 scale)
             (cons 42 scale)
             (cons 43 scale)
             (cons 50 JD)
             '(-3 ("SOUTH" (1000 . "186400")))
           )
  )
  ;;;插入属性
    (entmake (list
            '(0 . "ATTRIB")
            '(100 . "AcDbEntity")
            '(100 . "AcDbText")
            (cons 10 pt)
            (cons 40 (* 10.0 scale))
            (cons 50 JD)
            (cons 41 0.8)
            (cons 51 0)
            (cons 1 integer)
            (cons 7 "HZ")
            (cons 72 2)  ;;右对齐
            (cons 11 ptz)
            '(100 . "AcDbAttribute")
            (cons 2 "integer")
            (cons 70 0)
  1. ;;;;;南方CASS的地形点是用的属性块,他有打散和合并功能,不知是如何实现的
  2. ;;;;;我现在用了一种办法但感觉实在是太笨了!请教哪位大侠能指教一二!
  3. ;;;;;以下是我的代码:

  4.   (vl-load-com)
  5. ;;;打散
  6. (defun c:DSKY (/ bl blc blxs ZG s n s0 s1 d1 m k jd b)
  7.   (setq blc (getvar "userr1") blxs (/ blc 1000.0))
  8.   (setq  bl (* blxs 0.4) ZG (* 2.0 blxs))
  9.   (setq s (ssget))
  10.   (setq n (sslength s) m 0)
  11.   (repeat n
  12.     (setq s0 (ssname s m) m (+ m 1) k 0)
  13.     (setq s1 (entget s0 (list "SOUTH")))
  14.     (setq d1 (cdr(assoc 10 s1)))
  15.     (setq JD (cdr(assoc 50 s1)))
  16.     (setq  b (cdadr (cadr (assoc -3 s1))))
  17.     (setq  b (vl-princ-to-string b))
  18.     (setq  b (vl-string-translate "" "" B))
  19.     (cond ((= b "202101")(setq height (last d1))
  20.      (command "_.erase" s0 "")
  21.      (MKINSERT d1 bl bl bl JD "202101")
  22.      (MKTEXTA d1 ZG JD (rtos height 2 2) "202111")
  23.     )
  24.     ((= b "186400")(setq H (rtos (last d1) 2 1))
  25.      (command "_.erase" s0 "")
  26.      (setq k (vl-string-search "." h))
  27.      (setq h1 (substr h 1 k) h2 (substr h (+ k 2) 1))
  28.      (MKINSERT d1 bl bl bl JD "186400")
  29.      (MKTEXTB d1 ZG JD h1 "186411")
  30.      (MKTEXTC d1 ZG JD h2 "186412")
  31.     )
  32.     )
  33.   )
  34. )
  35. ;;;合并
  36. (defun c:HBKY (/ bl blc blxs ZG lay s n s0 s1 d1 m k jd b)
  37.   (command "layer" "m" "GCD" "c" "1" "" "L" "CONTINUOUS" ""  "")
  38.   (setq blc (getvar "userr1") blxs (/ blc 1000.0))
  39.   (setq  bl (* blxs 0.4) ZG (* 2.0 blxs))
  40.   (setq s (ssget))
  41.   (setq n (sslength s) m 0)(print "n=")(princ n)(princ)
  42.   (repeat n
  43.     (setq  s0 (ssname s m) m (+ m 1) k 0)
  44.     (setq  s1 (entget s0 (list "SOUTH")))
  45.     (setq lay (cdr(assoc 8 s1)))
  46.     (setq   e (cdr (assoc 0 s1)))
  47.     (if (and(= e "TEXT")(= lay "GCD"))(command "erase" s0 ""))
  48.     (if (and(= e "INSERT")(= lay "GCD"))(progn
  49.        (setq d1 (cdr(assoc 10 s1)))
  50.        (setq JD (cdr(assoc 50 s1)))
  51.        (setq  b (cdadr (cadr (assoc -3 s1))))
  52.        (setq  b (vl-princ-to-string b))
  53.        (setq  b (vl-string-translate "" "" B))
  54.        (cond ((= b "202101")(setq height (rtos (last d1) 2 2))
  55.               (command "_.erase" s0 "")
  56.         (MINSERTAA d1 (/ bl 2.0) height)
  57.        )
  58.        ((= b "186400")(setq H (rtos (last d1) 2 1))
  59.         (command "_.erase" s0 "")
  60.         (setq k (vl-string-search "." h))
  61.         (setq h1 (substr h 1 k) h2 (substr h (+ k 2) 1))
  62.         (MINSERTSS d1 (/ bl 2.0) JD h1 h2)
  63.        )
  64.        )
  65.      ))
  66.   )
  67. )
  68. ;;插入块打散后用
  69. (defun MKINSERT (PT SX SY SSZ ZJ DATA)
  70.   (entmake (list '(0 . "INSERT")
  71.                  '(100 . "AcDbBlockReference")
  72.                  (cons 2 "GC200")
  73.                  (cons 8 "GCD")
  74.                  (cons 10 PT)
  75.                  (cons 41 SX)
  76.                  (cons 42 SY)
  77.                  (cons 43 SSZ)
  78.                  (cons 50 ZJ)
  79.                  (list -3 (list "SOUTH" (cons 1000 DATA)))
  80.             )
  81.   )
  82. )
  83. ;;;写文字岸上点打散后用
  84. (defun MKTEXTA (PT HEI ANG STR DATA / PTX TOBJ)
  85.     (setq pty (polar pt ANG 0.5))
  86.     (entmake (list '(0 . "TEXT")
  87.                    (cons 7 "HZ")
  88.                    (cons 8 "GCD")      
  89.                    (cons 10 PT)
  90.                    (cons 40 HEI) ;;字高
  91.                    (cons 41 0.8)      
  92.                    (cons 50 ANG)
  93.                    (cons 1 STR)
  94.                    (cons 72 0)  ;;左对齐
  95.                    (cons 73 2)
  96.                    (cons 11 pty)
  97.                   (list -3 (list "SOUTH" (cons 1000 DATA)))
  98.               )
  99.     )
  100. )
  101. ;;;写文字水下点左打散后用
  102. (defun MKTEXTB (PT HEI ANG STR DATA / PTz TOBJ)
  103.     (setq ptz (polar pt ANG -0.3))
  104.     (entmake (list '(0 . "TEXT")
  105.                    (cons 7 "HZ")
  106.                    (cons 8 "GCD")      
  107.                    (cons 10 PT)
  108.                    (cons 40 HEI) ;;字高
  109.                    (cons 41 0.8)      
  110.                    (cons 50 ANG)
  111.                    (cons 1 STR)
  112.                    (cons 11 ptz)
  113.                    (cons 72 2)  ;;右对齐
  114.                    (cons 73 0)
  115.                    (list -3 (list "SOUTH" (cons 1000 DATA)))
  116.               )
  117.     )
  118. )
  119. ;;;写文字水下点右打散后用
  120. (defun MKTEXTC (PT HEI ANG STR DATA / PTy TOBJ)
  121.     (setq pty (polar pt ANG 0.2))
  122.     (entmake (list '(0 . "TEXT")
  123.                    (cons 7 "HZ")
  124.                    (cons 8 "GCD")      
  125.                    (cons 10 PTy)
  126.                    (cons 40 HEI) ;;字高
  127.                    (cons 41 0.8)      
  128.                    (cons 50 ANG)
  129.                    (cons 1 STR)
  130.                   (cons 11 pty)
  131.                   (cons 72 0)  ;;左对齐
  132.                   (cons 73 0)
  133.                  (list -3 (list "SOUTH" (cons 1000 DATA)))
  134.               )
  135.     )
  136. )

  137. ;;;插入块(岸上点)合并用
  138. (defun MINSERTAA (inspt scale height / pt)
  139.   (setq pt (polar inspt 0 (* 1.2 scale)))
  140.   (entmake (list
  141.              '(0 . "INSERT")
  142.              '(100 . "AcDbEntity")
  143.              '(100 . "AcDbBlockReference")
  144.              '(66 . 1);;;属性跟随标志,1跟随,0不跟随
  145.              (cons 2 "GC200")
  146.              (cons 10 inspt)
  147.              (cons 41 scale)
  148.              (cons 42 scale)
  149.              (cons 43 scale)
  150.              '(-3 ("SOUTH" (1000 . "202101")))
  151.            )
  152.   )
  153.   ;;;插入属性
  154.     (entmake (list
  155.             '(0 . "ATTRIB")
  156.             '(100 . "AcDbEntity")
  157.             '(100 . "AcDbText")
  158.            (cons 10 pt)
  159.             (cons 40 (* 10.0 scale))
  160.             (cons 50 0)
  161.             (cons 41 0.8)
  162.             (cons 51 0)
  163.             (cons 1 height)
  164.             (cons 7 "HZ")
  165.             (cons 72 0)
  166.             (cons 11 pt)
  167.             '(100 . "AcDbAttribute")
  168.             (cons 2 "height")
  169.             (cons 70 0)
  170.             (cons 74 2)
  171.            )
  172.     )
  173.            ;;;结束标志
  174.           (entmake '((0 . "SEQEND")))
  175.            (princ)
  176.   )
  177. ;;;插入块(水下点)合并用
  178. (defun MINSERTSS (inspt scale JD integer decimal / pt ptz pty)
  179.   (setq pt (polar inspt 0 (* 1.2 scale)))
  180.   (setq ptz (polar pt jd -0.4))
  181.   (setq pty (polar pt jd 0.2))
  182.   (entmake (list
  183.              '(0 . "INSERT")
  184.              '(100 . "AcDbEntity")
  185.              '(100 . "AcDbBlockReference")
  186.              '(66 . 1);;;属性跟随标志,1跟随,0不跟随
  187.              (cons 2 "GC200")
  188.              (cons 10 inspt)
  189.              (cons 41 scale)
  190.              (cons 42 scale)
  191.              (cons 43 scale)
  192.             (cons 50 JD)
  193.              '(-3 ("SOUTH" (1000 . "186400")))
  194.            )
  195.   )
  196.   ;;;插入属性
  197.     (entmake (list
  198.             '(0 . "ATTRIB")
  199.             '(100 . "AcDbEntity")
  200.             '(100 . "AcDbText")
  201.             (cons 10 pt)
  202.             (cons 40 (* 10.0 scale))
  203.             (cons 50 JD)
  204.             (cons 41 0.8)
  205.             (cons 51 0)
  206.             (cons 1 integer)
  207.             (cons 7 "HZ")
  208.             (cons 72 2)  ;;右对齐
  209.             (cons 11 ptz)
  210.             '(100 . "AcDbAttribute")
  211.             (cons 2 "integer")
  212.             (cons 70 0)
  213.            (cons 73 2)
  214.             (cons 74 1)
  215.            )
  216.     )
  217.     (entmake (list
  218.             '(0 . "ATTRIB")
  219.             '(100 . "AcDbEntity")
  220.             '(100 . "AcDbText")
  221.       (cons 10 pt)
  222.             (cons 40 (* 10.0 scale))
  223.             (cons 50 JD)
  224.             (cons 41 0.8)
  225.             (cons 51 0)
  226.             (cons 1 decimal)
  227.             (cons 7 "HZ")
  228.             (cons 72 0) ;;左对齐
  229.             (cons 11 pty)
  230.             '(100 . "AcDbAttribute")
  231.             (cons 2 "decimal")
  232.             (cons 70 0)
  233.            (cons 73 2)
  234.             (cons 74 1)
  235.            )
  236.     )
  237.            ;;;结束标志
  238.           (entmake '((0 . "SEQEND")))
  239.            (princ)
  240.   )
(cons 73 2)
            (cons 74 1)
           )
    )
    (entmake (list
            '(0 . "ATTRIB")
            '(100 . "AcDbEntity")
            '(100 . "AcDbText")
            (cons 10 pt)
            (cons 40 (* 10.0 scale))
            (cons 50 JD)
            (cons 41 0.8)
            (cons 51 0)
            (cons 1 decimal)
            (cons 7 "HZ")
            (cons 72 0) ;;左对齐
            (cons 11 pty)
            '(100 . "AcDbAttribute")
            (cons 2 "decimal")
            (cons 70 0)
            (cons 73 2)
            (cons 74 1)
           )
    )
           ;;;结束标志
          (entmake '((0 . "SEQEND")))
           (princ)
  )


"觉得好,就打赏"
还没有人打赏,支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 01:37 , Processed in 0.206862 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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