乐筑天下

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

[编程交流] 访问关闭的图形

[复制链接]

7

主题

12

帖子

5

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 22:37:06 | 显示全部楼层 |阅读模式
我有一个代码可以更改图形中的标注样式
从DimStyle1到Dimstyle2
 
如果dimstyle 2位于闭合图形上,是否可以从dimstyle1更改为dimstyle2。如果是这样,我应该对代码做什么更改。
 
  1. Public Class Class2
  2. <CommandMethod("changedimstyle")> _
  3. Public Sub ChangeDimStyle()
  4. Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  5. Dim db As Database = doc.Database
  6. Dim ed As Editor = doc.Editor
  7. Using trx As Transaction = db.TransactionManager.StartTransaction()
  8. Dim dimTbl As DimStyleTable = trx.GetObject(db.DimStyleTableId, OpenMode.ForRead)
  9. Dim dimDtr As DimStyleTableRecord = trx.GetObject(dimTbl("DimStyle1"), OpenMode.ForRead)
  10. Dim ids As ObjectIdCollection = dimDtr.GetPersistentReactorIds()
  11. For Each objId As ObjectId In ids
  12. If objId.ObjectClass.IsDerivedFrom(RXClass.GetClass(GetType(Dimension))) Then
  13. Dim dimen As Dimension = trx.GetObject(objId, OpenMode.ForWrite)
  14. dimen.DimensionStyleName = "DimStyle2"
  15. End If
  16. Next
  17. trx.Commit()
  18. End Using
  19. End Sub
  20. End Class
回复

使用道具 举报

6

主题

17

帖子

8

银币

初来乍到

Rank: 1

铜币
34
发表于 2022-7-6 23:20:29 | 显示全部楼层
我将向您展示如何处理图层、文本样式、块以及其他任何内容。当然,并不是下面的一切都是我的;我找到了其中的大部分,并根据需要进行了调整。肖特,我相信他是最初的作者,他似乎是在飞行中完成了所有这一切——我没有那么好/聪明。但是,我知道怎么做,那就是足智多谋!http://www.cadtutor.net/forum/archive/index.php/t-26666.html
 
首先,使用此功能可以利用AutoCAD打开自己文档的能力,或者类似的功能。如果我没记错的话,这个函数曾经测试过你运行的Acad版本是否在16及以下。因此,如果您使用的是AutoCAD 2000i或更高版本,则需要遵循上面的链接。这对我来说很有效,没有测试。
 
  1. Function GetAcDbxDoc() As Object
  2. Dim strAcadVersion As String
  3. With ThisDrawing.Application
  4.   strAcadVersion = Mid(.Version, 1, 2)
  5.   Set GetAcDbxDoc = .GetInterfaceObject("ObjectDBX.AxDbDocument." & strAcadVersion)
  6. End With
  7. End Function

 
接下来,您将使用下面的命令将要查找的任何对象复制到当前图形的数据库中。这一个恰好复制了一个特定的文本样式。
 
  1. Sub GetTextStyle(tStyl As String)
  2. Dim objStyl As AcadTextStyle
  3. Dim objStyls As AcadTextStyles
  4. Dim objArray(0) As Object
  5. Dim ACDbx As Object
  6. Set ACDbx = GetAcDbxDoc()
  7. ACDbx.Open blkFil
  8. 'blkFil is a Global variable I have set to a particular file in my arsenal
  9. 'just use whatever file name
  10. Set objStyls = ACDbx.TextStyles
  11. Set objStyl = objStyls.Item(tStyl)
  12. Set objArray(0) = objStyl
  13. ACDbx.CopyObjects objArray, ThisDrawing.TextStyles
  14. Set ACDbx = Nothing
  15. Set objStyls = Nothing
  16. Set objStyl = Nothing
  17. Set objArray(0) = Nothing
  18. End Sub

 
如果我没记错的话,这个sub最初是为复制块而写的,我不确定它是否适用于层等,但它确实适用。我认为需要记住的一件大事是,必须将对象放入数组中。只需更改上面的一些变量,就可以轻松实现dim样式。
 
一旦你有了昏暗的风格,就这样做:
 
  1. ThisDrawing.ActiveDimStyle = WhatEverDimStyle

 
希望这有助于并感谢肖特的智慧。
 
我忘了提一下,您应该进行测试,以确保您正在寻找的昏暗风格没有恰好出现在图纸中:
 
  1. Public Function TestStyle(tStyl As String) As Boolean
  2. Dim objStyl As AcadTextStyle
  3. Dim i As String
  4. For Each objStyl In ThisDrawing.TextStyles
  5. If objStyl.Name = tStyl Then
  6. i = "True"
  7. Else
  8. End If
  9. Next
  10. If i = "True" Then
  11. TestStyle = True
  12. Else
  13. TestStyle = False
  14. End If
  15. End Function

 
这是我写的,所以对我来说是的。。。。。
回复

使用道具 举报

0

主题

101

帖子

103

银币

限制会员

铜币
-2
发表于 2022-7-7 00:02:39 | 显示全部楼层
你们可以只使用数据库。ReadDwgFile将DIMSTYLETABLERRECORD添加到图形中,然后执行相同操作。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 05:58 , Processed in 1.567969 second(s), 58 queries .

© 2020-2025 乐筑天下

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