明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 379|回复: 9

[提问] 求助帖:如图zbbz.vlx:请问这个标注软件引线加上、下标注是怎么实现的

  [复制链接]
发表于 2024-4-22 22:49 | 显示全部楼层 |阅读模式
求助帖:如图zbbz.vlx:请问这个标注软件引线加上、下标注是怎么实现的,绘图中需要使用到这种格式的标注,然后需要上、下标注一起导出并一一对应,使用普通的格式导出时可能会乱而不能对应,可不可以提供一下思路?我使用leader+block(仅生成一个block,每次更新一下block)实现了但是导出到xls时所有的标注都是一样的,那个匿名块怎么在leader中使用?有没有别的什么方法和标注格式

本帖子中包含更多资源

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

x
发表于 2024-4-22 23:05 | 显示全部楼层
用属性块 或者 编组 可以方便准确导出
 楼主| 发表于 2024-4-22 23:34 | 显示全部楼层
  1. (defun c:drawLeader ()
  2.   
  3.   ; (SETVAR "cmdecho" DRAG_CMDECHO_OLD )
  4.   ; (SETVAR "osmode" DRAG_OSMODE_OLD )
  5.   (setq DRAG_OSMODE_OLD (GETVAR "osmode" ))
  6.   (SETVAR "osmode" 0 )
  7.   (setq DRAG_CMDECHO_OLD
  8.          (GETVAR "cmdecho" ))
  9.   (SETVAR "cmdecho" 0 )  
  10.   (setq startPoint (getpoint "\nEnter start point of leader: "))
  11.   (setq endPoint (getpoint "\nEnter end point of leader: "))
  12.   ; (entmake (list '(0 . "LEADER") '(100 . "AcDbEntity") '(100 . "AcDbLeader")  
  13.   ;                 (cons 10 startPoint) (cons 10 endPoint)))
  14.   ; (ENTMAKE (LIST '(0 . "LEADER") '(100 . "AcDbEntity") '(100 . "AcDbLeader") '(71 . 1) '(10 0 0 0 ) '(10 0 1 0 )
  15.   ;                 (LIST -3 (LIST "ACAD" '(1000 . "DSTYLE") '(1002 . "{") '(1070 . 41) (CONS 1040 startPoint ) '(1070 . 341) (CONS 1005 11 ) '(1002 . "}") ) ) ) )
  16.   ; (setq blockName "LeaderBlock")
  17.   ; (setq bz1 "This is the content of the block1.")
  18.   ; (setq bz2 "This is the content of the block2.")
  19.   ; (setq bz3 "This is the content of the block3.")
  20.   ; (setq bz4 "This is the content of the block4.")
  21.   ; (entmake (list '(0 . "block")
  22.   ;                 (cons 2 blockName) '(70 . 0) (cons 10 pt)))
  23.   ; (repeat (setq i (sslength ss))
  24.   ;   (entmake (cdr (entget (ssname ss (setq i (1- i)))))) )
  25.   ; (entmake '((0 . "ENDBLK")))
  26.   ; (command "_.erase" ss "")
  27. ; 指定引线起点:
  28. ; 指定下一点:
  29. ; 指定下一点或 [注释(A)/格式(F)/放弃(U)] <注释>: F 输入引线格式选项 [样条曲线(S)/直线(ST)/箭头(A)/无(N)] <退出>: N
  30. ; 指定下一点或 [注释(A)/格式(F)/放弃(U)] <注释>:
  31. ; 输入注释文字的第一行或 <选项>: 输入注释选项 [公差(T)/副本(C)/块(B)/无(N)/多行文字(M)] <多行文字>: C
  32. ; 选择要复制的对象: 输入注释选项 [公差(T)/副本(C)/块(B)/无(N)/多行文字(M)] <多行文字>: B 输入块名或 [?] <12>: 12
  33. ; 单位: 无单位   转换:    1.0000
  34. ; 指定插入点或 [基点(B)/比例(S)/X/Y/Z/旋转(R)]:
  35. ; 输入 X 比例因子,指定对角点,或 [角点(C)/xyz(XYZ)] <1>: 1 输入 Y 比例因子或 <使用 X 比例因子>: 1
  36. ; 指定旋转角度 <0>: 0
  37.   (setq bl (createTextAndLineBlock endPoint))
  38.   (setq ss1 (ssget "X" (list(cons 8 "fzx"))));构造选择集
  39.   (setq layerName "bmtc") ; 指定要删除的图层名称
  40.   (command "_layer" "_make" layerName "" "_color" "green" "")
  41.   (VL-CMDF "leader" startPoint endPoint "F" "N" "" "" "C" "" "B" bl endPoint 1 1 0)
  42.   ; ; (VL-CMDF "leader" startPoint endPoint "F" "N" "" "" "C" "" "N" "" endPoint 1 1 0)
  43.   ; ; (VL-CMDF "leader" startPoint endPoint "F" "N" "" "" "C" ss1 "" "" endPoint 1 1 0)

  44.   
  45.   
  46.   (command "erase" ss1 "")
  47.   ; (command "block" bl "" "delete")
  48.   ; (command "purge" "b" bl)
  49.   
  50. )
  51. ; entmake生成普通块
  52. (defun createTextAndLineBlock (startPoint1)
  53.   ;对象捕捉
  54.   (SETVAR "osmode" 0 )
  55.   (vl-load-com)
  56.   (setq layerName1 "fzx") ; 指定要删除的图层名称
  57.   (command "_layer" "_make" layerName1 "" "_color" "GREEN" "")
  58.   
  59.   (setq text1 "长江东路33")
  60.   (setq text2 "长江东路4")
  61.   
  62.   (setq th 1.25) ; 设置文本高度1.25
  63.   (setq ta 0) ; 文字旋转角度:0
  64.   ; 获取最长文本的长度
  65.   (setq maxLength (tdaxiao 1 text1 text2))
  66.   ; (setq maxLength 7.5)
  67.   ; (setq startPoint1 (getpoint "\nEnter start point of line: "))
  68.   (setq dian1 (list(- (car startPoint1) 0) (- (cadr startPoint1) 0 0)))
  69.         (setq endPoint1 (list(+ (car startPoint1) (+ maxLength 1.5)) (- (cadr startPoint1) 0 0)))
  70.   (setq midPoint (polar startPoint1 (angle startPoint1 endPoint1) (/ (distance startPoint1 endPoint1) 2)))
  71.   (entmake (list '(0 . "LINE") (cons 10 startPoint1) (cons 11 endPoint1)))
  72.   
  73.   (setq textpoint1 (list(+ (car startPoint1) (+ (/ maxLength 2) 0.75)) (+ (cadr startPoint1) 0.8 0.1)))
  74.   (setq textpoint2 (list(+ (car textpoint1)) (- (cadr textpoint1) 1.8)))
  75.   
  76.   (setq textpoint1 (list(+ (car midPoint)) (+ (cadr midPoint) 0.8 0.1)))
  77.   (setq textpoint2 (list(+ (car midPoint)) (- (cadr midPoint) 0.8 0.1)))
  78.   (setq textpoint3 (list(+ (car midPoint)) (- (cadr midPoint) 2.6 0.1)))
  79.   (setq textpoint4 (list(+ (car midPoint)) (- (cadr midPoint) 4.4 0.1)))
  80.   (setq textpoint5 (list(+ (car midPoint)) (- (cadr midPoint) 6.2 0.1)))
  81.   (command "text" "J" "MC" textpoint1 th ta text1)
  82.   (command "text" "J" "MC" textpoint2 th ta text2)
  83.   ; (command "text" "J" "MC" textpoint3 th ta text3)
  84.   ; (command "text" "J" "MC" textpoint4 th ta text4)
  85.   ; (command "text" "J" "MC" textpoint5 th ta text5)
  86.   
  87.   
  88.   (setq blockName "TextAndLineBlock4")
  89.   (setq ss (ssget "X" (list(cons 8 layerName1))));构造选择集
  90.   (emkblk ss startPoint1 blockName)
  91.   ; (setq blockName (emkunameblk ss startPoint1))
  92.   ; (setq blockName (mc-make-unname-block ss))
  93.   (princ blockName)
  94.   (eval blockName)
  95. )
  96. (defun emkblk (ss pt name / i)
  97.   (entmake (list '(0 . "block") (cons 2 name) '(70 . 0) (cons 10 pt)))
  98.   (repeat (setq i (sslength ss))    (entmake (cdr (entget (ssname ss (setq i (1- i))))))  )
  99.   (entmake '((0 . "ENDBLK")))
  100.   (command "_.erase" ss "")
  101.   (entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt)))
  102. )这是我的设想
 楼主| 发表于 2024-4-22 23:41 | 显示全部楼层
  1. ;;;====================绘图部分START========================
  2.   (defun c:entmake ()
  3.     (setq point1 (getpoint "\nEnter start point of leader: "))
  4.     (setq point2 (getpoint "\nEnter start point of leader: "))
  5.     (setq mtext1_data "长江东路1")
  6.     (setq mtext2_data "长江东路2")
  7.     (entmake
  8.       '((0 . "BLOCK")
  9.         (2 . "*FSXM_DIMPOINTID_MTEXT")
  10.         (70 . 1)
  11.         (10 0.0 0.0 0.0)
  12.        )
  13.     )
  14.     ;;===============MTEXT1=============
  15.     (entmake (list '(0 . "MTEXT")
  16.                    '(100 . "AcDbEntity")
  17.                    '(100 . "AcDbMText")
  18.                    (cons 1 mtext1_data)
  19.                   ;  (cons 7 textstyle)
  20.                   ;  (cons 8 Layer)
  21.                    '(10 0 0 0)
  22.                    (cons 40 1)
  23.                   ;  (cons 62 TrueColor)
  24.                    '(71 . 7)
  25.              )
  26.     )
  27.     ;;===============MTEXT2==============
  28.     (entmake (list '(0 . "MTEXT")
  29.                    '(100 . "AcDbEntity")
  30.                    '(100 . "AcDbMText")
  31.                    (cons 1 mtext2_data)
  32.                    '(10 0 0 0)
  33.                    (cons 40 1)
  34.                    '(71 . 1)
  35.              )
  36.     )
  37.     (entmake
  38.       (list '(0 . "line")
  39.             '(10 0 0 0)
  40.             '(11 10 0 0)
  41.       )
  42.     )
  43.     (setq textblk_name (entmake '((0 . "ENDBLK"))))
  44.     ;;================textblk===============
  45.     (entmake (list '(0 . "INSERT")
  46.                    (cons 2 textblk_name)
  47.                    (cons 10 point2)
  48.              )
  49.     )
  50.     (setq textblk (entlast))
  51.     (setq textblk_data (entget textblk))
  52.     (setq textblk_hd (fsxm-getdxf 5 textblk_data))
  53.     ; (get_textblk_list)
  54.     ; (calc_data)
  55.     ;;================箭头===============
  56.     (setq leader
  57.            (entmakex
  58.              (list '(0 . "LEADER")
  59.                    '(100 . "AcDbEntity")
  60.                    '(100 . "AcDbLeader")
  61.                    '(71 . 0)
  62.                    '(72 . 0)
  63.                   ;  (cons 3 dimStyle)
  64.                   ;  (cons 8 Layer)
  65.                    (cons 10 point1)
  66.                    (cons 10 point2)
  67.                    (list -3
  68.                          (list "fsxm.dimpointid"
  69.                                (cons 1000 "LEADER")
  70.                          )
  71.                    )
  72.              )
  73.            )
  74.     )
  75.     (setq leader_obj (vlax-ename->vla-object leader))
  76.     (setq leader_data (entget leader))
  77.     (setq leader_hd (fsxm-getdxf 5 leader_data))
  78.   )
  79.   ;;====================绘图部分END=====================
  80. 这是fssx里的绘制代码,但是我用他自带的fsxm-write-list2->excel函数无法导出
 楼主| 发表于 2024-4-22 23:42 | 显示全部楼层
  1. (defun fsxm-write-list2->excel (list2 / no1 range x xl y)
  2.   (if (and (setq xl (vlax-get-Object "Excel.Application"))
  3.            (setq range (vlax-get-property xl 'Selection))
  4.            (setq no1 (vlax-variant-value (vlax-get-property range 'item 1)))
  5.       )
  6.     (progn
  7.       (setq x -1)
  8.       (foreach a list2
  9.         (setq x (1+ x))
  10.         (setq y -1)
  11.         (foreach b a
  12.           (setq y (1+ y))
  13.           (setq th (vlax-get-property no1 'offset x y))
  14.           (vlax-put th 'Value b)
  15.         )
  16.       )
  17.       (vlax-release-object xl)
  18.       t
  19.     )
  20.   )
  21. )
  22. (regapp "fsxm.dimpointid")
  23. ;;;==========================主程式==========================
  24. (defun c:fsxm_write_dim_to_excel (/ data EN EN_LST N SS SSLEN)
  25.   (princ "\n请选取需导出的座标标注:")
  26.   (setq ss (ssget '((-3 ("fsxm.dimpointid" (1000 . "LEADER"))))))
  27.   (if ss
  28.     (progn (setq n     0
  29.                  sslen (sslength ss)
  30.            )
  31.            (princ
  32.              (strcat "\n共选择了:(" (itoa sslen) ")组座标注!")
  33.            )
  34.            (princ "\nfsxm座标标注资料提取中请稍候.......")
  35.            (repeat sslen
  36.              (setq en (ssname ss n))
  37.              (setq en_lst (cons en en_lst))
  38.              (setq n (1+ n))
  39.            )
  40.            (setq data
  41.                   (fsxm_dimpointid
  42.         
  43.                     '(progn
  44.                       (mapcar
  45.                        '(lambda        (leader)
  46.                           ; (getdimen)
  47.                           ; (setq point1 (vlax-curve-getPointAtParam LEADER 0))
  48.                           (list        (strcat ":" (fsxm-getdxf 5 leader_data))
  49.                                         ;引线句柄
  50.                                 (fsxm-getdxf 1 mtext1_data) ;上方文字1
  51.                                 (fsxm-getdxf 1 mtext2_data) ;下方文字2
  52.                                 ; (car point1) ;WCS:X
  53.                                 ; (cadr point1) ;WCS:Y
  54.                           )
  55.                         )
  56.                        (reverse en_lst)
  57.                       )
  58.                      )
  59.                   )
  60.            )
  61.            (setq data
  62.                   (vl-list*
  63.                     '("飞诗寻梦座标标注外挂系列之:座标资料输出到Excel")
  64.                     (list (strcat "输出时间:" (rtos (getvar "cdate") 2 6)))
  65.                     (list "句柄" "上方文字" "下方文字" "在WCS中X" "在WCS中Y")
  66.                     data
  67.                   )
  68.            )
  69.            (princ (strcat "\nfsxm座标标注资料提取完成"
  70.                           "\n开始写出资料到Excel请稍候......."
  71.                   )
  72.            )
  73.            (if (fsxm-write-list2->excel data)
  74.              (alert (princ "\n标注资料写出完成!\n请检视Excel"))
  75.              (alert (princ "\n未检测到正在运行的Excel文档!程式退出!"))
  76.            )
  77.     )
  78.   )
  79.   (princ)
  80. )这是fsxm-write-list2->excel 代码
 楼主| 发表于 2024-4-22 23:47 | 显示全部楼层
有没有大神帮忙实现一下?只需要实现类适于上图中的标注格式并且能导出xls,且导出到xls时每一组标注的上标注和下标注一一对应,其它的功能全部不需要
 楼主| 发表于 2024-4-23 00:06 | 显示全部楼层
飞雪神光 发表于 2024-4-22 23:05
用属性块 或者 编组 可以方便准确导出

具体怎么实现啊,搞了一个星期了 头都大了
发表于 2024-4-23 08:41 | 显示全部楼层
h2295 发表于 2024-4-23 00:06
具体怎么实现啊,搞了一个星期了 头都大了

属性块也是块的一种  但是比普通块获取数据方便 也方便修改数据就是引线是固定的 建块方法是属性文字和引线一起建块  使用编组也比较方便 可以通过一个图元得到整个组的图元 明经上有建组的代码
发表于 2024-4-23 09:26 | 显示全部楼层
联系我吧,给你写一个多重引线的版本,事情就简单了
发表于 2024-4-24 10:17 | 显示全部楼层
这是网蜂写的呀,可以正确导出坐标的。网蜂修修改改,写得很复杂。用leader+字段,就简单多了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 12:00 , Processed in 0.225802 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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