明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 950|回复: 12

[提问] 画完矩形后中心添加文字插件问题求助,谢谢~

[复制链接]
发表于 2024-8-8 10:07:20 | 显示全部楼层 |阅读模式
  1. (defun HRectang        (p str)  
  2.   (command "_.Rectang" p (strcat "@" (vl-string-translate "X" "," str)))  
  3. )

  4. (defun c:ccc (/ lst p str pt_xy i p0 p1 p2 pp s1 ss )
  5.     (setq lst '("1000X1000"))
  6.     (foreach x lst
  7.     (setq p nil)
  8.     (cond ((setq p (getpoint "\n插入点")) (HRectang p x)))
  9.   )
  10.     (while (= 1 (getvar "cmdactive")  ) (command pause)  )
  11.     (command "rotate" (entlast) "" pause) (command pause)
  12.     (defun pt_xy (e / s)
  13.                 (if (setq s
  14.                                         (mapcar 'cdr
  15.                                                 (vl-remove-if-not '(lambda (x) (= (car x) 10))(entget e))
  16.                                         )
  17.                                 )
  18.                         (if (= 1 (length s))(car s)s)
  19.                 )
  20.         )
  21.     (setq i -1)
  22.     (if (setq ss (ssget ":e" (list '(0 . "lwpolyline"))))
  23.     (while (and(setq s1 (ssname ss (setq i (1+ i)))))               
  24.                         (setq pp(pt_xy s1)
  25.                                  p1(car pp)
  26.                                  p2(caddr pp)
  27.                         )
  28.                         (setq p0(mapcar '(lambda(x)(* 0.5 x)) (mapcar '+ p1 p2)))     
  29.   (entmake
  30.     (list (cons 0 "text")
  31.            (cons 1 "12345")
  32.            (cons 7 "standard")  
  33.            (cons 10 p0)              
  34.            (cons 11 p0)              
  35.            (cons 40 180)
  36.     )))))
1.插件目前是生成矩形后再点击,选择矩形基点后旋转,可否改成通过鼠标滑动指向改变矩形生成的方向,类似于动态生成?

2.矩形生成并旋转后需要点击一下矩形才能在其中心生成文字,请问可否取消点击矩形这个步骤,在确定矩形生成后文字随之在其中心生成?
谢谢~
发表于 2024-8-9 20:41:49 | 显示全部楼层
逗亦斗霸 发表于 2024-8-9 20:08
再请教一下飞版,我尝试把(setq ss(ssget))删除,并把后面的俩ss换成ty为什么不能像居中生成文字一样生成 ...

ssget 是选择集 后面代码也是选择集的写法 我觉得你是想象之前那样 单个的绘制
  1. (defun c:cdc (/ ff lst lst1 lst2 p pt_xy str ty)
  2.         (defun pt_xy (e / s)
  3.                 (if (setq s
  4.                                         (mapcar 'cdr
  5.                                                 (vl-remove-if-not '(lambda (x) (= (car x) 10))(entget e))
  6.                                         )
  7.                                 )
  8.                         (if (= 1 (length s))(car s)s)
  9.                 )
  10.         )
  11.         (defun ff(lst)
  12.                 (entmakex (append (list '(0 . "LWPOLYLINE")
  13.                                                                                                 '(100 . "AcDbEntity")
  14.                                                                                                 '(100 . "AcDbPolyline")
  15.                                                                                                 '(62 . 256)
  16.                                                                                                 (cons 90 (length lst))
  17.                                                                                                 (cons 70 0)
  18.                                                                                         )
  19.                                                                 (mapcar '(lambda (pt) (cons 10 pt)) lst)
  20.                                                         )
  21.                 )
  22.         )
  23.         (setq str "1000X1000")
  24.         (setq p (getpoint "\n插入点"))
  25.         (command "_.Rectang" "non" p "non" (strcat "@" (vl-string-translate "X" "," str)))
  26.         (setq ty (entlast))
  27.         (command "rotate" ty "" p)
  28.         (command pause)
  29.         (setq lst(pt_xy ty))
  30.         (setq lst1(list(car lst ) (caddr lst )))
  31.         (setq lst2(list(cadr lst )(cadddr lst )))
  32.         (ff lst1)
  33.         (ff lst2)
  34.         (princ)        
  35. )
发表于 2024-8-8 16:11:01 | 显示全部楼层
逗亦斗霸 发表于 2024-8-8 15:44
感谢飞版回复,我把(command "rotate" ty "" p0) (command pause)改成(command "rotate" ty "" p) (comma ...

72 73是基点对齐模式 不对就删掉
  1. (defun c:ccc (/ p p0 p1 p2 pp pt_xy str ty)
  2.         (defun pt_xy (e / s)
  3.                 (if (setq s
  4.                                         (mapcar 'cdr
  5.                                                 (vl-remove-if-not '(lambda (x) (= (car x) 10))(entget e))
  6.                                         )
  7.                                 )
  8.                         (if (= 1 (length s))(car s)s)
  9.                 )
  10.         )
  11.         (setq str "1000X1000")
  12.         (setq p (getpoint "\n插入点"))
  13.         (command "_.Rectang" "non" p "non" (strcat "@" (vl-string-translate "X" "," str)))
  14.         (setq ty (entlast))
  15.         (command "rotate" ty "" p)
  16.         (command pause)
  17.         (setq
  18.                 pp(pt_xy ty)
  19.                 p1(car pp)
  20.                 p2(caddr pp)
  21.         )
  22.         (setq p0(mapcar '(lambda(x)(* 0.5 x)) (mapcar '+ p1 p2)))
  23.         (entmake
  24.                 (list
  25.                         (cons 0 "text")
  26.                         (cons 1 "12345")
  27.                         (cons 7 "standard")  
  28.                         (cons 10 p0)              
  29.                         (cons 11 p0)              
  30.                         (cons 40 180)
  31.                         '(72 . 1)
  32.                         '(73 . 2)
  33.                 )
  34.         )
  35.         (princ)       
  36. )
 楼主| 发表于 2024-8-9 20:08:27 | 显示全部楼层
飞雪神光 发表于 2024-8-8 16:11
72 73是基点对齐模式 不对就删掉
  1. (defun c:cdc (/ p p0 p1 p2 pp pt_xy str ty I LST LST1 LST2 PT ss)
  2.         (defun pt_xy (e / s)
  3.                 (if (setq s
  4.                                         (mapcar 'cdr
  5.                                                 (vl-remove-if-not '(lambda (x) (= (car x) 10))(entget e))
  6.                                         )
  7.                                 )
  8.                         (if (= 1 (length s))(car s)s)
  9.                 )
  10.         )
  11.         (setq str "1000X1000")
  12.         (setq p (getpoint "\n插入点"))
  13.         (command "_.Rectang" "non" p "non" (strcat "@" (vl-string-translate "X" "," str)))
  14.         (setq ty (entlast))
  15.         (command "rotate" ty "" p)
  16.         (command pause)
  17.         (setq ss(ssget))
  18.     (defun ff(lst)
  19.         (entmakex (append (list '(0 . "LWPOLYLINE")
  20.         '(100 . "AcDbEntity")
  21.         '(100 . "AcDbPolyline")
  22.         '(62 . 256)
  23.         (cons 90 (length lst))
  24.         (cons 70 0)
  25.         )
  26.         (mapcar '(lambda (pt) (cons 10 pt)) lst)
  27.       )
  28.   ))
  29.   (repeat(setq i(sslength ss))
  30.     (setq lst(mapcar 'cdr(vl-remove-if-not '(lambda(x)(=(car x) 10)) (entget(ssname ss(setq i(1- i)))))))
  31.      (setq lst1(list(car lst ) (caddr lst )))
  32.      (setq lst2(list(cadr lst )(cadddr lst )))
  33.      (ff lst1) (ff lst2)
  34.   )
  35.           (princ)        
  36. )
再请教一下飞版,我尝试把(setq ss(ssget))删除,并把后面的俩ss换成ty为什么不能像居中生成文字一样生成对角线?谢谢~
发表于 2024-8-8 12:44:30 | 显示全部楼层
  1. (defun c:ccc (/ p p0 p1 p2 pp pt_xy str ty)
  2.         (defun pt_xy (e / s)
  3.                 (if (setq s
  4.                                         (mapcar 'cdr
  5.                                                 (vl-remove-if-not '(lambda (x) (= (car x) 10))(entget e))
  6.                                         )
  7.                                 )
  8.                         (if (= 1 (length s))(car s)s)
  9.                 )
  10.         )
  11.         (setq str "1000X1000")
  12.         (setq p (getpoint "\n插入点"))
  13.         (command "_.Rectang" "non" p "non" (strcat "@" (vl-string-translate "X" "," str)))
  14.         (setq ty (entlast))
  15.         (setq
  16.                 pp(pt_xy ty)
  17.                 p1(car pp)
  18.                 p2(caddr pp)
  19.         )
  20.         (setq p0(mapcar '(lambda(x)(* 0.5 x)) (mapcar '+ p1 p2)))
  21.         (command "rotate" ty "" p0) (command pause)
  22.         (entmake
  23.                 (list
  24.                         (cons 0 "text")
  25.                         (cons 1 "12345")
  26.                         (cons 7 "standard")  
  27.                         (cons 10 p0)              
  28.                         (cons 11 p0)              
  29.                         (cons 40 180)
  30.                 )
  31.         )
  32.         (princ)       
  33. )
 楼主| 发表于 2024-8-8 15:44:34 | 显示全部楼层

感谢飞版回复,我把(command "rotate" ty "" p0) (command pause)改成(command "rotate" ty "" p) (command pause)后是想我生成的矩形的形式,但是随后生成的文字不在所生成的矩形框中点上,再请教一下怎么改?谢谢谢谢~
发表于 2024-8-8 22:08:01 | 显示全部楼层
路过 学习了。
 楼主| 发表于 2024-8-9 14:54:00 | 显示全部楼层
飞雪神光 发表于 2024-8-8 16:11
72 73是基点对齐模式 不对就删掉

再次感谢飞版,正是我想要的插件,学习了~
发表于 2024-8-9 15:47:03 | 显示全部楼层
路过,感谢分享
发表于 2024-8-9 19:27:50 | 显示全部楼层
entmake生成单行文字http://bbs.mjtd.com/thread-180267-1-1.html,有好多问题用关键词搜一下能找多好多类似的
 楼主| 发表于 2024-8-9 19:39:26 | 显示全部楼层
饼仲郎 发表于 2024-8-9 19:27
entmake生成单行文字http://bbs.mjtd.com/thread-180267-1-1.html,有好多问题用关键词搜一下能找多好多类 ...

是的,我搜索过了,但逐一看了也没找到我想要的代码,所以才来求助了,根据飞版的指点和其他人的代码,居中生成多行文字的也搞定了,谢谢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 06:28 , Processed in 0.181727 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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