找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 183|回复: 0

[原创]带反应器的圆圈序号标注工具

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-3-30 12:34:52 | 显示全部楼层 |阅读模式
  1. ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
  2. ;;                                                                               ;;
  3. ;;  AUTHOR:  lihuaili, October 2009.   VERSION:   v 1.0                          ;;
  4. ;;...............................................................................;;
  5. ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
  6. (vl-load-com)
  7.       
  8. (setq *ActiveDocument*
  9.        (vla-get-ActiveDocument
  10.          (vlax-get-acad-object)
  11.        ) ;采用 end of vla-get-ActiveDocument
  12. ) ;采用 end of setq
  13. (setq *ModelSpace*
  14.        (vla-get-ModelSpace
  15.          *ActiveDocument*
  16.        ) ;采用 end of vla-get-ModelSpace
  17. ) ;采用 end of setq
  18. (setq *AcadBlock*
  19.        (vla-get-blocks
  20.          *ActiveDocument*
  21.        ) ;采用 end of vla-get-blocks
  22. ) ;采用 end of setq
  23. ;;;Creat Num block with attribute
  24. (defun Creat采用Num采用block (TextHight    radius          /
  25.                         cirPnt             blockObj          circleObj
  26.                         attributeObj
  27.                        )
  28.   (setq cirPnt (list radius radius 0.0))
  29.   (setq        blockObj     (vla-add *AcadBlock*
  30.                               (vlax-3d-point cirPnt)
  31.                               "num"
  32.                      )
  33.         circleObj    (vla-AddCircle
  34.                        blockObj
  35.                        (vlax-3d-point cirPnt)
  36.                        radius
  37.                      )
  38.         attributeObj
  39.                      (vla-AddAttribute
  40.                        blockObj
  41.                        TextHight
  42.                        acAttributeModeVerify
  43.                        ""
  44.                        (vlax-3d-point cirPnt)
  45.                        "nums"
  46.                        ""
  47.                      )
  48.   )
  49.   (vla-put-Alignment attributeObj acAlignmentMiddle)
  50.   (if (> (setq v (distof (substr (getvar "acadver") 1 3))) 16.2)
  51.     (vla-put-TextAlignmentPoint
  52.       attributeObj
  53.       (vlax-3d-point cirPnt)
  54.     )
  55.   )
  56.   (vla-Update attributeObj)
  57. )
  58. (defun draw采用leader (pt1 pt2 / leaderobj) ;draw leader
  59.   (command "leader" pt1 pt2 "f" "st" "f" "a" "" "" "n")
  60.   (setq leaderobj (vlax-ename->vla-object (entlast)))
  61.   (vla-put-ArrowheadType leaderobj acArrowDotSmall)
  62.   (vla-Update leaderobj)
  63.   leaderobj
  64. )
  65. ;;;set Attributes
  66. (defun SetAtts (Obj Lst / AttVal)
  67.   (mapcar
  68.     '(lambda (Att)
  69.        (if (setq AttVal (cdr (assoc (vla-get-TagString Att) Lst)))
  70.          (vla-put-TextString Att AttVal)
  71.        )
  72.      )
  73.     (vlax-invoke Obj "GetAttributes")
  74.   )
  75.   (vla-update Obj)
  76.   (princ)
  77. )
  78. ;;;Get numbers of block reference Object  in ModelSpace
  79. (defun Get采用blkRef采用Num (blkRef采用name / count objEnt)
  80.   (setq count 0)
  81.   (vlax-for objEnt *ModelSpace*
  82.     (if        (equal (vla-get-ObjectName objEnt) "AcDbBlockReference")
  83.       (progn (if (equal (vla-get-Name objEnt) blkRef采用name)
  84.                (setq count (1+ count))
  85.              )
  86.       )
  87.     )
  88.   )
  89.   count
  90. )
  91. ;;;check if have "num" block exist
  92. (defun check采用num采用block (/)
  93.   (if (ssget "X"
  94.              '((0 . "INSERT")
  95.                (2 . "num")
  96.               )
  97.       )
  98.     T
  99.     nil
  100.   )
  101. )
  102. ;;;--------------------------------------------------------------------;
  103. ;;;       Function:  set-params-obj                                    ;
  104. ;;;                                                                    ;
  105. ;;;    Description:  This function sets the parameters required        ;
  106. ;;;                  to associate a dimension object               .   ;
  107. ;;;                                                                    ;
  108. ;;;      Arguments:                                                    ;
  109. ;;;      vla-blk采用bef = a valid vla blk采用bef object.                     ;
  110. ;;;      vla-leader = a valid vla leader object.                       ;
  111. ;;;                                                                    ;
  112. ;;; Returned Value:  coordinates to the leader object.                 ;
  113. ;;;                                                                    ;
  114. ;;;          Usage:                                                    ;
  115. ;;;              (set-params-obj                                       ;
  116. ;;;                 vla-blk采用bef  vla-leader                            ;
  117. ;;;               )                                                    ;
  118. ;;;--------------------------------------------------------------------;
  119. (defun set-params-obj
  120.        (vla-blk采用bef vla-leader / ins-pnt lead-pnt1 lead-pnt2 sca rad)
  121.   (if (and (= (type vla-blk采用bef) 'VLA-OBJECT)
  122.            (vlax-read-enabled-p vla-blk采用bef)
  123.       )
  124.     (progn
  125.       (setq ins-pnt (vla-get-InsertionPoint vla-blk采用bef))
  126.       (if (eq (type ins-pnt) 'VARIANT)
  127.         (if (> (vlax-variant-type ins-pnt) 8192)
  128.           (setq
  129.             ins-pnt (vlax-safearray->list (vlax-variant-value ins-pnt))
  130.           )
  131.         )
  132.       )
  133.       (setq sca                (vla-get-XScaleFactor vla-blk采用bef)
  134.             rad         (vlax-ldata-get vla-blk采用bef "radius")
  135.             lead-pnt1        (vlax-curve-getstartpoint vla-leader)
  136.             lead-pnt2        (polar ins-pnt (angle ins-pnt lead-pnt1) (* sca rad))
  137.             Coordinates        (append lead-pnt1 lead-pnt2)
  138.       )
  139.     )
  140.   )
  141. )
  142. ;;;--------------------------------------------------------------------;
  143. ;;;       Function:  UPDATE-PARAMETER-MDIM                             ;
  144. ;;;                                                                    ;
  145. ;;;    Description:  This function is responsible for updating a       ;
  146. ;;;                  vla-object's parameter.                           ;
  147. ;;;                                                                    ;
  148. ;;;      Arguments:                                                    ;
  149. ;;;         vla-obj = a valid vla object.                              ;
  150. ;;;        par-name = a parameter name.                                ;
  151. ;;;       par-value = a new parameter value                            ;
  152. ;;;                                                                    ;
  153. ;;; Returned Value:  A vla object.                                     ;
  154. ;;;                                                                    ;
  155. ;;;          Usage:                                                    ;
  156. ;;;              (update-parameter-mdim                                ;
  157. ;;;                 vla-obj  par-name par-value                        ;
  158. ;;;               )                                                    ;
  159. ;;;--------------------------------------------------------------------;
  160. (defun update-parameter-mdim (vla-obj par-name par-value)
  161.   (if (and (= (type vla-obj) 'VLA-OBJECT)
  162.            (vlax-write-enabled-p vla-obj)
  163.            (not (equal (vlax-get vla-obj par-name) par-value))
  164.       )
  165.     (vlax-put vla-obj par-name par-value)
  166.   )
  167. )
  168. ;;;--------------------------------------------------------------------;
  169. ;;;       Function:  UPDATE-LEADER                                     ;
  170. ;;;                                                                    ;
  171. ;;;    Description:  This function updates the "coordinate" property   ;
  172. ;;;                  for the leader object.                            ;
  173. ;;;                                                                    ;
  174. ;;;      Arguments:                                                    ;
  175. ;;;         notifier = a valid vla object.                             ;
  176. ;;;         obj-list = a list of vla object.                           ;
  177. ;;;                                                                    ;
  178. ;;; Returned Value:  An updated leader object.                         ;
  179. ;;;                                                                    ;
  180. ;;;          Usage:                                                    ;
  181. ;;;              (update-leader                                        ;
  182. ;;;                   notifier obj-list                                ;
  183. ;;;               )                                                    ;
  184. ;;;--------------------------------------------------------------------;
  185. (defun update-leader
  186.                      (notifier obj-list        / vla-blk采用bef vla-leader)
  187.   (setq        vla-blk采用bef (nth 0 obj-list)
  188.         vla-leader  (nth 1 obj-list)
  189.   )
  190.   (if (set-params-obj vla-blk采用bef vla-leader)
  191.     (update-parameter-mdim vla-leader "Coordinates" Coordinates)
  192.   )
  193. )
  194. ;;;--------------------------------------------------------------------;
  195. ;;;       Function:  reactor-leader采用blk采用bef                           ;
  196. ;;;                                                                    ;
  197. ;;;    Description:  This function will be called inside               ;
  198. ;;;                  :vlr-modified event.                              ;
  199. ;;;                                                                    ;
  200. ;;;                  Required Functions:                               ;
  201. ;;;                         update-leader-for-blk采用bef                  ;
  202. ;;;                                                                    ;
  203. ;;;      Arguments:                                                    ;
  204. ;;;        notifier = a valid vla object. Filled in by the calling     ;
  205. ;;;                   reactor.                                         ;
  206. ;;;         reactor = a valid vlr object reactor. Filled in by the     ;
  207. ;;;                   calling reactor.                                 ;
  208. ;;;        arg-list = argument list filled in by the calling reactor.  ;
  209. ;;;                   Filled in by the calling reactor.                ;
  210. ;;;                                                                    ;
  211. ;;; Returned Value:  A valid vla object.                        ;
  212. ;;;                                                                    ;
  213. ;;;          Usage:  Intended to be called from a reactor call back.   ;
  214. ;;;       (reactor-leader采用blk采用bef notifier reactor arg-list)          ;
  215. ;;;--------------------------------------------------------------------;
  216. (defun reactor-leader采用blk采用bef (notifier reactor arg-list)
  217.   (update-leader notifier (vlr-data reactor))
  218. )
  219. ;;;--------------------------------------------------------------------;
  220. ;;;                       main Function                                 ;
  221. ;;;--------------------------------------------------------------------;
  222. (defun c:draw采用numbers (/          vla-leader TextHight        radius
  223.                        sca          loop1             loop2        pt0
  224.                        vla-blkref count             count采用str        att采用lst
  225.                        vla-leader sp             source        Points
  226.                        reactor
  227.                       )
  228.   (setvar "CMDECHO" 0)
  229.   (setq        TextHight 5
  230.         radius 5
  231.         sca 1
  232.         loop1 T
  233.   )
  234.   (if (not (check采用num采用block))
  235.     (Creat采用Num采用block TextHight radius)
  236.   )
  237.   (while loop1
  238.     (if        (setq pt0
  239.                (getpoint
  240.                  "\n点取标注点(按右键或回车退出):"
  241.                )
  242.         )
  243.       (progn
  244.         (setq vla-blkref
  245.                          (vla-InsertBlock
  246.                            *ModelSpace*
  247.                            (vlax-3d-point pt0)
  248.                            "num"
  249.                            sca
  250.                            sca
  251.                            sca
  252.                            0
  253.                          )
  254.               count         (Get采用blkRef采用Num "num")
  255.               count采用str         (itoa count)
  256.               att采用lst         (list (cons '"nums" count采用str))
  257.               loop2         T
  258.         )
  259.         (SetAtts vla-blkref att采用lst)
  260.         (setq vla-leader (draw采用leader pt0 (polar pt0 0 0.001)))
  261.         (prompt "\n确定序号放置位置:")
  262.         (while loop2
  263.           (setq        sp     (grread T)
  264.                 source (car sp)
  265.                 sp     (cadr sp)
  266.           ) ;采用 end setq
  267.           (cond        ((= source 5)
  268.                  (vla-put-InsertionPoint vla-blkref (vlax-3d-point sp))
  269.                  (setq
  270.                    Points
  271.                     (vlax-safearray-fill
  272.                       (vlax-make-safearray
  273.                         vlax-vbdouble
  274.                         '(0 . 5)
  275.                       )
  276.                       (append pt0
  277.                               (polar sp (angle sp pt0) (* radius sca))
  278.                       )
  279.                     )
  280.                  )
  281.                  (if (> (distance sp pt0) (* radius sca))
  282.                    (vla-put-coordinates vla-leader Points)
  283.                  )
  284.                 )
  285.                 (t
  286.                  (progn        (setq loop2   nil
  287.                               obj-lst (list vla-blkref vla-leader)
  288.                         )
  289.                         (vlax-ldata-put vla-blkref "radius" radius)
  290.                         (function reactor-leader采用blk采用bef)
  291.                         (setq reactor
  292.                                (VLR-Object-reactor
  293.                                  obj-lst
  294.                                  obj-lst
  295.                                  '((:vlr-modified . reactor-leader采用blk采用bef))
  296.                                )
  297.                         )
  298.                  )
  299.                 )
  300.           )
  301.         )
  302.       )
  303.       (setq loop1 nil)
  304.     )
  305.   )
  306.   (princ)
  307. )
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 18:11 , Processed in 0.124672 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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