将标注复制到文字替代
大家好,我在谷歌上搜索了很多,想找到解决我问题的方法。到目前为止,这个地方看起来是最有希望找到安的地方。
我已经从Solidworks中导出了一个具有真实三维尺寸的dwg图形到Autocad图形,其中包括许多尺寸。我的目的是对尺寸线进行一些修正,然后将其交付给客户。当我移动尺寸线时,尺寸将更改为从Autocad测量的真实尺寸,而不是导入的三维尺寸。我认为我必须将导入的维度复制到文本覆盖,然后修复维度。
手动将工作复制到文本覆盖需要很长时间,所以我使用了一点lisp来帮助我,但它没有按我想要的方式工作。此lisp执行此操作,并将尺寸复制到文字替代,但尺寸错误。它是autocad从图片测量的尺寸,而不是导入的三维(交叉测量)尺寸。
我以前从未做过lisp,所以一定有更好的方法(而且确实可行),也许有一种方法可以从图片中选择所有度量值,而不是逐个选择。
(定义c:dimchange()
(setq newdim(entsel“\n选择要更改的维度:”))
(setq newdimvalue“”)
(命令“dimedit”“n”newdimvalue newdim“”)
(普林斯)
)
拼命寻找解决方案
米凯特 嗨,迈克,欢迎来到CADTutor。
我只是想澄清一下,
您在AutoCAD中有一个尺寸,需要取消尺寸替代?
您希望标注显示什么,因为取消标注替代只会将标注设置为ACAD测量的距离(我相信您已经知道了)。
希望我能帮忙
干杯
李 你好
也许我不够具体。尺寸正好在导出的图形中。如果我尝试移动尺寸线以获得Solidworks中的更多“更好的布局”,则测量值将变为Autocad在二维Autocad中测量的真实值。其目的是将此真实原始尺寸值复制到文字替代,然后能够修复尺寸的放置。
如果这次我没有把自己说清楚,也许我会尝试贴一张照片。。。
米凯特 如果我理解正确
;;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) 我可能有点模糊,但为什么真正的AutoCAD标注“错误”?
难道不仅仅是更容易缩放整个事物并允许“自然”维度存在,还是更容易改变dimstyle中维度的比例?
这也让我困惑 你好
很高兴注意到问题真的在这里得到了解答。
尺寸在三维空间中是正确的,直线也在z方向。从Solidworks导出的dwg图片不是三维图片,而是二维图片,Autocad提供的尺寸是投影尺寸。它在2D中是正确的尺寸,但它错过了到z轴的过渡。
我必须将检查副本“分发”到实际工作完成的工作现场:)
明天上班时我会试试。
我从来没有亲自做过这件事——非常感谢。
米凯特 只是出于兴趣,“展平”命令(express)有用吗? 这就是你想要的吗,
(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 "")
)
如果它给你带来了这些问题,为什么要将其作为2D导入ACAD?你不能导出为3D并省去麻烦吗?
页:
[1]
2