明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1824|回复: 39

求助,给多段线节点编号并输出对应的坐标表

[复制链接]
发表于 2024-7-3 14:24:33 | 显示全部楼层 |阅读模式
本帖最后由 jackAqwq 于 2024-7-3 14:25 编辑

能不能实现这种功能啊

本帖子中包含更多资源

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

x
 楼主| 发表于 2024-8-5 01:39:12 | 显示全部楼层
本帖最后由 jackAqwq 于 2024-8-5 01:55 编辑
muai2010 发表于 2024-8-5 00:25
已经很不错了,用起来还不错,感谢分享

这个好像能快点

  1. (vl-load-com)
  2. (defun c:ZBB(/ *error* BGZG  ent  ss ss1 apt1 apt2 apt3 apt4 BGHG apt1Y apt1X DHQZ i DH pt1 ptdh )
  3.         ;(K:SysVar);修改系统变量
  4.         ;(command "_undo" "be")
  5.         (defun *error* (msg)  ;错误处理
  6.     (setvar "regenmode" 1)
  7.     ;;(command "undo" "e")
  8.     ;;(setvar "cmdecho" 1)
  9.                 (setvar "DimZin" 1);不消0
  10.     (vla-endundomark adoc)
  11.     (princ msg)
  12.   )
  13.         (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  14.         (vla-startundomark adoc)
  15.         (setvar "regenmode" 0);停止自刷新
  16.         (setvar "DimZin" 1);数值不消0
  17.         ;(setvar "TextStyle" LENGTH);数值不消0
  18.         (setvar "OSMode" 0);数值不消0
  19.         ;;;程序加载初始化设置
  20.   (if (=  nil)
  21.     (setq BGZG 2.0) ;文字高度
  22.   )
  23.   (if (= BGMC nil)
  24.     (setq BGMC "人防工程坐标表") ;表格名称
  25.   )
  26.   (if (= DHQZ nil)
  27.     (setq DHQZ "F") ;点号前缀
  28.   )
  29.   (if (= XY-YX nil)
  30.     (setq XY-YX "是") ;交换X Y坐标标记
  31.   )
  32.   (progn
  33.     (princ "\n当前参数值  文字高度:")
  34.     (princ BGZG)
  35.     (princ "  表格名称:")
  36.     (princ BGMC)
  37.     (princ "  点号前缀:")
  38.     (princ DHQZ)
  39.     (princ "  交换坐标:")
  40.     (princ XY-YX)
  41.   )
  42.         (setq ent (ssname (ssget) 0))
  43.         (setq ss (plgetlsta1  ent))
  44.         (setq ss1 ss)
  45.         ;;;指定需标注的点或设置字高、比例、精度、交换X Y坐标
  46.   (setq apt1 nil)
  47.   (while (= apt1 nil)
  48.     (initget "1 2 3 4")
  49.     (setq apt1 (getpoint
  50.                                                                  "\n表格位置 或 [字高(1)/表格名称(2)/点号前缀(3)/交换坐标(4)]:"
  51.                                                          )
  52.     )
  53.     (cond
  54.       ((= apt1 "1")
  55.                                 (setq apt1     nil
  56.                                         BGZG_old BGZG
  57.                                 )
  58.                                 (setq BGZG (getreal (strcat "\n指定字高<" (rtos BGZG 2) ">:")))
  59.                                 (if (= BGZG nil) (setq BGZG BGZG_old))
  60.                                 (princ (strcat "当前字高:" (rtos BGZG 2)))
  61.       )
  62.       ((= apt1 "2")
  63.                                 (setq apt1     nil
  64.                                         BGMC_old BGMC
  65.                                 )
  66.                                 (setq BGMC (getstring (strcat "\n表格名称<"BGMC">:")))
  67.                                 (if (= BGMC nil) (setq BGMC BGMC_old))
  68.                                 (princ (strcat "当前表名:" BGMC))
  69.       )
  70.       ((= apt1 "3")
  71.                                 (setq apt1      nil
  72.                                         DHQZ_old DHQZ
  73.                                 )
  74.                                 (setq DHQZ (getstring  (strcat "\n指定前缀<" DHQZ ">:")))
  75.                                 (if (= DHQZ nil) (setq DHQZ DHQZ_old))
  76.                                 (princ (strcat "当前前缀:" DHQZ))
  77.                         )
  78.                         ((= apt1 "4")
  79.                                 (setq apt1 nil)
  80.                                 (initget 1 "1 2")
  81.                                 (setq XY-YX (getkword (strcat "\n是否交换坐标[是(1)/否(2)]<" XY-YX ">:")))
  82.                                 (princ
  83.                                         (strcat
  84.                                                 "当前交换坐标:"
  85.                                                 (cond
  86.                                                         ((= XY-YX "1") "是")
  87.                                                         ((= XY-YX "2") "否")
  88.                                                 )
  89.                                         )
  90.                                 )
  91.                         )
  92.                         (T)
  93.                 )
  94.         )
  95.         (NewLayer:Name-YanSe BGMC 1)
  96.         (setq BGHG (* 3 BGZG));BGHG:表格行高
  97.         (setq apt2 (polar apt1 0 (* BGZG 20 )));第一行宽:字高*20
  98.         (setq apt3 (polar apt2 (* pi 1.5) BGHG))
  99.         (setq apt4 (polar apt1 (* pi 1.5) BGHG))
  100.         ;(command "_LAYER" "M" BGMC "C" "1" BGMC "");生成图层并设置颜色
  101.         ;(NewLine:pt1-pt2 apt1 apt4);表头框左边那一行直线
  102.         ;(NewLine:pt1-pt2 apt1 apt2);表头框上面那一行直线
  103.         ;(NewLine:pt1-pt2 apt2 apt3);表头框右边那一行直线
  104.         ;表头框,上面注释掉就不显示表头框
  105.         (NewLine:pt1-pt2 apt3 apt4);表头框下面那一行直线
  106.         (setq apt1Y (polar apt1 (* pi 1.5) (/ BGHG 2)));
  107.         (setq apt1X (polar apt1Y 0 (/ (* BGZG 20)2)));0   16
  108.         (NewText:JiDian-NeiRong-ZiGao apt1X "人防工程坐标表" (* 1.2 BGZG) )
  109.         (setq i 1)
  110.         ( BGCS BGZG i  apt4   0 )
  111.         (repeat (length ss)
  112.                 ( setq apt4 (polar apt4 (* pi 1.5) BGHG))
  113.                 ( setq DH  (strcat DHQZ (itoa i) ));点号名称
  114.                 ( setq pt1 (car ss1));点号列表
  115.                 ( setq ptdh (polar pt1 (* pi 0.5) (* 1.25 BGZG )));点号位置
  116.                 (NewText:JiDian-NeiRong-ZiGao ptdh DH (* 1.0 BGZG ) );顶点生成点号的参数
  117.                 ;( command "text" "MC" ptdh (* 1.0 BGZG )0 DH )
  118.                 (NewCIRCLE:PT-BJ pt1 (* 0.12 BGZG));顶点生成圆的参数
  119.                 ;( command ".CIRCLE" pt1 (* 0.12 BGZG) );圈大小
  120.                 ( setq ss1  (cdr ss1))
  121.                 ( BGCS BGZG DH  apt4  pt1 )
  122.                 ( setq i (1+ i))
  123.         )
  124.         ;(command "_undo" "e")
  125.         ;(setvar "regenmode" 1)
  126.         ; (command "regen")
  127.         (vla-endundomark adoc)
  128.         (setvar "OSMode" 147);数值不消0
  129.         ;(K:SysVar);恢复系统变量
  130.         (princ)
  131. )
  132. ;以下是相应函数
  133. ;表格参数
  134. (defun BGCS ( BGZG i  pt  ptzb / w h  pta pta1 pta2  pta3)
  135.         (setq w (* BGZG 4));列宽
  136.         (setq h (* BGZG 3));行高
  137.         (NewLine:pt1-pt2 pt (polar pt (* pi 1.5) h));第1列
  138.         (NewLine:pt1-pt2 (polar pt (* pi 1.5) h) (polar (polar pt 0 (* w 5)) (* pi 1.5) h));第2行
  139.         (NewLine:pt1-pt2 (polar (polar pt 0 (* w 5)) (* pi 1.5) h) (polar pt 0 (* w 5)));第4列
  140.         (NewLine:pt1-pt2 (polar pt 0 w) (polar (polar pt 0 w) (* pi 1.5) h));第2列
  141.         (NewLine:pt1-pt2 (polar pt 0 (* w 3)) (polar (polar pt 0 (* w 3)) (* pi 1.5) h));第3列
  142.         (setq pta (polar pt (* pi 1.5) (* h 0.5)));行高中点
  143.         (setq pta1 (polar pta 0 (* w 0.5)));点号列宽中点
  144.         (setq pta2 (polar pta 0 (* W 2)));X列宽中点
  145.         (setq pta3 (polar pta 0 (* W 4)));Y列宽中点
  146.         ( if (= ptzb 0)
  147.                 (progn
  148.                         (NewText:JiDian-NeiRong-ZiGao pta1 "点号" (* 1.2 BGZG))
  149.                         (NewText:JiDian-NeiRong-ZiGao pta2 "X" (* 1.2 BGZG))
  150.                         (NewText:JiDian-NeiRong-ZiGao pta3 "Y" (* 1.2 BGZG))
  151.                 )
  152.                 (progn
  153.                         (if (= XY-YX "2")
  154.                                 (setq X (rtos (cadr ptzb) 2 2)
  155.           Y (rtos (car ptzb) 2 2)
  156.                                 )
  157.                                 (setq Y (rtos (cadr ptzb) 2 2)
  158.           X (rtos (car ptzb) 2 2)
  159.                                 )
  160.                         )
  161.                         (NewText:JiDian-NeiRong-ZiGao pta1 i BGZG)
  162.                         (NewText:JiDian-NeiRong-ZiGao pta2 Y BGZG)
  163.                         (NewText:JiDian-NeiRong-ZiGao pta3 X BGZG)
  164.                 )
  165.         )
  166. )
  167. (defun plgetlsta1 (ent)
  168.         (mapcar 'cdr (vl-remove-if-not (FUNCTION (LAMBDA (x) (= 10 (car x)))) (entget ent)))
  169. )
  170. ;; 创建直线图元
  171. (defun NewLine:pt1-pt2 (pt1 pt2)
  172.         (entmake (list '(0 . "LINE")
  173.                                                  (cons 10 pt1)
  174.                                                  (cons 11 pt2)
  175.                                          )
  176.         )
  177. )
  178. ;; 创建文字图元
  179. ;; 基点-内容-字高
  180. (defun NewText:JiDian-NeiRong-ZiGao (JiDian NeiRong ZiGao )
  181.   (entmake
  182.     (list
  183.       '(0 . "TEXT")
  184.       (cons 10 JiDian)  ; 插入点
  185.       (cons 40 ZiGao)  ; 文字高度
  186.       (cons 1 NeiRong)  ; 文字内容
  187.       '(7 . "宋体");字形名称
  188.                         '(72 . 1);水平对齐方式
  189.       '(73 . 2) ;垂直对齐方式
  190.       (cons 11 JiDian)  ; 对齐插入点
  191.     )
  192.   ))
  193. ;;创建图层函数
  194. ;;图名-颜色
  195. (defun NewLayer:Name-YanSe (Name YanSe )
  196.         (if (not (tblsearch "LAYER" Name))  ;;;判断有没有该图层
  197.                 (entmake
  198.                         (list
  199.                                 '(0 . "LAYER")
  200.                                 '(100 . "AcDbSymbolTableRecord")
  201.                                 '(100 . "AcDbLayerTableRecord")
  202.                                 '(70 . 0);层可见性
  203.                                 (cons 2 Name);图层名称
  204.                                 (cons 62 yanse) ;图层颜色
  205.                         )
  206.                 )
  207.         )
  208.         (setvar "CLAYER" Name)
  209. )
  210. ;; 创建圆
  211. ;; 圆心-半径
  212. (defun NewCIRCLE:PT-BJ (pt bj)
  213.   (entmakex
  214.                 (list
  215.                         (cons 0 "CIRCLE")
  216.                         (cons 10 pt)
  217.                         (cons 40 bj)
  218.                 )
  219.         ))
  220. (princ)
发表于 2024-8-5 09:47:07 | 显示全部楼层
jackAqwq 发表于 2024-8-5 01:39
这个好像能快点

太晚有一处没改到,帮你改下
  1. (vl-load-com)
  2. (defun c:ZBB(/ *error* BGZG  ent  ss ss1 apt1 apt2 apt3 apt4 BGHG apt1Y apt1X DHQZ i DH pt1 ptdh )
  3.         ;(K:SysVar);修改系统变量
  4.         ;(command "_undo" "be")
  5.         (defun *error* (msg)  ;错误处理
  6.     (setvar "regenmode" 1)
  7.     ;;(command "undo" "e")
  8.     ;;(setvar "cmdecho" 1)
  9.                 (setvar "DimZin" 1);不消0
  10.     (vla-endundomark adoc)
  11.     (princ msg)
  12.   )
  13.         (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  14.         (vla-startundomark adoc)
  15.         (setvar "regenmode" 0);停止自刷新
  16.         (setvar "DimZin" 1);数值不消0
  17.         ;(setvar "TextStyle" LENGTH);数值不消0
  18.         (setvar "OSMode" 0);数值不消0
  19.         ;;;程序加载初始化设置
  20.   (if (=  nil)
  21.     (setq BGZG 2.0) ;文字高度
  22.   )
  23.   (if (= BGMC nil)
  24.     (setq BGMC "人防工程坐标表") ;表格名称
  25.   )
  26.   (if (= DHQZ nil)
  27.     (setq DHQZ "F") ;点号前缀
  28.   )
  29.   (if (= XY-YX nil)
  30.     (setq XY-YX "是") ;交换X Y坐标标记
  31.   )
  32.   (progn
  33.     (princ "\n当前参数值  文字高度:")
  34.     (princ BGZG)
  35.     (princ "  表格名称:")
  36.     (princ BGMC)
  37.     (princ "  点号前缀:")
  38.     (princ DHQZ)
  39.     (princ "  交换坐标:")
  40.     (princ XY-YX)
  41.   )
  42.         (setq ent (ssname (ssget) 0))
  43.         (setq ss (plgetlsta1  ent))
  44.         (setq ss1 ss)
  45.         ;;;指定需标注的点或设置字高、比例、精度、交换X Y坐标
  46.   (setq apt1 nil)
  47.   (while (= apt1 nil)
  48.     (initget "1 2 3 4")
  49.     (setq apt1 (getpoint
  50.                                                                  "\n表格位置 或 [字高(1)/表格名称(2)/点号前缀(3)/交换坐标(4)]:"
  51.                                                          )
  52.     )
  53.     (cond
  54.       ((= apt1 "1")
  55.                                 (setq apt1     nil
  56.                                         BGZG_old BGZG
  57.                                 )
  58.                                 (setq BGZG (getreal (strcat "\n指定字高<" (rtos BGZG 2) ">:")))
  59.                                 (if (= BGZG nil) (setq BGZG BGZG_old))
  60.                                 (princ (strcat "当前字高:" (rtos BGZG 2)))
  61.       )
  62.       ((= apt1 "2")
  63.                                 (setq apt1     nil
  64.                                         BGMC_old BGMC
  65.                                 )
  66.                                 (setq BGMC (getstring (strcat "\n表格名称<"BGMC">:")))
  67.                                 (if (= BGMC nil) (setq BGMC BGMC_old))
  68.                                 (princ (strcat "当前表名:" BGMC))
  69.       )
  70.       ((= apt1 "3")
  71.                                 (setq apt1      nil
  72.                                         DHQZ_old DHQZ
  73.                                 )
  74.                                 (setq DHQZ (getstring  (strcat "\n指定前缀<" DHQZ ">:")))
  75.                                 (if (= DHQZ nil) (setq DHQZ DHQZ_old))
  76.                                 (princ (strcat "当前前缀:" DHQZ))
  77.                         )
  78.                         ((= apt1 "4")
  79.                                 (setq apt1 nil)
  80.                                 (initget 1 "1 2")
  81.                                 (setq XY-YX (getkword (strcat "\n是否交换坐标[是(1)/否(2)]<" XY-YX ">:")))
  82.                                 (princ
  83.                                         (strcat
  84.                                                 "当前交换坐标:"
  85.                                                 (cond
  86.                                                         ((= XY-YX "1") "是")
  87.                                                         ((= XY-YX "2") "否")
  88.                                                 )
  89.                                         )
  90.                                 )
  91.                         )
  92.                         (T)
  93.                 )
  94.         )
  95.         (NewLayer:Name-YanSe BGMC 1)
  96.         (setq BGHG (* 3 BGZG));BGHG:表格行高
  97.         (setq apt2 (polar apt1 0 (* BGZG 20 )));第一行宽:字高*20
  98.         (setq apt3 (polar apt2 (* pi 1.5) BGHG))
  99.         (setq apt4 (polar apt1 (* pi 1.5) BGHG))
  100.         ;(command "_LAYER" "M" BGMC "C" "1" BGMC "");生成图层并设置颜色
  101.         ;(NewLine:pt1-pt2 apt1 apt4);表头框左边那一行直线
  102.         ;(NewLine:pt1-pt2 apt1 apt2);表头框上面那一行直线
  103.         ;(NewLine:pt1-pt2 apt2 apt3);表头框右边那一行直线
  104.         ;表头框,上面注释掉就不显示表头框
  105.         (NewLine:pt1-pt2 apt3 apt4);表头框下面那一行直线
  106.         (setq apt1Y (polar apt1 (* pi 1.5) (/ BGHG 2)));
  107.         (setq apt1X (polar apt1Y 0 (/ (* BGZG 20)2)));0   16
  108.         (NewText:JiDian-NeiRong-ZiGao apt1X BGMC (* 1.2 BGZG) )
  109.         (setq i 1)
  110.         ( BGCS BGZG i  apt4   0 )
  111.         (repeat (length ss)
  112.                 ( setq apt4 (polar apt4 (* pi 1.5) BGHG))
  113.                 ( setq DH  (strcat DHQZ (itoa i) ));点号名称
  114.                 ( setq pt1 (car ss1));点号列表
  115.                 ( setq ptdh (polar pt1 (* pi 0.5) (* 1.25 BGZG )));点号位置
  116.                 (NewText:JiDian-NeiRong-ZiGao ptdh DH (* 1.0 BGZG ) );顶点生成点号的参数
  117.                 ;( command "text" "MC" ptdh (* 1.0 BGZG )0 DH )
  118.                 (NewCIRCLE:PT-BJ pt1 (* 0.12 BGZG));顶点生成圆的参数
  119.                 ;( command ".CIRCLE" pt1 (* 0.12 BGZG) );圈大小
  120.                 ( setq ss1  (cdr ss1))
  121.                 ( BGCS BGZG DH  apt4  pt1 )
  122.                 ( setq i (1+ i))
  123.         )
  124.         ;(command "_undo" "e")
  125.         ;(setvar "regenmode" 1)
  126.         ; (command "regen")
  127.         (vla-endundomark adoc)
  128.         (setvar "OSMode" 147);数值不消0
  129.         ;(K:SysVar);恢复系统变量
  130.         (princ)
  131. )
  132. ;以下是相应函数
  133. ;表格参数
  134. (defun BGCS ( BGZG i  pt  ptzb / w h  pta pta1 pta2  pta3)
  135.         (setq w (* BGZG 4));列宽
  136.         (setq h (* BGZG 3));行高
  137.         (NewLine:pt1-pt2 pt (polar pt (* pi 1.5) h));第1列
  138.         (NewLine:pt1-pt2 (polar pt (* pi 1.5) h) (polar (polar pt 0 (* w 5)) (* pi 1.5) h));第2行
  139.         (NewLine:pt1-pt2 (polar (polar pt 0 (* w 5)) (* pi 1.5) h) (polar pt 0 (* w 5)));第4列
  140.         (NewLine:pt1-pt2 (polar pt 0 w) (polar (polar pt 0 w) (* pi 1.5) h));第2列
  141.         (NewLine:pt1-pt2 (polar pt 0 (* w 3)) (polar (polar pt 0 (* w 3)) (* pi 1.5) h));第3列
  142.         (setq pta (polar pt (* pi 1.5) (* h 0.5)));行高中点
  143.         (setq pta1 (polar pta 0 (* w 0.5)));点号列宽中点
  144.         (setq pta2 (polar pta 0 (* W 2)));X列宽中点
  145.         (setq pta3 (polar pta 0 (* W 4)));Y列宽中点
  146.         ( if (= ptzb 0)
  147.                 (progn
  148.                         (NewText:JiDian-NeiRong-ZiGao pta1 "点号" (* 1.2 BGZG))
  149.                         (NewText:JiDian-NeiRong-ZiGao pta2 "X" (* 1.2 BGZG))
  150.                         (NewText:JiDian-NeiRong-ZiGao pta3 "Y" (* 1.2 BGZG))
  151.                 )
  152.                 (progn
  153.                         (if (= XY-YX "2")
  154.                                 (setq X (rtos (cadr ptzb) 2 2)
  155.           Y (rtos (car ptzb) 2 2)
  156.                                 )
  157.                                 (setq Y (rtos (cadr ptzb) 2 2)
  158.           X (rtos (car ptzb) 2 2)
  159.                                 )
  160.                         )
  161.                         (NewText:JiDian-NeiRong-ZiGao pta1 i BGZG)
  162.                         (NewText:JiDian-NeiRong-ZiGao pta2 Y BGZG)
  163.                         (NewText:JiDian-NeiRong-ZiGao pta3 X BGZG)
  164.                 )
  165.         )
  166. )
  167. (defun plgetlsta1 (ent)
  168.         (mapcar 'cdr (vl-remove-if-not (FUNCTION (LAMBDA (x) (= 10 (car x)))) (entget ent)))
  169. )
  170. ;; 创建直线图元
  171. (defun NewLine:pt1-pt2 (pt1 pt2)
  172.         (entmake (list '(0 . "LINE")
  173.                                                  (cons 10 pt1)
  174.                                                  (cons 11 pt2)
  175.                                          )
  176.         )
  177. )
  178. ;; 创建文字图元
  179. ;; 基点-内容-字高
  180. (defun NewText:JiDian-NeiRong-ZiGao (JiDian NeiRong ZiGao )
  181.   (entmake
  182.     (list
  183.       '(0 . "TEXT")
  184.       (cons 10 JiDian)  ; 插入点
  185.       (cons 40 ZiGao)  ; 文字高度
  186.       (cons 1 NeiRong)  ; 文字内容
  187.       '(7 . "宋体");字形名称
  188.                         '(72 . 1);水平对齐方式
  189.       '(73 . 2) ;垂直对齐方式
  190.       (cons 11 JiDian)  ; 对齐插入点
  191.     )
  192.   ))
  193. ;;创建图层函数
  194. ;;图名-颜色
  195. (defun NewLayer:Name-YanSe (Name YanSe )
  196.         (if (not (tblsearch "LAYER" Name))  ;;;判断有没有该图层
  197.                 (entmake
  198.                         (list
  199.                                 '(0 . "LAYER")
  200.                                 '(100 . "AcDbSymbolTableRecord")
  201.                                 '(100 . "AcDbLayerTableRecord")
  202.                                 '(70 . 0);层可见性
  203.                                 (cons 2 Name);图层名称
  204.                                 (cons 62 yanse) ;图层颜色
  205.                         )
  206.                 )
  207.         )
  208.         (setvar "CLAYER" Name)
  209. )
  210. ;; 创建圆
  211. ;; 圆心-半径
  212. (defun NewCIRCLE:PT-BJ (pt bj)
  213.   (entmakex
  214.                 (list
  215.                         (cons 0 "CIRCLE")
  216.                         (cons 10 pt)
  217.                         (cons 40 bj)
  218.                 )
  219.         ))
  220. (princ)


 楼主| 发表于 2024-8-4 16:00:13 | 显示全部楼层
本帖最后由 jackAqwq 于 2024-8-4 16:02 编辑

缝缝补补,勉强够用

  1. (vl-load-com)
  2. (defun c:ZBB(/ BGZG  ent  ss ss1 apt1 apt2 apt3 apt4 BGHG apt1Y apt1X aa i ii pt1 ptdh )
  3.   (K:SysVar);修改系统变量
  4.   (command "_undo" "be")
  5.   ;;;程序加载初始化设置
  6.   (if (=  nil)
  7.     (setq BGZG 2.0) ;文字高度
  8.   )
  9.   (if (= BGMC nil)
  10.     (setq BGMC "人防工程坐标表") ;表格名称
  11.   )
  12.   (if (= DHQZ nil)
  13.     (setq DHQZ "F") ;点号前缀
  14.   )
  15.   (if (= XY-YX nil)
  16.     (setq XY-YX "是") ;交换X Y坐标标记
  17.   )
  18.   (progn
  19.     (princ "\n当前参数值  文字高度:")
  20.     (princ BGZG)
  21.     (princ "  表格名称:")
  22.     (princ BGMC)
  23.     (princ "  点号前缀:")
  24.     (princ DHQZ)
  25.     (princ "  交换坐标:")
  26.     (princ XY-YX)
  27.   )
  28.   (setq ent (ssname (ssget) 0))
  29.   (setq ss (plgetlsta1  ent))
  30.   (setq ss1 ss)
  31.   ;;;指定需标注的点或设置字高、比例、精度、交换X Y坐标
  32.   (setq apt1 nil)
  33.   (while (= apt1 nil)
  34.     (initget "1 2 3 4")
  35.     (setq apt1 (getpoint
  36.                  "\n表格位置 或 [字高(1)/表格名称(2)/点号前缀(3)/交换坐标(4)]:"
  37.                )
  38.     )
  39.     (cond
  40.       ((= apt1 "1")
  41.         (setq apt1     nil
  42.           BGZG_old BGZG
  43.         )
  44.         (setq BGZG (getreal (strcat "\n指定字高<" (rtos BGZG 2) ">:")))
  45.         (if (= BGZG nil) (setq BGZG BGZG_old))
  46.         (princ (strcat "当前字高:" (rtos BGZG 2)))
  47.       )
  48.       ((= apt1 "2")
  49.         (setq apt1     nil
  50.           BGMC_old BGMC
  51.         )
  52.         (setq BGMC (getstring (strcat "\n表格名称<"BGMC">:")))
  53.         (if (= BGMC nil) (setq BGMC BGMC_old))
  54.         (princ (strcat "当前表名:" BGMC))
  55.       )
  56.       ((= apt1 "3")
  57.         (setq apt1      nil
  58.           DHQZ_old DHQZ
  59.         )
  60.         (setq DHQZ (getstring  (strcat "\n指定前缀<" DHQZ ">:")))
  61.         (if (= DHQZ nil) (setq DHQZ DHQZ_old))
  62.         (princ (strcat "当前前缀:" DHQZ))
  63.       )
  64.       ((= apt1 "4")
  65.         (setq apt1 nil)
  66.         (initget 1 "1 2")
  67.         (setq XY-YX (getkword (strcat "\n是否交换坐标[是(1)/否(2)]<" XY-YX ">:")))
  68.         (princ
  69.           (strcat
  70.             "当前交换坐标:"
  71.             (cond
  72.               ((= XY-YX "1") "是")
  73.               ((= XY-YX "2") "否")
  74.             )
  75.           )
  76.         )
  77.       )
  78.       (T)
  79.     )
  80.   )
  81.   (NewLayer:Name-YanSe BGMC 1)
  82.   (setq BGHG (* 3 BGZG));BGHG:表格行高
  83.   (setq apt2 (polar apt1 0 (* BGZG 20 )));第一行宽:字高*20
  84.   (setq apt3 (polar apt2 (* pi 1.5) BGHG))
  85.   (setq apt4 (polar apt1 (* pi 1.5) BGHG))
  86.   ;(command "_LAYER" "M" BGMC "C" "1" BGMC "");生成图层并设置颜色
  87.   ;(NewLine:pt1-pt2 apt1 apt4);表头框左边那一行直线
  88.   ;(NewLine:pt1-pt2 apt1 apt2);表头框上面那一行直线
  89.   ;(NewLine:pt1-pt2 apt2 apt3);表头框右边那一行直线
  90.   ;表头框,上面注释掉就不显示表头框
  91.   (NewLine:pt1-pt2 apt3 apt4);表头框下面那一行直线
  92.   (setq apt1Y (polar apt1 (* pi 1.5) (/ BGHG 2)));
  93.   (setq apt1X (polar apt1Y 0 (/ (* BGZG 20)2)));0   16
  94.   (NewText-:JiDian-NeiRong-ZiGao apt1X "人防工程坐标表" (* 1.2 BGZG) )
  95.   (setq i 1)
  96.   ( gxba BGZG i  apt4   0 )
  97.   (repeat (length ss)
  98.     ( setq apt4 (polar apt4 (* pi 1.5) BGHG))
  99.     ( setq ii  (strcat DHQZ (itoa i) ));点号名称
  100.     ( setq pt1 (car ss1));点号列表
  101.     ( setq ptdh (polar pt1 (* pi 0.5) (* 1.25 BGZG )));点号位置
  102.     ( command "text" "MC" ptdh (* 1.0 BGZG )0 ii )
  103.     ( command ".CIRCLE" pt1 (* 0.12 BGZG) );圈大小
  104.     ( setq ss1  (cdr ss1))
  105.     ( gxba BGZG ii  apt4  pt1 )
  106.     ( setq i (1+ i))
  107.   )
  108.   (command "_undo" "e")
  109.   (K:SysVar);恢复系统变量
  110.   (princ)
  111. )
  112. ;以下是相应函数
  113. (defun gxba ( BGZG i  pt  ptzb / w h  pta pta1 pta2  pta3)
  114.   (setq w (* BGZG 4));列宽
  115.   (setq h (* BGZG 3));行高
  116.   (NewLine:pt1-pt2 pt (polar pt (* pi 1.5) h));第1列
  117.   (NewLine:pt1-pt2 (polar pt (* pi 1.5) h) (polar (polar pt 0 (* w 5)) (* pi 1.5) h));第2行
  118.   (NewLine:pt1-pt2 (polar (polar pt 0 (* w 5)) (* pi 1.5) h) (polar pt 0 (* w 5)));第4列
  119.   (NewLine:pt1-pt2 (polar pt 0 w) (polar (polar pt 0 w) (* pi 1.5) h));第2列
  120.   (NewLine:pt1-pt2 (polar pt 0 (* w 3)) (polar (polar pt 0 (* w 3)) (* pi 1.5) h));第3列
  121.   (setq pta (polar pt (* pi 1.5) (* h 0.5)));行高中点
  122.   (setq pta1 (polar pta 0 (* w 0.5)));点号列宽中点
  123.   (setq pta2 (polar pta 0 (* W 2)));X列宽中点
  124.   (setq pta3 (polar pta 0 (* W 4)));Y列宽中点
  125.   ( if (= ptzb 0)
  126.     (progn
  127.       (NewText-:JiDian-NeiRong-ZiGao pta1 "点号" (* 1.2 BGZG))
  128.       (NewText-:JiDian-NeiRong-ZiGao pta2 "X" (* 1.2 BGZG))
  129.       (NewText-:JiDian-NeiRong-ZiGao pta3 "Y" (* 1.2 BGZG))
  130.     )
  131.     (progn
  132.       (if (= XY-YX "2")
  133.         (setq X (rtos (cadr ptzb) 2 2)
  134.           Y (rtos (car ptzb) 2 2)
  135.         )
  136.         (setq Y (rtos (cadr ptzb) 2 2)
  137.           X (rtos (car ptzb) 2 2)
  138.         )
  139.       )
  140.       (NewText-:JiDian-NeiRong-ZiGao pta1 i BGZG)
  141.       (NewText-:JiDian-NeiRong-ZiGao pta2 Y BGZG)
  142.       (NewText-:JiDian-NeiRong-ZiGao pta3 X BGZG)
  143.     )
  144.   )
  145. )
  146. (defun plgetlsta1 (ent)
  147.   (mapcar 'cdr (vl-remove-if-not (FUNCTION (LAMBDA (x) (= 10 (car x)))) (entget ent)))
  148. )
  149. ;修改或恢复系统变量函数
  150. (defun K:SysVar ()
  151.   (if (not *Old_vars*)
  152.     (progn
  153.       (setq *New_vars* '((cmdecho 0);取消回显
  154.                           (OSMode 0);禁用捕捉
  155.                           (expert 5);禁止提示冲突(默认Yes)
  156.                           (DimZin 1);不消0
  157.                           (TextStyle "宋体");设置字体样式
  158.                         ))
  159.       (setq *Old_vars* (mapcar'(lambda (a / b)(if (and(setq b (getvar (car a)))(/= b (cadr a)))
  160.                                                 (progn
  161.                                                   (apply 'setvar a)
  162.                                                   (list (car a) b))))
  163.                          *New_vars*
  164.                        )
  165.       )
  166.       (setq *New_vars* nil)
  167.     )
  168.     (progn
  169.       (foreach xx *Old_vars* (if xx (apply 'setvar xx)))
  170.       (setq *Old_vars* nil)
  171.     )
  172.   )
  173. )
  174. ;; 创建直线图元
  175. (defun NewLine:pt1-pt2 (pt1 pt2)
  176.   (entmake (list '(0 . "LINE")
  177.              (cons 10 pt1)
  178.              (cons 11 pt2)
  179.            )
  180.   )
  181. )
  182. ;; 创建文字图元
  183. (defun NewText-:JiDian-NeiRong-ZiGao (JiDian NeiRong ZiGao )
  184.   (entmake
  185.     (list
  186.       '(0 . "TEXT")
  187.       (cons 10 JiDian)  ; 插入点
  188.       (cons 40 ZiGao)  ; 文字高度
  189.       (cons 1 NeiRong)  ; 文字内容
  190.       '(7 . "宋体");字形名称
  191.       '(72 . 1);水平对齐方式
  192.       '(73 . 2) ;垂直对齐方式
  193.       (cons 11 JiDian)  ; 对齐插入点
  194.     )
  195.   ))
  196. ;;创建图层函数
  197. ;;图名-线型-颜色-打印-线宽
  198. (defun NewLayer:Name-YanSe (Name YanSe )
  199.   (if (not (tblsearch "LAYER" Name))  ;;;判断有没有该图层
  200.     (entmake
  201.       (list
  202.         '(0 . "LAYER")
  203.         '(100 . "AcDbSymbolTableRecord")
  204.         '(100 . "AcDbLayerTableRecord")
  205.         '(70 . 0);层可见性
  206.         (cons 2 Name);图层名称
  207.         (cons 62 yanse) ;图层颜色
  208.       )
  209.     )
  210.   )
  211.   (setvar "CLAYER" Name)
  212. )
  213. (princ)


发表于 2024-7-3 14:33:41 | 显示全部楼层
蛮简单的吧,入门就能做
 楼主| 发表于 2024-7-3 14:37:00 | 显示全部楼层
你有种再说一遍 发表于 2024-7-3 14:33
蛮简单的吧,入门就能做

这不是没入门嘛
发表于 2024-7-3 14:42:11 | 显示全部楼层
金牌会员写不出来吗?
发表于 2024-7-3 14:45:41 | 显示全部楼层
这个属于基本操作,金牌会员应该问题不大。
发表于 2024-7-3 15:04:45 | 显示全部楼层
  1. (progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))
  2. (defun c:tt ()
  3.   (setq r 10)
  4.   (setq pt-base '(0 0 0))
  5.   ;; 取多段线顶点
  6.   (setq lwpl (car (pickset:to-list(ssget ":S:E" '((0 . "lwpolyline"))))))
  7.   (setq pts (curve:get-points lwpl))
  8.   ;; 画半径为r红色圆
  9.   (entity:putdxf
  10.    (entity:make-circle pts r)
  11.    62 1)
  12.   ;; 画坐标表
  13.   (setq i 0)
  14.   (ui:dyndraw
  15.    (table:make pt-base
  16.                "人防工程特征点坐标表"
  17.                '("点号""X""Y")
  18.                (mapcar
  19.                 '(lambda(x)
  20.                   (list
  21.                    (strcat "F"(itoa (setq i(1+ i))))
  22.                    (car x)
  23.                    (cadr x)))
  24.                 pts))
  25.    pt-base))
发表于 2024-7-3 15:54:05 | 显示全部楼层

哈哈,你舅惯着他爸
发表于 2024-7-4 08:17:04 | 显示全部楼层
;**************************20240229年 界点表*****************************************

(defun c:zz(/ hzg os ent  ss ss1 apt1 apt2 apt3 apt4 hh apt1a apt1aa aa i ii pt1 ptdh)
   (setvar  "cmdecho" 0)
   (setq os ( getvar "osmode"))
   (setvar "osmode" 0)
   (prompt "选择边界")
   (setq hzg (getreal "\n 字体高度:(默认字高为2)"))
      (if (= hzg nil) (setq hzg 2))
   (setq ent (ssname (ssget) 0))
   (setq ss (plgetlsta1  ent))
   (setq ss1 ss)
   (setq apt1 (getpoint "\n 表格位置:"))
   (setq hh (* 0.8(/ hzg 0.25 )))
   (setq apt2 (polar apt1 0 (* 6.8(/ hzg 0.25 ))))
   (setq apt3 (polar apt2 (* pi 1.5) hh))
   (setq apt4 (polar apt1 (* pi 1.5) hh))
   (command "LAYER" "M" "界点表" "C" "3" "界点表" "")
   (command  "pline" apt1 apt2 apt3 apt4 apt1  "" )
   (setq apt1a (polar apt1 (* pi 1.5) (* 0.7(/ hzg 0.25 ))))
   (setq apt1aa (polar apt1a 0 (* 2(/ hzg 0.25 ))))
   (command "text" "bl" apt1aa (* 0.3(/ hzg 0.25 )) 0 "人防工程坐标表" )
   (setq i 1)
       (setq aa 0)
       ( gxba hzg i  apt4   aa )

        (repeat (length ss)
                    ( setq apt4 (polar apt4 (* pi 1.5) hh))
                    ( setq ii  (strcat "J" (itoa i) ))
                    ( setq pt1 (car ss1))
                      ( setq ptdh (polar pt1 (* pi 0.5) (* 0.2(/ hzg 0.25 ))))
                    ( command "text" "bl" ptdh (* 0.7 hzg )0 ii )
                    ( command ".CIRCLE" pt1 (* 0.03( / hzg 0.25 )) );圈大小
                    ( setq ss1  (cdr ss1))
                    ( gxba hzg ii  apt4  pt1 )
                    ( setq i (1+ i))
        )
        (setvar "osmode" os)
)
(defun gxba ( hzg1 i  pt  ptzb / w w1 h pt1 pt pt2 pt3 pt4 pt5 pt6  pt7 pt8 pta pta1 pta2  pta3)
     (setq w (* 1.2(/ hzg1 0.25 )))
     (setq w1(* 2.8(/ hzg1 0.25 )))
     (setq h (* 0.8(/ hzg1 0.25 )));0.8
     (setq pt1 pt)
          (setq pt3   (polar pt1 0 w))
          (setq pt4   (polar pt1 0 (+ w w1)))
          (setq pt5   (polar pt1 0 (+ w (* 2 w1))))

          (setq pt2   (polar pt1 (* pi 1.5) h))
          (setq pt6   (polar pt2 0 w))
          (setq pt7   (polar pt2 0 (+ w w1)))
          (setq pt8   (polar pt2 0 (+ w (* 2 w1))))
              (command "pline" pt1 pt3  pt4 pt5 pt8 pt2 pt1 "")
              (command "pline" pt3 pt6     "")
              (command "pline" pt4 pt7     "")
          (setq pta    (polar pt1 (* pi 1.5) (*  0.8 h)))
          (setq pta1   (polar pta 0 (* w  0.25)))
          (setq pta2   (polar pta 0 (+ w (* 0.25(/ hzg1 0.25 )))))
          (setq pta3   (polar pta 0 (+ w w1 (* 0.25(/ hzg1 0.25 )))))

        ( if (= ptzb 0)
             (progn
               (command "text" "bl" pta1  (* 0.3(/ hzg1 0.25 )) 0 "点号" )
               (command "text" "bl" (polar pta2 0 0.5 ) (* 0.3(/ hzg1 0.25 )) 0 "纵坐标X" )
               (command "text" "bl" (polar pta3 0 0.5 )  (* 0.3(/ hzg1 0.25 )) 0 "横坐标Y"  )
            )

           (progn
               (command "text" "bl" pta1  (* 0.25(/ hzg1 0.25 )) 0 i )
               (command "text" "bl" pta2  (* 0.25(/ hzg1 0.25 )) 0 (rtos (cadr ptzb ) 2 3 ))
               (command "text" "bl" pta3  (* 0.25(/ hzg1 0.25 )) 0 (rtos (car ptzb) 2 3 ) )
             )
       )
)

(defun plgetlsta1 (ent)
   (mapcar 'cdr (vl-remove-if-not (FUNCTION (LAMBDA (x) (= 10 (car x)))) (entget ent)))
)

发表于 2024-7-4 09:06:21 | 显示全部楼层
点号放在线外对角线上,表格宽度随坐标值的宽度调整

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-22 21:01 , Processed in 0.213959 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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