明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 425|回复: 11

大师求助,为何直线没有在标注下,而是在标注线上?

[复制链接]
发表于 2023-11-12 00:11 | 显示全部楼层 |阅读模式



  1. (defun c:bzl(/   ss      ssh     ssv     i        ent    rate
  2.         pt      dim     n        dimstyle        ssdimstyle
  3.         ssdimstyle      hz0     hzqj   hz      hb      pt2x
  4.         pt1x    pt1y    pt2y    pt1     pt2
  5.        )
  6.   (setvar "cmdecho" 0)
  7.   (princ "\n选择标注集合")
  8.   (setq ss (ssget '((0 . "DIMENSION"))))
  9.   (setq ssh (ssadd))
  10.   (setq ssv (ssadd))
  11.   (setq i 0)
  12.   (repeat (sslength ss)
  13.         
  14.          
  15.     (setq ent (ssname ss i))
  16.     (if  (= 0 (cdr (assoc 50 (entget ent))));cdr对点对列表操作掐头,cadr有问题
  17.       (setq ssh (ssadd ent ssh))
  18.       (setq ssv (ssadd ent ssv))
  19.     )
  20.     (setq i (1+ i))
  21.     (princ (sslength ssh))
  22.     (princ "\n")
  23.     (princ (sslength ssv))
  24.     (prin1)
  25.   );end repeat;选择集分开为横竖
  26.   
  27.   (setq i 0)
  28.   (setq rate 0.2);0.2为和有问题?

  29.   (repeat (sslength ssh)
  30.     (setq ent (ssname ssh i))
  31.     (setq pt (cdr (assoc 10 (entget ent))))
  32.     (setq dim (cdr (assoc 42 (entget ent))))
  33.     (setq n (1+ (fix (/ (log dim) (log 10)))))
  34.     (setq dimstyle (cdr (assoc 3 (entget ent))))
  35.     (setq ssdimstyle (tblobjname "DIMSTYLE" dimstyle))
  36.           ;标注样式名反选标注样式
  37.     (setq hz0 (cdr (assoc 140 (entget ssdimstyle)))) ;标注样式文字高度


  38.     (setq hzqj (cdr (assoc 40 (entget ssdimstyle))))
  39.           ;全局比例为1返回空值
  40.     (if  (= nil hzqj)
  41.       (setq hzqj 1)
  42.     )

  43.     (setq hz (* hzqj hz0))
  44.     (setq hb (* hz n))
  45.     (setq pt2x (- (car pt) (abs (* 0.5 (- hb dim)))))
  46.    
  47.     (setq pt1x (- pt2x hb))
  48.     (setq gaodu (* hz rate))
  49.     (setq pt1y (- (cadr pt) (* hz rate)))
  50.     (setq pt2y pt1y)
  51.     (setq pt1 (list pt1x pt1y (caddr pt) ))
  52.     (setq pt2 (list pt2x pt2y (caddr pt) ))
  53.     ;(command "circle" pt1 6)
  54.     (command "line" pt1 pt2 "")
  55.     (setq i (1+ i))
  56.   );end repeat

  57.   (prin1)
  58. )











发表于 2024-1-5 20:24 | 显示全部楼层
本帖最后由 飞雪神光 于 2024-1-5 20:44 编辑

  1. (defun c:ddr (/ bili crpt en get-dxf huajuxing l lm-entmake-layer lm-entmake-pline lm-getmtextbox1 obj pts ss ss-enlst tc tylx zg)
  2.   (defun get-dxf(en n)
  3.     (if (not (listp en)) (setq en (entget en)))
  4.     (cdr (assoc n en))
  5.   )
  6.   (defun ss-enlst (ss / enlst)
  7.     (cond
  8.       ((= (type ss) 'PICKSET)
  9.         (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex SS)))
  10.       )
  11.       ((= (type ss) 'LIST)
  12.         (setq enlst (ssadd))
  13.         (last (mapcar '(lambda (x) (ssadd x enlst)) ss))
  14.       )
  15.     )
  16.   )
  17.   (defun lm-getmtextbox1 (obj offh offs / MXV B ENX H J L M N O P R W)
  18.     (Defun mxv (m v)
  19.       (mapcar '(lambda (r) (apply '+ (mapcar '* r v))) m)
  20.     )
  21.     (setq enx (entget obj))
  22.     (if (null off)
  23.       (setq off 0.0)
  24.     )
  25.     (if
  26.       (setq l
  27.         (cond
  28.           ((= "TEXT" (cdr (assoc 0 enx)))
  29.             (setq b (cdr (assoc 10 enx))
  30.               r (cdr (assoc 50 enx))
  31.               l (textbox enx)
  32.             )
  33.             (list
  34.               (list (- (caar l) offh) (- (cadar l) offs))
  35.               (list (+ (caadr l) offh) (- (cadar l) offs))
  36.               (list (+ (caadr l) offh) (+ (cadadr l) offs))
  37.               (list (- (caar l) offh) (+ (cadadr l) offs))
  38.             )
  39.           )
  40.           ((= "MTEXT" (cdr (assoc 0 enx)))
  41.             (setq n (cdr (assoc 210 enx))
  42.               b (trans (cdr (assoc 10 enx)) 0 n)
  43.               r (angle '(0.0 0.0 0.0) (trans (cdr (assoc 11 enx)) 0 n))
  44.               w (cdr (assoc 42 enx))
  45.               h (cdr (assoc 43 enx))
  46.               j (cdr (assoc 71 enx))
  47.               o (list
  48.                   (cond
  49.                     ((member j '(2 5 8)) (/ w -2.0))
  50.                     ((member j '(3 6 9)) (- w))
  51.                     (0.0)
  52.                   )
  53.                   (cond
  54.                     ((member j '(1 2 3)) (- h))
  55.                     ((member j '(4 5 6)) (/ h -2.0))
  56.                     (0.0)
  57.                   )
  58.                 )
  59.             )
  60.             (list
  61.               (list (- (car o) offh) (- (cadr o) offs))
  62.               (list (+ (car o) w offh) (- (cadr o) offs))
  63.               (list (+ (car o) w offh) (+ (cadr o) h offs))
  64.               (list (- (car o) offh) (+ (cadr o) h offs))
  65.             )
  66.           )
  67.         )
  68.       )
  69.       ((lambda (m)
  70.          (mapcar '(lambda (p) (mapcar '+ (mxv m p) b)) l)
  71.        )
  72.         (list
  73.           (list (cos r) (sin (- r)) 0.0)
  74.           (list (sin r) (cos r) 0.0)
  75.           '(0.0 0.0 1.0)
  76.         )
  77.       )
  78.     )
  79.   )
  80.   (defun lm-entmake-pline (pldata / a s1 ptlst bihe co tc h)
  81.     (mapcar'set '(ptlst bihe co tc) pldata)
  82.     (or co (setq co 256))
  83.     (or tc (setq tc (getvar "clayer")))
  84.     (entmake (append (list
  85.                        '(0 . "LWPOLYLINE")
  86.                        '(100 . "AcDbEntity")
  87.                        '(100 . "AcDbPolyline")
  88.                        (cons 62 co)
  89.                        (cons 8 tc)
  90.                        (cons 90 (length ptlst))
  91.                        (cons 70 (if bihe 1 0))
  92.                        (cons 38 (if (setq h(nth 2 (car ptlst))) h 0))
  93.                      )
  94.                (mapcar '(lambda (a) (cons 10 a)) ptlst))
  95.     )
  96.     (entlast)
  97.   )
  98.   (defun lm-entmake-layer(datalst)
  99.     (mapcar'set '(tc co) datalst)
  100.     (or co (setq co 256))
  101.     (or tc (setq tc (getvar "clayer")))
  102.     (entmake (list '(0 . "LAYER")'(100 . "AcDbSymbolTableRecord")'(100 . "AcDbLayerTableRecord")(cons 2 tc)(cons 62 co)'(70 . 0)'(6 . "CONTINUOUS")))
  103.   )
  104.   (princ "\n选择标注集合")
  105.   (setvar "cmdecho" 0)
  106.   (if(null(tblsearch "layer" "DGWT-REV"))
  107.     (lm-entmake-layer (list "DGWT-REV" 4))
  108.   )
  109.   (setq ss (ssget '((0 . "DIMENSION"))))
  110.   (foreach bzty (ss-enlst ss)
  111.     (setq obj (vlax-ename->vla-object bzty))
  112.     (setq en (get-dxf (tblsearch "block" (get-dxf bzty 2)) -2));获得标注的匿名图元块的文字图元名
  113.     (while (setq en(entnext en))  ;一直循环找到该匿名块中成员是文字为止
  114.       (setq tylx (get-dxf en 0))
  115.       (if (wcmatch tylx "*TEXT")
  116.         (progn
  117.           (setq zg(get-dxf en 40))
  118.           (setq pts (lm-getmtextbox1 en (* zg 0.7)  (* zg 0.7)))
  119.           (lm-entmake-pline (list pts t nil nil))
  120.           (setq L (*  0.3 zg))
  121.           (setq huajuxing (entlast))
  122.           (command "revcloud" "S" "N" "a" L L "o" huajuxing "")
  123.           (vla-put-Layer (vlax-ename->vla-object (entlast)) "DGWT-REV")
  124.         )
  125.       )
  126.     )
  127.   )
  128.   (princ)
  129. )

评分

参与人数 1明经币 +1 收起 理由
ferious + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2023-11-12 09:36 | 显示全部楼层
  1. (defun c:bzl (/ bili crpt en get-dxf lm-getmtextbox1 obj pts ss ss-enlst tc tylx zg)
  2.         (defun get-dxf(en n)
  3.                 (if (not (listp en)) (setq en (entget en)))
  4.                 (cdr (assoc n en))
  5.         )
  6.         (defun ss-enlst (ss / enlst)
  7.                 (cond
  8.                         ((= (type ss) 'PICKSET)
  9.                                 (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex SS)))
  10.                         )
  11.                         ((= (type ss) 'LIST)
  12.                                 (setq enlst (ssadd))
  13.                                 (last (mapcar '(lambda (x) (ssadd x enlst)) ss))
  14.                         )
  15.                 )
  16.         )
  17.         (defun lm-getmtextbox1 (obj offh offs / MXV B ENX H J L M N O P R W)
  18.                 (Defun mxv (m v)
  19.                         (mapcar '(lambda (r) (apply '+ (mapcar '* r v))) m)
  20.                 )
  21.                 (setq enx (entget obj))
  22.                 (if (null off)
  23.                         (setq off 0.0)
  24.                 )
  25.                 (if
  26.                         (setq l
  27.                                 (cond
  28.                                         ((= "TEXT" (cdr (assoc 0 enx)))
  29.                                                 (setq b (cdr (assoc 10 enx))
  30.                                                         r (cdr (assoc 50 enx))
  31.                                                         l (textbox enx)
  32.                                                 )
  33.                                                 (list
  34.                                                         (list (- (caar l) offh) (- (cadar l) offs))
  35.                                                         (list (+ (caadr l) offh) (- (cadar l) offs))
  36.                                                         (list (+ (caadr l) offh) (+ (cadadr l) offs))
  37.                                                         (list (- (caar l) offh) (+ (cadadr l) offs))
  38.                                                 )
  39.                                         )
  40.                                         ((= "MTEXT" (cdr (assoc 0 enx)))
  41.                                                 (setq n (cdr (assoc 210 enx))
  42.                                                         b (trans (cdr (assoc 10 enx)) 0 n)
  43.                                                         r (angle '(0.0 0.0 0.0) (trans (cdr (assoc 11 enx)) 0 n))
  44.                                                         w (cdr (assoc 42 enx))
  45.                                                         h (cdr (assoc 43 enx))
  46.                                                         j (cdr (assoc 71 enx))
  47.                                                         o (list
  48.                                                                         (cond
  49.                                                                                 ((member j '(2 5 8)) (/ w -2.0))
  50.                                                                                 ((member j '(3 6 9)) (- w))
  51.                                                                                 (0.0)
  52.                                                                         )
  53.                                                                         (cond
  54.                                                                                 ((member j '(1 2 3)) (- h))
  55.                                                                                 ((member j '(4 5 6)) (/ h -2.0))
  56.                                                                                 (0.0)
  57.                                                                         )
  58.                                                                 )
  59.                                                 )
  60.                                                 (list
  61.                                                         (list (- (car o) offh) (- (cadr o) offs))
  62.                                                         (list (+ (car o) w offh) (- (cadr o) offs))
  63.                                                         (list (+ (car o) w offh) (+ (cadr o) h offs))
  64.                                                         (list (- (car o) offh) (+ (cadr o) h offs))
  65.                                                 )
  66.                                         )
  67.                                 )
  68.                         )
  69.                         ((lambda (m)
  70.                                  (mapcar '(lambda (p) (mapcar '+ (mxv m p) b)) l)
  71.                          )
  72.                                 (list
  73.                                         (list (cos r) (sin (- r)) 0.0)
  74.                                         (list (sin r) (cos r) 0.0)
  75.                                         '(0.0 0.0 1.0)
  76.                                 )
  77.                         )
  78.                 )
  79.         )
  80.   (princ "\n选择标注集合")
  81.   (setq ss (ssget '((0 . "DIMENSION"))))
  82.   (foreach bzty (ss-enlst ss)
  83.                 (setq obj (vlax-ename->vla-object bzty))
  84.                 (setq en (get-dxf (tblsearch "block" (get-dxf bzty 2)) -2));获得标注的图元名
  85.                 (setq crpt(get-dxf bzty 11))
  86.                 (setq tc(get-dxf bzty 8))
  87.                 (setq bili(vla-get-ScaleFactor obj))
  88.                 ;(if(= (vla-get-ObjectName obj) "AcDbRotatedDimension")
  89.                 (while (setq en(entnext en))
  90.                         (setq tylx (get-dxf en 0))
  91.                         (if (wcmatch tylx "*TEXT")
  92.                                 (progn
  93.                                         (setq zg(get-dxf en 40))
  94.                                         (setq pts (lm-getmtextbox1 en 0 (* zg 0.15)))
  95.                                         (entmake (list '(0 . "line")(cons 62 1)(cons 8 "0")(cons 10 (car pts))(cons 11 (cadr pts))))
  96.                                 )
  97.                         )
  98.                 )
  99.                 ;)
  100.         )
  101.         (princ)
  102. )

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-1-5 19:47 | 显示全部楼层
飞雪前辈,请问这个标注外框的函数,返回的是?现在想要再标注文字周边划方框,帮忙指导一下

  1. (defun c:ddr (/ bili crpt en get-dxf lm-getmtextbox1 obj pts ss ss-enlst tc tylx zg  huajuxing  L)
  2.         (defun get-dxf(en n)
  3.                 (if (not (listp en)) (setq en (entget en)))
  4.                 (cdr (assoc n en))
  5.         )
  6.         (defun ss-enlst (ss / enlst)
  7.                 (cond
  8.                         ((= (type ss) 'PICKSET)
  9.                                 (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex SS)))
  10.                         )
  11.                         ((= (type ss) 'LIST)
  12.                                 (setq enlst (ssadd))
  13.                                 (last (mapcar '(lambda (x) (ssadd x enlst)) ss))
  14.                         )
  15.                 )
  16.         )
  17.         (defun lm-getmtextbox1 (obj offh offs / MXV B ENX H J L M N O P R W)
  18.                 (Defun mxv (m v)
  19.                         (mapcar '(lambda (r) (apply '+ (mapcar '* r v))) m)
  20.                 )
  21.                 (setq enx (entget obj))
  22.                 (if (null off)
  23.                         (setq off 0.0)
  24.                 )
  25.                 (if
  26.                         (setq l
  27.                                 (cond
  28.                                         ((= "TEXT" (cdr (assoc 0 enx)))
  29.                                                 (setq b (cdr (assoc 10 enx))
  30.                                                         r (cdr (assoc 50 enx))
  31.                                                         l (textbox enx)
  32.                                                 )
  33.                                                 (list
  34.                                                         (list (- (caar l) offh) (- (cadar l) offs))
  35.                                                         (list (+ (caadr l) offh) (- (cadar l) offs))
  36.                                                         (list (+ (caadr l) offh) (+ (cadadr l) offs))
  37.                                                         (list (- (caar l) offh) (+ (cadadr l) offs))
  38.                                                 )
  39.                                         )
  40.                                         ((= "MTEXT" (cdr (assoc 0 enx)))
  41.                                                 (setq n (cdr (assoc 210 enx))
  42.                                                         b (trans (cdr (assoc 10 enx)) 0 n)
  43.                                                         r (angle '(0.0 0.0 0.0) (trans (cdr (assoc 11 enx)) 0 n))
  44.                                                         w (cdr (assoc 42 enx))
  45.                                                         h (cdr (assoc 43 enx))
  46.                                                         j (cdr (assoc 71 enx))
  47.                                                         o (list
  48.                                                                         (cond
  49.                                                                                 ((member j '(2 5 8)) (/ w -2.0))
  50.                                                                                 ((member j '(3 6 9)) (- w))
  51.                                                                                 (0.0)
  52.                                                                         )
  53.                                                                         (cond
  54.                                                                                 ((member j '(1 2 3)) (- h))
  55.                                                                                 ((member j '(4 5 6)) (/ h -2.0))
  56.                                                                                 (0.0)
  57.                                                                         )
  58.                                                                 )
  59.                                                 )
  60.                                                 (list
  61.                                                         (list (- (car o) offh) (- (cadr o) offs))
  62.                                                         (list (+ (car o) w offh) (- (cadr o) offs))
  63.                                                         (list (+ (car o) w offh) (+ (cadr o) h offs))
  64.                                                         (list (- (car o) offh) (+ (cadr o) h offs))
  65.                                                 )
  66.                                         )
  67.                                 )
  68.                         )
  69.                         ((lambda (m)
  70.                                  (mapcar '(lambda (p) (mapcar '+ (mxv m p) b)) l)
  71.                          )
  72.                                 (list
  73.                                         (list (cos r) (sin (- r)) 0.0)
  74.                                         (list (sin r) (cos r) 0.0)
  75.                                         '(0.0 0.0 1.0)
  76.                                 )
  77.                         )
  78.                 )
  79.         )
  80.   (princ "\n选择标注集合")
  81.   (setq ss (ssget '((0 . "DIMENSION"))))
  82. (setq oldlayer (getvar "clayer"))
  83.    (command "layer"   "m"   "DGWT-REV"     "c" "4" ""    ""    "")
  84.   ;(setq bzty (nth 0 (ss-enlst ss)))
  85.   (foreach bzty (ss-enlst ss)
  86.                 (setq obj (vlax-ename->vla-object bzty))
  87.                 (setq en (get-dxf (tblsearch "block" (get-dxf bzty 2)) -2));获得标注的匿名图元块的文字图元名
  88.                 (setq crpt(get-dxf bzty 11))  ;标注文字的中点(在 OCS 中)
  89.                 (setq tc(get-dxf bzty 8))
  90.                 (setq bili(vla-get-ScaleFactor obj))
  91.                 ;(if(= (vla-get-ObjectName obj) "AcDbRotatedDimension")

  92.    
  93.                 (while (setq en(entnext en))  ;一直循环找到该匿名块中成员是文字为止
  94.                         (setq tylx (get-dxf en 0))

  95.       
  96.                         (if (wcmatch tylx "*TEXT")
  97.                                 (progn
  98.                                         (setq zg(get-dxf en 40))
  99.                                         (setq pts (lm-getmtextbox1 en (* zg 0.5)  (* zg 0.5)))

  100.                                        ;(entmake (list '(0 . "line")(cons 62 240)(cons 10 (car pts))(cons 11 (cadr pts))))
  101.                     (command "pline"   (nth 0 pts)   (nth 1 pts)   (nth 2 pts)   (nth 3 pts)  "c"    ""   ""  "" )
  102.           (setq huajuxing   (entlast) )
  103.                     (setq L (*  0.3 zg))
  104.           (command "offset"   (* 0.2 zg)     (entlast)   (polar (car pts)   (* (/ 270.0 180.0 ) 3.1415)    (* 0.2 zg)    )   "")
  105.    ;;;  偏移方向根据生成矩形的角点,pt1,pt2定,本程序pt2为右上角点,pt1为左下角点,所以为pt2外围方向
  106.                        (command "revcloud"  "S" "N" "a" L L "o" (entlast) "")
  107.                                          (COMMAND "CHANGE"  (entlast)  "" "PROPERTIES" "la" "DGWT-REV"      "")
  108.                                           (command "_erase"  huajuxing "" )

  109.                                 )
  110.         
  111.                         )

  112.       
  113.                 )
  114.                
  115.         )
  116.         (princ)
  117. )


本帖子中包含更多资源

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

x
发表于 2023-11-12 09:09 | 显示全部楼层
是在下边呢

本帖子中包含更多资源

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

x
 楼主| 发表于 2023-11-12 10:17 | 显示全部楼层
我的是这样的效果,不知为何y方向未有赋值还是?
能否指出我的错误?看了好久不知哪里错了



本帖子中包含更多资源

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

x
 楼主| 发表于 2024-1-5 22:21 | 显示全部楼层


飞雪前辈,这里看着比较蒙,能否指点一下返回值是什么?

本帖子中包含更多资源

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

x
发表于 2024-1-5 22:38 | 显示全部楼层
(set 'co 1) = (setq co 1)注意set的变量是有个 ' 的
单行多行返回值是一样的 标注中的文字就是多行的
 楼主| 发表于 2024-1-5 22:40 | 显示全部楼层
飞雪神光 发表于 2024-1-5 22:38
(set 'co 1) = (setq co 1)注意set的变量是有个 ' 的
单行多行返回值是一样的 标注中的文字就是多行的

是的,我i昂知道是返回四个点的坐标吗?为何多行还要再次处理?
发表于 2024-1-5 22:58 | 显示全部楼层
并没有再次处理 就是求得多行文字的包围框
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 10:49 , Processed in 0.321495 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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