metaldan 发表于 2022-7-6 22:37:33

打开dwg,修改并另存为

夏威夷群岛
 
我必须打开目录中的所有dwg,修改一些块属性(如BOM..图纸编号..)然后做一个saveas。
 
首先,我为已经打开的dwg制作代码,修改它并另存为(带有
mydwg。关闭并保存(ligneF))
 
所有的工作都打招呼了,很快我就把它放在一个循环中打开了所有的dwg。保存为文件时autocad崩溃。
 
你能帮助我吗。我试着用readdwgfile选择
应用DocumentManager。打开我在两方面都有相同的错误。
 
ps 1,如果我只运行open和saveas行,我也会出现同样的错误。
 
 
 
谢谢你的帮助
 
 
 
这是我的密码
 
 


Dim fichiersTrouv = Directory.GetFiles(T_CIBLE.Text, "*.dwg", SearchOption.AllDirectories)
ForEach ligneF In fichiersTrouv ' the list of file is correct

'Application.DocumentManager.Open option
'Dim mydwg As Document = Application.DocumentManager.Open(ligneF)
' Dim myDWG As Document = Application.DocumentManager.MdiActiveDocument
' myDB = myDWG.Database

Dim myDB AsNew Database(False, True)
myDB.ReadDwgFile(ligneF, IO.FileShare.ReadWrite, True, "")



' this section have no error, it work alone
Using mytrans As Transaction = myDB.TransactionManager.StartTransaction
ForEach myBlockName AsStringIn GetTopLevelBlocks(myDB)
ForEach BRefID As ObjectId In GetBRefIDs(myDB, myBlockName)
If myBlockName = "DANCART"Then
Dim MYATTVALS AsNew Dictionary(OfString, String)
MYATTVALS.Add("PROJET", "A")
MYATTVALS.Add("CLIENT1", "B")
MYATTVALS.Add("CLIENT2", "C")
MYATTVALS.Add("DESSINATEUR", "D")
MYATTVALS.Add("DATE", "E")
MYATTVALS.Add("DESSIN", "F")
Using myTrans2 As Transaction = BRefID.Database.TransactionManager.StartTransaction
Dim myBRef As BlockReference = BRefID.GetObject(OpenMode.ForRead)
Dim myAttCollection As AttributeCollection = myBRef.AttributeCollection
ForEach myAttRefID As ObjectId In myAttCollection
Dim myAttRef As AttributeReference = myAttRefID.GetObject(OpenMode.ForWrite)
If MYATTVALS.ContainsKey(myAttRef.Tag) Then
myAttRef.TextString = MYATTVALS(myAttRef.Tag)
EndIf
Next
myTrans2.Commit()
EndUsing
EndIf
Next
Next
mytrans.Commit()
EndUsing



myDB.SaveAs(ligneF & "1.dwg", DwgVersion.AC1004) ' crash on this line
myDB.Dispose()

' mydwg.CloseAndSave(ligneF) 'Application.DocumentManager.Open option crash
Next
EndSub



fixo 发表于 2022-7-6 23:01:01

使用Try。。。获取描述性错误消息的Catch语句
类似于
 

Try
...your code goes here
Catch ex as AutoDesk.Autocad.Runtime.Exception ''/*or System.Exception*/
Application.ShowAlertDialog(ex.Message + vblf + ex.StackTrace
Finally
'keep it blank yet
End Try

 
 
 
接下来使用命名空间系统。IO以获取有效的完整路径,
可能您在这行中漏掉了一个反斜杠:
Imports System.IO
...................
myDB.SaveAs(Path.Combine(ligneF, "1.dwg"), DwgVersion.AC1004)
那么(我不知道你现在的版本)也许,
必须向该方法传递3个参数,而不是2个:

myDB.SaveAs(Path.Combine(ligneF, "1.dwg"), DwgVersion.AC1004,DataBase.SecurityParameters)

很好用
使用。。。myDB对象的End Using语句
只是快速浏览一下

metaldan 发表于 2022-7-6 23:11:13

谢谢'
 
我用TRY。。CATCH发现我在MYDB中使用了错误的dwgversion。SAVEAS命令
 
SSAVEA现在运行良好
 
我试试MYDB。SAVE()命令,但它不起作用???
 
试抓给我一个eFileINternalErr
 
奇怪的

shirazbj 发表于 2022-7-6 23:26:18

看这里http://208.74.205.69/t5/NET/Autocad-Database-Save/td-p/3196432
上面写着:数据库。Save()未实现,始终会出错。
 
顺便说一句:
如果ligneF=“my.dwg”
 
ligneF和“1.dwg”给出的文件名类似于:my。dwg1.dwg
 

 
路径Combine(ligneF,“1.dwg”)提供的文件名类似于:my。图纸1。图纸
 
我使用;左(ligneF,Len(ligneF)-4)+“1.dwg”

metaldan 发表于 2022-7-6 23:51:42

谢谢你的帮助。我发现只有SAVEAS可以工作,以保持数据库的完整性。
 
 
因此,我保存为,删除旧文件,重命名新文件
页: [1]
查看完整版本: 打开dwg,修改并另存为