MikeT 发表于 2022-7-6 15:15:05

将标注复制到文字替代

大家好,
 
我在谷歌上搜索了很多,想找到解决我问题的方法。到目前为止,这个地方看起来是最有希望找到安的地方。
 
我已经从Solidworks中导出了一个具有真实三维尺寸的dwg图形到Autocad图形,其中包括许多尺寸。我的目的是对尺寸线进行一些修正,然后将其交付给客户。当我移动尺寸线时,尺寸将更改为从Autocad测量的真实尺寸,而不是导入的三维尺寸。我认为我必须将导入的维度复制到文本覆盖,然后修复维度。
 
手动将工作复制到文本覆盖需要很长时间,所以我使用了一点lisp来帮助我,但它没有按我想要的方式工作。此lisp执行此操作,并将尺寸复制到文字替代,但尺寸错误。它是autocad从图片测量的尺寸,而不是导入的三维(交叉测量)尺寸。
 
我以前从未做过lisp,所以一定有更好的方法(而且确实可行),也许有一种方法可以从图片中选择所有度量值,而不是逐个选择。
 
(定义c:dimchange()
(setq newdim(entsel“\n选择要更改的维度:”))
(setq newdimvalue“”)
(命令“dimedit”“n”newdimvalue newdim“”)
(普林斯)
)
 
拼命寻找解决方案
 
米凯特

Lee Mac 发表于 2022-7-6 15:21:14

嗨,迈克,欢迎来到CADTutor。
 
我只是想澄清一下,
 
您在AutoCAD中有一个尺寸,需要取消尺寸替代?
 
您希望标注显示什么,因为取消标注替代只会将标注设置为ACAD测量的距离(我相信您已经知道了)。
 
希望我能帮忙
 
干杯
 

MikeT 发表于 2022-7-6 15:26:54

你好
 
也许我不够具体。尺寸正好在导出的图形中。如果我尝试移动尺寸线以获得Solidworks中的更多“更好的布局”,则测量值将变为Autocad在二维Autocad中测量的真实值。其目的是将此真实原始尺寸值复制到文字替代,然后能够修复尺寸的放置。
 
如果这次我没有把自己说清楚,也许我会尝试贴一张照片。。。
 
米凯特

VVA 发表于 2022-7-6 15:30:13

如果我理解正确

;;Dim override
(defun c:dimo (/ COPYDIM CURLAY DELSET DIMLST
      DIMSET ERRCOUNT LAYCOL LENT
      NEXTENT OVTEXT *ERROR* ACTDOC
      OLDECHO)
;;; Vladimir Smirnov {Smirnoff} on dwg.ru
(defun *ERROR* (msg)
   (setvar "CMDECHO" oldEcho)
   ); end of error

(vl-load-com)
(setq oldEcho(getvar "CMDECHO")
actDoc(vla-get-ActiveDocument
              (vlax-get-acad-object))
layCol(vla-get-Layers actDoc)
); end setq
(setvar "CMDECHO" 0)
(if
   (setq dimSet
   (ssget '((0 . "DIMENSION"))))
   (progn
   (setq dimLst
   (mapcar 'vlax-ename->vla-object
                   (vl-remove-if 'listp
                  (mapcar 'cadr(ssnamex dimSet))))
    errCount 0
    ); end setq
   (vla-StartUndoMark actDoc)
   (foreach dim dimLst
(setq curLay(vla-get-Layer dim))
(if
(/= :vlax-true
      (vla-get-Lock(Col_Item_Find layCol curLay)))
(progn
(setq lEnt(entlast)
      delSet(ssadd)
      copyDim(vla-Copy dim)
      ); end setq
(command "_.Explode"(entlast))
(setq nextEnt(entnext lEnt))
(while nextEnt
(ssadd nextEnt delSet)
(if
    (member
      (cdr(assoc 0(entget nextEnt)))
      '("TEXT" "MTEXT")); end member
    (setq ovText
           (cdr(assoc 1(entget nextEnt))))
    ); end if
(command "_.erase" nextEnt "")
(setq nextEnt(entnext nextEnt))
    ); end whlie
(vla-put-TextOverride dim ovText)
(vla-put-Color dim 22)
); end progn
(setq errCount(1+ errCount))
); end if
); end foreach
   (if(/= 0 errCount)
(princ
(strcat "\n"
          (itoa errCount)" were on locked layer!"))
); end if
   (vla-EndUndoMark actDoc)
   ); end progn
   ); end if
(setvar "CMDECHO" oldEcho)
(princ)
); end of c:dimr

(defun Col_Item_Find (Collection Item / result)
(if
   (not
   (vl-catch-all-error-p
(setq result
       (vl-catch-all-apply 'vla-item
       (list Collection Item)))))
   result
   ); end if
); end of Col_Item_Find
;;; Dim restore
(defun c:dimr (/ COPYDIM CURLAY DELSET DIMLST
      DIMSET ERRCOUNT LAYCOL LENT
      NEXTENT OVTEXT *ERROR* ACTDOC
      OLDECHO)
;;; Vladimir Smirnov {Smirnoff} on dwg.ru
(defun *ERROR* (msg)
   (setvar "CMDECHO" oldEcho)
   ); end of error

(vl-load-com)
(setq oldEcho(getvar "CMDECHO")
actDoc(vla-get-ActiveDocument
              (vlax-get-acad-object))
layCol(vla-get-Layers actDoc)
); end setq
(setvar "CMDECHO" 0)
(if
   (setq dimSet
   (ssget '((0 . "DIMENSION"))))
   (progn
   (setq dimLst
   (mapcar 'vlax-ename->vla-object
                   (vl-remove-if 'listp
                  (mapcar 'cadr(ssnamex dimSet))))
    errCount 0
    ); end setq
   (vla-StartUndoMark actDoc)
   (foreach dim dimLst
(setq curLay(vla-get-Layer dim))
(if
(/= :vlax-true
      (vla-get-Lock(Col_Item_Find layCol curLay)))
(progn
(vla-put-TextOverride dim "<>")
(vla-put-Color dim 82)
); end progn
(setq errCount(1+ errCount))
); end if
); end foreach
   (if(/= 0 errCount)
(princ
(strcat "\n"
          (itoa errCount)" were on locked layer!"))
); end if
   (vla-EndUndoMark actDoc)
   ); end progn
   ); end if
(setvar "CMDECHO" oldEcho)
(princ)
)
(princ "\nType Dimo to override and Dimr to restore")

尺寸的颜色在这些行中设置
(vla-put-Color dim 22)
(vla-put-Color dim 82)

Strix 发表于 2022-7-6 15:37:41

我可能有点模糊,但为什么真正的AutoCAD标注“错误”?
 
难道不仅仅是更容易缩放整个事物并允许“自然”维度存在,还是更容易改变dimstyle中维度的比例?

Lee Mac 发表于 2022-7-6 15:42:54

 
这也让我困惑

MikeT 发表于 2022-7-6 15:46:25

你好
 
很高兴注意到问题真的在这里得到了解答。
 
尺寸在三维空间中是正确的,直线也在z方向。从Solidworks导出的dwg图片不是三维图片,而是二维图片,Autocad提供的尺寸是投影尺寸。它在2D中是正确的尺寸,但它错过了到z轴的过渡。
 
我必须将检查副本“分发”到实际工作完成的工作现场:)
 
明天上班时我会试试。
 
我从来没有亲自做过这件事——非常感谢。
 
米凯特

Lee Mac 发表于 2022-7-6 15:55:04

只是出于兴趣,“展平”命令(express)有用吗?

flowerrobot 发表于 2022-7-6 15:56:49

这就是你想要的吗,

(defun C:ov ( / ss ed dm dm1 )
(setq ss (ssget))
(setq ed (entget (setq e (entlast))))
(setq dm (cdr (assoc 42 ed)));get dim value
(setq dm1 (rtos dm 2 0))
(command "dim1" "new" dm1 ss "")
)

Strix 发表于 2022-7-6 16:01:49

如果它给你带来了这些问题,为什么要将其作为2D导入ACAD?你不能导出为3D并省去麻烦吗?
页: [1] 2
查看完整版本: 将标注复制到文字替代