Raje 发表于 2022-7-5 15:46:24

将尺寸添加到矩形

大家好。。。。
 
我有两个物体。一个是矩形,另一个是交叉线。对于大量的矩形,我用手工标注。
 
尺寸到矩形角的距离基于“固定长度尺寸界线”长度。在我的示例文件中,使用长度是1’-1”。因此,维度到矩形点的距离是1’-1”。请看一下我的样本文件。
 
因此,请帮助使用任何代码或宏来最小化此过程,如选择所有矩形、交叉线和向所有矩形添加维度。
 
提前谢谢你。。。
快乐的编码。。

示例(1)。图纸

ronjonp 发表于 2022-7-5 15:55:28

你试过QDIM吗?

Raje 发表于 2022-7-5 15:59:31

Helo ronjonp,
谢谢你回复我的帖子。我也试过QDIM。不间断地获得整个尺寸。是否可以在选择对象的帮助下通过单击进行自动调暗?
 
非常感谢。

BIGAL 发表于 2022-7-5 16:01:44

一些想法选择水平线,这得到了所有矩形以及交叉和垂直DIM。一次拾取垂直线1并进行水平运动。我有一些东西将自动调暗所有包括差距。
 
可能更简单的方法是在每个1和维度上绘制一条与拖曳线角度匹配的拖曳线,因此只需要一个例程,而不是计算水平和垂直方向。稍等片刻,选择2分。
 
我会想一想。

Raje 发表于 2022-7-5 16:09:48

谢谢你回复Bigal。。。正在寻找自动lisp。
非常感谢。

Raje 发表于 2022-7-5 16:12:17

大家好,各位大师,
在这里,我几乎无法通过搜索谷歌获得自动尺寸代码。。请按要求样式执行。。

(defun C:AD ( / *error* a acdoc b c d dim e fd ht i o p1 p2 p3 pc pm rad sd space ss u opt isLine)
(setq acDoc (vla-get-activedocument (vlax-get-acad-object))
       space (vlax-get acDoc (if (= (getvar 'cvport) 1) 'paperspase 'modelspace))
       dim (getvar 'dimstyle)
       ht(* 1.0 (getvar 'dimtxt) (if (= 0 (getvar 'dimanno)) (getvar 'dimscale) (/ 1.0 (getvar 'cannoscalevalue))))
       )
(vla-startundomark acDoc)

(defun *error* (msg)
   (and
   msg
   (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*BREAK*"))
   (princ (strcat "\nADError: " msg))
   )
   (vla-endundomark acdoc)
   (princ)
   )

(setq opt (mapcar
             '(lambda (a b)
                (cond
                  ((getdictvar "AD_otions" a))
                  ((setdictvar "AD_otions" a b))
                  )
                )
             '("Linear" "Arc")
             '("b0" "c0")
             )
       )

(initget "Options")
(if
   (eq (getkword "\nPress enter to continue or : ") "Options")
   (setq opt (AD_options opt))
   )

(if
   (setq ss (ssget '((0 . "LWPOLYLINE,LINE,ARC"))))
   (repeat (setq i (sslength ss))
   (setq e (ssname ss (setq i (1- i)))
         o (vlax-ename->vla-object e)
         a (vlax-curve-getstartparam e)
         c (vlax-curve-getendparam   e)
         b nil
         isLine (wcmatch (vla-get-Objectname o) "AcDbLine,AcDbArc")
         )
   (while (<= (setq b (if isLine (if b (1+ b) c) (1+ a))) c)
       (setq p1 (vlax-curve-getpointatparam e a)
             p2 (vlax-curve-getpointatparam e b)
             u(angle p1 p2)
             pm (vlax-curve-getpointatparam e (/ (+ a b) 2.0))
             sd (vlax-curve-getsecondderive (/ (+ a b) 2.0))
             rad (distance '(0 0 0) sd)
             d(cond (isLine) ((not (minusp (vla-getbulge o a)))))
             pc (mapcar (if d '+ '-) pm sd)
             p3 (if
                  (or (equal rad 0.0 1e- (eq (cadr opt) "c2"))
                  (if
                  (eq (car opt) "b0")
                  (polar pm (+ (atan (/ (sin u) (cos u))) (/ pi 2.0)) ht)
                  (polar pm (- (atan (/ (sin u) (cos u))) (/ pi 2.0)) (* 1.75 ht))
                  )
                  (if
                  (eq (cadr opt) "c0")
                  (polar pm (angle pm pc) (if (<= 1e-4 (angle pc pm) pi) (* 1.75 ht) ht))
                  (polar pm (angle pc pm) (if (<= 1e-4 (angle pc pm) pi) ht (* 1.75 ht)))
                  )
                )
            )
       (if
         (equal rad 0.0 1e-
         (vla-adddimaligned space (vlax-3d-point p1) (vlax-3d-point p2) (vlax-3d-point p3))
         (vla-adddimarc space (vlax-3d-point pc) (vlax-3d-point p1) (vlax-3d-point p2) (vlax-3d-point p3))
         )
       (setq a (1+ a))
       )
   )
   )
(vla-endundomark acdoc)
(princ)
)

(defun AD_options (old / a1 a2 b1 b2 dcl dcl_id file r)
(setq
   a1 (car old)
   a2 (cadr old)
   dcl (open (setq file (vl-filename-mktemp "AD" (getvar 'dwgprefix) ".dcl")) "w")
)
(write-line
   "AD: dialog { label = \"Dimension Polyline Options\" ;
   : boxed_radio_column { label = \"Linear dimension position\" ; key = \"a1\";
   : radio_button { label = \"Above line\" ; key = \"b0\";}
   : radio_button { label = \"Below line\" ; key = \"b1\";}}
   : boxed_radio_column { label = \"Arc dimension position\" ; key = \"a2\";
   : radio_button { label = \"Inside arc\" ; key = \"c0\";}
   : radio_button { label = \"Outside arc\" ; key = \"c1\";}
   : radio_button { label = \"As for lines\" ; key = \"c2\";}}
   ok_cancel ;}"
   dcl)
(close dcl)
(if
   (< 0 (setq dcl_id (load_dialog file)))
   (if
   (new_dialog "AD" dcl_id)
   (progn
       (action_tile "a1" "(setq b1 $value)")
       (action_tile "a2" "(setq b2 $value)")
       (set_tile "a1" (setq b1 a1))
       (set_tile "a2" (setq b2 a2))
       (setq r (start_dialog))
       (unload_dialog dcl_id)
       )
   )
   )
(if (findfile file) (vl-file-delete file))
(if
   (= r 1)
   (mapcar 'setdictvar
   '("AD_otions" "AD_otions")
   '("Linear" "Arc")
   (list b1 b2)
   )
   (list a1 a2)
)
)
   
(defun getdictvar (dict var / dict_ename)
(if
   (setq dict_ename (cdr (assoc -1 (dictsearch (namedobjdict) dict))))
   (cdr (assoc 1 (dictsearch dict_ename var)))
)
)

(defun setdictvar (dict var val / dict_name record)
(or
   (setq dict_ename (cdr (assoc -1 (dictsearch (namedobjdict) dict))))
   (setq dict_ename (dictadd (namedobjdict) dict (entmakex '((0 . "DICTIONARY") (100 . "AcDbDictionary")))))
   )
(if
   (setq record (dictsearch dict_ename var))
   (entmod (subst (cons 1 val) (assoc 1 record) record))
   (dictadd
   dict_ename
   var
   (entmakex
       (list
         '(0 . "DICTIONARYVAR")
         '(100 . "DictionaryVariables")
         '(280 . 0)
         (cons 1 val)
       )
   )
   )
)
val
)

BIGAL 发表于 2022-7-5 16:18:57

Helo BIGAL先生:),
你几乎完成了。。。非常感谢您准备:)。。。我可以请求一些小的调整吗?
对于选择方法,一次选择所有水平线和垂直线(“交叉线”层线),以生成可能的尺寸?
 
非常感谢。

Raje 发表于 2022-7-5 16:22:25

我修改了代码,添加了一段时间,这样你可以继续拾取线条,dims将保持不变,还修复了一个捕捉问题。
 
如果你有数百个,那么需要第二个选择集来进行线条和第二次重复,开始进入“不再自由”。

BIGAL 发表于 2022-7-5 16:28:00

尊敬的BIGAL:,
感谢您的更新。。有些时候,在选择一些不产生尺寸的直线和矩形后,请修复。
你能提供一种从一行到多行的选择方法吗。。我有很多台词。。有时我有很多台词。。如果选择方法为同时选择多行,则可能会有所帮助。
 
非常感谢。

Raje 发表于 2022-7-5 16:31:57

1如果矩形是直线,则在检查PLINE时将不起作用。
 
2全选,事情就这样发生了,正如我暗示的,现在轮到你看这条线了

; dim a rectang via a vertical or hor line
; by Alan H Dec 2017

(defun c:dimrec ( / lobj pt1 pt2 pt4 pt5 pt6 maxpt minpt maxpoint minpoint ss ent)
(SETQ ANGBASEE (GETVAR 'ANGBASE))
(setvar 'angbase 0.0)
(setq oldsnap (getvar 'osmode))
(setvar 'osmode 0)
(while (/=(setq ent (entsel "\nPick Line object")) nil)
(setq lobj (vlax-ename->vla-object (car ent)))

(setq pt1 (vlax-safearray->list (vlax-variant-value (vla-get-startpoint lobj))))
(setq pt2 (vlax-safearray->list (vlax-variant-value (vla-get-endpoint lobj))))
(setq ang (angle pt1 pt2))
(cond
((/= ang 0.0)(setq vert "F"))
((= ang 0.0)(setq vert "T"))
((= ang 180.0)(setq vert "T"))
((= ang pi)(setq vert "T"))
)

(setq ss (ssget "F"(list pt1 pt2)))

(repeat (setq x (sslength ss))
(setq obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
(if (= (vla-get-ObjectName obj) "AcDbPolyline")
(progn
(vla-GetBoundingBox obj 'minpoint 'maxpoint)
(setq minpt (vlax-safearray->listminpoint))
(setq maxpt (vlax-safearray->listmaxpoint))
(if (= vert "F")
(progn
(setq pt4 (list (car pt1)(cadr maxpt)))
(setq pt5 (list (car minpt)(cadr maxpt)))
(setq pt6 (list(car maxpt) (+ 10 (cadr maxpt))))
)
(progn
(setq pt4 (list (car maxpt)(cadr pt1)))
(setq pt5 (list (car maxpt)(cadr minpt)))
(setq pt6 (list (+ 10 (car maxpt)) (cadr maxpt)))
)
)
(command "dimlinear"maxpt pt4 pt6 )
(command "dimlinear"pt4 pt5 pt6 )
)
(princ "Line Found")
)
)
)
(setvar 'osmode oldsnap)
(setvar 'angbase angbasee)
)
 
试试看,当你陷入困境时,我们会帮助你的。
页: [1] 2
查看完整版本: 将尺寸添加到矩形