zm880928 发表于 2022-7-13 17:15:00

帮忙修改下这个插件

;zddw    框选最大外形标注外标注
;zddn    框选最大外形标注内标注

(defun C:6(/ col mn mode pt1 pt1-2 pt2 pt2-2)
      
      (setq mn (zdwkgj (ssget)))
      (setq pt1 (car mn))
      (setq pt2 (cadr mn))
      (setq pt1-2 (list (car pt2) (cadr pt1) 0.0))
      (setq pt2-2 (list (car pt1) (cadr pt2) 0.0))
      
      (setq mode (getvar "OSMODE"))
      (setvar "OSMODE" 0)
      
      (command "DIMLINEAR" pt1 pt2-2 "@ -2,0")
      
      (command "DIMLINEAR" pt2 pt2-2 "@ 0,2")
      
      (setvar "OSMODE" mode)
      
)


(defun C:zddn(/ col mn mode pt1 pt1-2 pt2 pt2-2)

      (setq mn (zdwkgj (ssget)))
      (setq pt1 (car mn))
      (setq pt2 (cadr mn))
      (setq pt1-2 (list (car pt2) (cadr pt1) 0.0))
      (setq pt2-2 (list (car pt1) (cadr pt2) 0.0))

      (setq mode (getvar "OSMODE"))
      (setvar "OSMODE" 0)

      (command "DIMLINEAR" pt1 pt2-2 "@ 100,0.3")

      (command "DIMLINEAR" pt2 pt2-2 "@ 0,-100")

      (setvar "OSMODE" mode)

)

(defun REC4d(xzj / fourxy mn one_x one_y onexy pt1 pt2 threexy twoxy)
       
        (setq mn (zdwkgj xzj))
        (setq pt1 (car mn))
        (setq pt2 (cadr mn))
       
        (setq one_x (+ (CAR PT1) (/ (- (car pt2) (CAR PT1)) 2)))
        (setq one_y (+ (CADR PT1) (/ (- (caDr pt2) (CADR PT1)) 2)))
       
        (setq onexy (list one_x (cadr pt1) 0.0))
        (setq twoxy (list one_x (cadr pt2) 0.0))
       
        (setq threexy (list (car pt1) one_y 0.0))
        (setq fourxy (list (car pt2) one_y 0.0))
       
        (fy_makeredline onexy twoxy)
        (fy_makeredline threexy fourxy)
       
)



(defun fy_makeredline(pt1 pt2)          ;生成一条redline   ;参数:pt1:起点,pt2:终点,均为三维点,即(x y z)
(entmakex (list '(0 . "line") '(62 . 1) (cons 10 pt1) (cons 11 pt2)))
; entmakex 创建一个新对象或图元,赋给它一个句柄和图元名(但不指定所有者),并返回新图元的名称
        ;图元定义数据表,其格式与 entget 函数所返回表的格式相似。elist 参数必须包含创建图元的全部必要数据。
        ;如果省略了任何一个必须的定义数据,该函数就会返回 nil 并拒绝创建该图元。如果省略了可选的定义数据(如图层),
        ; entmakex 使用缺省值。
;cons 向表的头部添加一个元素,或构造一个点对
)

(defun zdwkgj(ss / i m n o)
                       

      (repeat (setq i (sslength ss))
      (if
          (and
            (setq o (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
            (vlax-method-applicable-p o 'getboundingbox)
            (not
            (vl-catch-all-error-p
                (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))
            )
            )
          )
         (setq m (cons (vlax-safearray->list a) m)
               n (cons (vlax-safearray->list b) n)
         )
      )
      )
      (if (and m n)
      (mapcar '(lambda (a b) (apply 'mapcar (cons a b)))
                '(min max)
                                       
                (list m n)
      )
      )
    )













wzg356 发表于 2022-7-13 17:15:01

本帖最后由 wzg356 于 2022-7-13 21:56 编辑

只是这样? 你可以自己试着改的 见图@ -2,0 表示尺寸线偏移距离dx dy
(defun C:z6(/ col mn mode pt1 pt1-2 pt2 pt2-2)      
      (setq mn (zdwkgj (ssget)))
      (setq pt1 (car mn))
      (setq pt2 (cadr mn))
      (setq pt1-2 (list (car pt2) (cadr pt1) 0.0))
      (setq pt2-2 (list (car pt1) (cadr pt2) 0.0))
      
      (setq mode (getvar "OSMODE"))
      (setvar "OSMODE" 0)
      
      ;(command "DIMLINEAR" pt1 pt2-2 "@ -2,0")
      (command "DIMLINEAR" pt1-2 pt2 "@ 2,0")
      
      (command "DIMLINEAR" pt2 pt2-2 "@ 0,2")
      
      (setvar "OSMODE" mode)
      
)

zm880928 发表于 2022-7-13 17:16:07

目前是左边的效果,我想要右边的效果

zm880928 发表于 2022-7-13 18:20:44

帖子,这么快沉了吗

zm880928 发表于 2022-7-14 10:50:40

wzg356 发表于 2022-7-13 17:15
只是这样? 你可以自己试着改的 见图@ -2,0 表示尺寸线偏移距离dx dy
(defun C:z6(/ col mn mode pt1...

谢谢
页: [1]
查看完整版本: 帮忙修改下这个插件