乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 120|回复: 12

[编程交流] 将标注复制到文字替代

[复制链接]

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 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“”)
(普林斯)
)
 
拼命寻找解决方案
 
米凯特
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:21:14 | 显示全部楼层
嗨,迈克,欢迎来到CADTutor。
 
我只是想澄清一下,
 
您在AutoCAD中有一个尺寸,需要取消尺寸替代?
 
您希望标注显示什么,因为取消标注替代只会将标注设置为ACAD测量的距离(我相信您已经知道了)。
 
希望我能帮忙
 
干杯
 
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

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

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-6 15:30:13 | 显示全部楼层
如果我理解正确
  1. ;;Dim override
  2. (defun c:dimo (/ COPYDIM CURLAY DELSET DIMLST
  3.       DIMSET ERRCOUNT LAYCOL LENT
  4.       NEXTENT OVTEXT *ERROR* ACTDOC
  5.       OLDECHO)
  6. ;;; Vladimir Smirnov {Smirnoff} on dwg.ru
  7. (defun *ERROR* (msg)
  8.    (setvar "CMDECHO" oldEcho)
  9.    ); end of error
  10. (vl-load-com)
  11. (setq oldEcho(getvar "CMDECHO")
  12. actDoc(vla-get-ActiveDocument
  13.               (vlax-get-acad-object))
  14. layCol(vla-get-Layers actDoc)
  15. ); end setq
  16. (setvar "CMDECHO" 0)
  17. (if
  18.    (setq dimSet
  19.    (ssget '((0 . "DIMENSION"))))
  20.    (progn
  21.      (setq dimLst
  22.      (mapcar 'vlax-ename->vla-object
  23.                    (vl-remove-if 'listp
  24.                     (mapcar 'cadr(ssnamex dimSet))))
  25.     errCount 0
  26.     ); end setq
  27.      (vla-StartUndoMark actDoc)
  28.      (foreach dim dimLst
  29. (setq curLay(vla-get-Layer dim))
  30. (if
  31.   (/= :vlax-true
  32.       (vla-get-Lock(Col_Item_Find layCol curLay)))
  33.   (progn
  34. (setq lEnt(entlast)
  35.       delSet(ssadd)
  36.       copyDim(vla-Copy dim)
  37.       ); end setq
  38. (command "_.Explode"(entlast))
  39. (setq nextEnt(entnext lEnt))
  40. (while nextEnt
  41.   (ssadd nextEnt delSet)
  42.   (if
  43.     (member
  44.       (cdr(assoc 0(entget nextEnt)))
  45.       '("TEXT" "MTEXT")); end member
  46.     (setq ovText
  47.            (cdr(assoc 1(entget nextEnt))))
  48.     ); end if
  49.   (command "_.erase" nextEnt "")
  50.   (setq nextEnt(entnext nextEnt))
  51.     ); end whlie
  52. (vla-put-TextOverride dim ovText)
  53. (vla-put-Color dim 22)
  54. ); end progn
  55.   (setq errCount(1+ errCount))
  56.   ); end if
  57. ); end foreach
  58.      (if(/= 0 errCount)
  59. (princ
  60.   (strcat "\n"
  61.           (itoa errCount)" were on locked layer!"))
  62. ); end if
  63.      (vla-EndUndoMark actDoc)
  64.      ); end progn
  65.    ); end if
  66. (setvar "CMDECHO" oldEcho)
  67. (princ)
  68. ); end of c:dimr
  69. (defun Col_Item_Find (Collection Item / result)
  70. (if
  71.    (not
  72.      (vl-catch-all-error-p  
  73. (setq result
  74.        (vl-catch-all-apply 'vla-item
  75.          (list Collection Item)))))
  76.    result
  77.    ); end if
  78. ); end of Col_Item_Find
  79. ;;; Dim restore
  80. (defun c:dimr (/ COPYDIM CURLAY DELSET DIMLST
  81.       DIMSET ERRCOUNT LAYCOL LENT
  82.       NEXTENT OVTEXT *ERROR* ACTDOC
  83.       OLDECHO)
  84. ;;; Vladimir Smirnov {Smirnoff} on dwg.ru
  85. (defun *ERROR* (msg)
  86.    (setvar "CMDECHO" oldEcho)
  87.    ); end of error
  88. (vl-load-com)
  89. (setq oldEcho(getvar "CMDECHO")
  90. actDoc(vla-get-ActiveDocument
  91.               (vlax-get-acad-object))
  92. layCol(vla-get-Layers actDoc)
  93. ); end setq
  94. (setvar "CMDECHO" 0)
  95. (if
  96.    (setq dimSet
  97.    (ssget '((0 . "DIMENSION"))))
  98.    (progn
  99.      (setq dimLst
  100.      (mapcar 'vlax-ename->vla-object
  101.                    (vl-remove-if 'listp
  102.                     (mapcar 'cadr(ssnamex dimSet))))
  103.     errCount 0
  104.     ); end setq
  105.      (vla-StartUndoMark actDoc)
  106.      (foreach dim dimLst
  107. (setq curLay(vla-get-Layer dim))
  108. (if
  109.   (/= :vlax-true
  110.       (vla-get-Lock(Col_Item_Find layCol curLay)))
  111.   (progn
  112. (vla-put-TextOverride dim "<>")
  113. (vla-put-Color dim 82)
  114. ); end progn
  115.   (setq errCount(1+ errCount))
  116.   ); end if
  117. ); end foreach
  118.      (if(/= 0 errCount)
  119. (princ
  120.   (strcat "\n"
  121.           (itoa errCount)" were on locked layer!"))
  122. ); end if
  123.      (vla-EndUndoMark actDoc)
  124.      ); end progn
  125.    ); end if
  126. (setvar "CMDECHO" oldEcho)
  127. (princ)
  128. )
  129. (princ "\nType Dimo to override and Dimr to restore")

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

使用道具 举报

1

主题

133

帖子

145

银币

初来乍到

Rank: 1

铜币
4
发表于 2022-7-6 15:37:41 | 显示全部楼层
我可能有点模糊,但为什么真正的AutoCAD标注“错误”?
 
难道不仅仅是更容易缩放整个事物并允许“自然”维度存在,还是更容易改变dimstyle中维度的比例?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:42:54 | 显示全部楼层
 
这也让我困惑
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:55:04 | 显示全部楼层
只是出于兴趣,“展平”命令(express)有用吗?
回复

使用道具 举报

41

主题

301

帖子

265

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
209
发表于 2022-7-6 15:56:49 | 显示全部楼层
这就是你想要的吗,
  1. (defun C:ov ( / ss ed dm dm1 )
  2. (setq ss (ssget))
  3. (setq ed (entget (setq e (entlast))))
  4. (setq dm (cdr (assoc 42 ed)));get dim value
  5. (setq dm1 (rtos dm 2 0))
  6. (command "dim1" "new" dm1 ss "")
  7. )
回复

使用道具 举报

1

主题

133

帖子

145

银币

初来乍到

Rank: 1

铜币
4
发表于 2022-7-6 16:01:49 | 显示全部楼层
如果它给你带来了这些问题,为什么要将其作为2D导入ACAD?你不能导出为3D并省去麻烦吗?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 19:07 , Processed in 4.564678 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表