乐筑天下

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

重命名块 AUTOCAD DOTNET

[复制链接]

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-9-16 10:19:20 | 显示全部楼层 |阅读模式
大家好,
我需要重命名我绘图中的一些块。这就是为什么我在VB.net上写了下面的代码,用于一次重命名几个块。
但是当我在AutoCad 2011中启动我的命令时,我有一条消息“eDuplicateRecordName”。
有人能帮助解决这个问题吗?
欢迎所有建议。
提前谢谢。
Public Sub RenameBlockInModelSpace()
Dim zDoc As Document=Application.DocumentManager.MdiActiveDocument
Dim zDb As Database=zDoc.Database
Dim zEd As Editor=zDoc.Editor
Dim i As Intger=0
'Début de l'opéation
使用zTrans As Transaction=zDb.TransactionManager.StartTransaction()
'Ouverture de la TABLE des Block s enécreure
Dim zBlkTbl As BlockTable=zTrans.GetObject(zDb.BlockTableId,OpenMode.ForWrite)
'Ouverture des enrecstrements de la TABLE des Block s en讲座
Dim zBlkTblRec As BlockTableRecords=zTrans.GetObject(zBlkTbl(BlockTableRecord.ModelSpace),OpenMode.ForWrite)
Dim zBlkCl As RXClass=RXClass.GetClass(GetType(BlockAud))
Dim zBlkRefCol As ObjectIdCollection=zBlkTblRec.GetBlockReferenceIds(True, False)
对于每个zBlkTblRecId As ObjectId In zBlkTblRec'zBlkTblRec.GetBlockReferenceIds(True, False)'zBlkRefCol
尝试
如果zBlkTblRecId.ObjectClass=zBlkCl然后
Dim zBlkRef As BlockRef=TryCast(zTrans.GetObject(zBlkTblRecId,OpenMode.ForWrite, False), BlockRef)
zEd.WriteMessage(String.Format(vbLf+"Block:{0}--Id:{1}--Layer:{2}",zBlkRef.Name, zBlkDim MYmap As New IdMap
Dim newzBlkTblRec As BlockTableRecord=zBlkTblRec.DeepClone(zBlkTbl, MYmap, True)
'MsgBox(zBlkRef.Name)
newzBlkTblRec.Name="VU-10"
zBlkRef.BlockTableRecord=zBlkTbl.Add(newzBlkTblRec)
zTrans.AddNewlyCreatedDBObject(newzBlkTblRec, True)
结束如果
结束如果
捕获前作为系统异常
结束尝试
下一步
zEd.WriteMessage(String.Format(vbLf+"Total des块:{0}", i))
zTrans.Commit()
结束使用
结束子

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-9-16 11:02:34 | 显示全部楼层
您需要迭代 BlockTable 并检查 BlockTableRecords 名称,而不是尝试获取 BlockTableRecord 的块引用以获取模型空间。
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2015-9-16 11:12:03 | 显示全部楼层
谢谢杰夫H的快速回复。
请你能给我看一个例子。

提前感谢您。
回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-9-16 11:38:36 | 显示全部楼层
如果简单地重命名块是好的,只需打开块定义(BlockTableRecords)并重命名它。S'il s'agit bien de implement renommer des Block s, il suit d'ouvrir la définition de bloc(BlockTableRecord)et de la renommer.[命令方法("RENBLK")]。
公共无效测试()。
{。
文档文档=AcAp.DocumentManager.MdiActiveDocument;。
数据库db=doc.Database;。
编辑doc.Editor。

使用(事务tr=db.TransactionManager.StartTransaction())。
{。
//ouvrir la table des Block s en讲座。
BlockTable bt=(BlockTable)tr.GetObject(db.BlockTableId,OpenMode.ForRead);。
//vérifier si la table contient bien le blocàrenommer。
如果(bt.Has("BAT-10"))。
{。
//ouvrir la défintion du bloc enécreure。
BlockTableRecords btr=(BlockTableRecords)tr.GetObject(bt["BAT-10"],OpenMode.ForWrite);。
//Changer le nom du bloc。
btr.Name="VUU-10";。
}。
tr.Commit();。
}。
}。
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2015-9-17 08:40:50 | 显示全部楼层
您好,非常感谢您的快速回复。这一代码允许理解集团内部的分歧和对集团的影响。我做了一个小游戏,把我在一个游戏中玩的游戏和在一个游戏中玩的游戏进行比较。《法典》中没有一个新的名称来描述一个真正的集团,也没有一个新的名称来描述一个集团中的所有集团。两个集团在一个月前宣布了我的名字,并发布了一条消息:“教育复制记录名称”。
谢谢您的光临。


Public Sub RenameBlockInModelSpace()
Dim zDoc As Document = Application。document manager . MdiActiveDocument
Dim zDb As Database = zDoc。数据库
Dim zEd As Editor = zDoc。editor
Dim conStr As New oledb connection
' conStr = New oledb connection(" Provider = Microsoft。Jet . OLEDB.4.0数据源= Q:\ APPLICATION \ zccckcsacad \ DB \ zccckcsacad _ 2015 . udl ")' "数据源= ZCC3 \ SQLEXPRESSAttachDbFilename = J:\ DB \ zckcsacad _ 2015 _ SQL . MDF;集成安全性=True")
构造。ConnectionString = " File Name = Q:\ APPLICATION \ zckcsacad \ DB \ zckcsacad _ 2015 . udl "
conStr。Open()
如果构造。状态=连接状态。然后打开
Dim cmd As OleDbCommand = conStr。CreateCommand。CommandText = "SELECT rb_ID,rd_OLD_NAME,rd _ NEW _ NAME FROM table _ CONNECTOR _ BLOCK ORDER BY Rb _ ID "
Dim dR As oledb datareader = cmd。ExecuteReader
Dim I As Integer = 0
Dim nb blk As Integer = 0
' d but de l ' opération
使用zTrans As Transaction = zDb。transaction manager . start transaction()
尝试
同时dR . Read
Dim zBlkTbl As block table = zTrans。GetObject(zDb。BlockTableId,OpenMode。for read)
Dim zBlkNameOld As String
Dim zBlkNameNew As String
zBlkNameOld = dR(" rd _ OLD _ NAME ")
zBlkNameNew = dR(" rd _ NEW _ NAME ")
If(zBlkTbl .Has(zBlkNameOld))然后
' Obtenir la dédefinition du bloc
Dim zBlkTblRec As block table record = zTrans。GetObject(zBlkTbl(zBlkNameOld),OpenMode。ForWrite)
zEd。WriteMessage(字符串。Format(vbLf +"块名:{0} ",zBlkTblRec。Name))
zBlkTblRec。name = zBlkNameNew
I = I+1
End If
nb blk = nb blk+1
End While
Catch ex As system exception
End Try
zTrans。Commit()
End使用
dR . Close()
const。Close()
End If
End Sub
回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-9-18 01:25:43 | 显示全部楼层
tne 块表中不能有两个同名的块。
Tu ne peux pas avoir deux blocs avec le même nom dans la table des blocs.
回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-9-18 11:07:32 | 显示全部楼层
大家好,
我的问题解决了<我要感谢吉尔和杰夫的建议<我稍后会提出我的解决方案,看它是否能帮助其他人<非常感谢。
回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-9-21 06:28:29 | 显示全部楼层
正如承诺的那样,您将在下面找到我的问题的解决方案。
感谢Gile和Jeff
由于您的建议,这是可能的。
Public Sub RenameDefitionBlock()
Dim zDoc As Document=Application.DocumentManager.MdiActiveDocument
Dim zDb As Database=zDoc.Database
Dim zEd As Editor=zDoc.Editor
Dim conStr As New OleDbConnection
'Chane de连接àla base de donées
conStr.ConnectionString="文件名=您的file.udl"
'Ouverture de la连接
conStr.Open()
Dim nbBlk As整数=0
'Début de l'opéation
使用zTrans作为事务=zDb.TransactionManager.StartTransaction()
尝试
'Ouverture de la table des块zh讲座
Dim zBlkTbl As BlockTable=zTrans.GetObject(zDb.BlockTableId,OpenMode.ForRead)
'每个对象ID As ObjectId In zBlkTbl
'Ouverture de la table des enynstements(définition)des Block s enécreure
Dim zBlkTblRec As BlockTableRecord=zTrans.GetObject(ObjId,OpenMode.ForWrite)
'Sauvegarde du nom de l'enrecstrment int le tester plus loin
Dim zTestName As String=zBlkTblRec.Name
'Ne pas prendre en考虑les*Model_Spaceet*Paper_Space
如果zBlkTblRec.IsLayout=True那么
其他
'Test de la连接àla base de donées
如果conStr.State=ConnectionState.Open那么
Dim cmd As OleDbCommand=conStr.CreateCommand
'Sélection du noméqui的dans la新名称:{2}",zBlkTblRec.Name, zBlkNameOld, zBlkNameNew))
zEd.WriteMessage(String.Format(vbLf + "-----------------------------------------------------------------------------"))
'Renommer le bloc par le nouveau nom rouvé
zBlkTblRec.Name=zBlkNameNew
nbBlk=nbBlk+1
结束同时
'Fermeture de l
dR.Close()
结束如果
下一个
'结束如果
zEd.WriteMessage(String.Format(vbLf+"差异块数:{0}", nbBlk))
Catch ex As SystemException
结束尝试
'结束操作
zTrans.Commit()
结束使用
'Fermeture de la base de donées
conStr.Close()
结束子
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 23:47 , Processed in 0.275526 second(s), 68 queries .

© 2020-2025 乐筑天下

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