Jump to content

open dwg , modify and save as


Recommended Posts

Posted

HI

 

I have to open all dwg in a directory, modify some block attribute ( like BOM..drawng number..) and make a saveas.

 

Fist i make the code for a already opened dwg, modifiy it and saveas ( with

mydwg.CloseAndSave(ligneF) )

 

All work greet, a soon i put it in a loop to open all dwg. autocad crash when i saveas the file.

 

can you help me. I try to option , with readdwgfile, and

Application.DocumentManager.Open . I have the same error on both way.

 

ps 1, if i run only the open, and saveas line, i have the same error too.

 

 

 

thanks' for your help

 

 

 

this is my code

 

 


[size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] fichiersTrouv = Directory.GetFiles(T_CIBLE.Text, [/size][size=2][color=#a31515][size=2][color=#a31515]"*.dwg"[/color][/size][/color][/size][size=2], SearchOption.AllDirectories)[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]For[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Each[/color][/size][/color][/size][size=2] ligneF [/size][size=2][color=#0000ff][size=2][color=#0000ff]In[/color][/size][/color][/size][size=2] fichiersTrouv [/size][size=2][color=#008000][size=2][color=#008000]' the list of file is correct[/color][/size]

[/color][/size][size=2][color=#008000][size=2][color=#008000]'Application.DocumentManager.Open option[/color][/size]
[/color][/size][size=2][color=#008000][size=2][color=#008000]'Dim mydwg As Document = Application.DocumentManager.Open(ligneF)[/color][/size]
[/color][/size][size=2][color=#008000][size=2][color=#008000]' Dim myDWG As Document = Application.DocumentManager.MdiActiveDocument[/color][/size]
[/color][/size][size=2][color=#008000][size=2][color=#008000]' myDB = myDWG.Database[/color][/size]

[/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] myDB [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]New[/color][/size][/color][/size][size=2] Database([/size][size=2][color=#0000ff][size=2][color=#0000ff]False[/color][/size][/color][/size][size=2], [/size][size=2][color=#0000ff][size=2][color=#0000ff]True[/color][/size][/color][/size][size=2])[/size]
[size=2]myDB.ReadDwgFile(ligneF, IO.FileShare.ReadWrite, [/size][size=2][color=#0000ff][size=2][color=#0000ff]True[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]""[/color][/size][/color][/size][size=2])[/size]



[size=2][color=#008000][size=2][color=#008000]' this section have no error, it work alone[/color][/size]
[/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Using[/color][/size][/color][/size][size=2] mytrans [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] Transaction = myDB.TransactionManager.StartTransaction[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]For[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Each[/color][/size][/color][/size][size=2] myBlockName [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]String[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]In[/color][/size][/color][/size][size=2] GetTopLevelBlocks(myDB)[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]For[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Each[/color][/size][/color][/size][size=2] BRefID [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] ObjectId [/size][size=2][color=#0000ff][size=2][color=#0000ff]In[/color][/size][/color][/size][size=2] GetBRefIDs(myDB, myBlockName)[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size][/color][/size][size=2] myBlockName = [/size][size=2][color=#a31515][size=2][color=#a31515]"DANCART"[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Then[/color][/size]
[/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] MYATTVALS [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]New[/color][/size][/color][/size][size=2] Dictionary([/size][size=2][color=#0000ff][size=2][color=#0000ff]Of[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]String[/color][/size][/color][/size][size=2], [/size][size=2][color=#0000ff][size=2][color=#0000ff]String[/color][/size][/color][/size][size=2])[/size]
[size=2]MYATTVALS.Add([/size][size=2][color=#a31515][size=2][color=#a31515]"PROJET"[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]"A"[/color][/size][/color][/size][size=2])[/size]
[size=2]MYATTVALS.Add([/size][size=2][color=#a31515][size=2][color=#a31515]"CLIENT1"[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]"B"[/color][/size][/color][/size][size=2])[/size]
[size=2]MYATTVALS.Add([/size][size=2][color=#a31515][size=2][color=#a31515]"CLIENT2"[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]"C"[/color][/size][/color][/size][size=2])[/size]
[size=2]MYATTVALS.Add([/size][size=2][color=#a31515][size=2][color=#a31515]"DESSINATEUR"[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]"D"[/color][/size][/color][/size][size=2])[/size]
[size=2]MYATTVALS.Add([/size][size=2][color=#a31515][size=2][color=#a31515]"DATE"[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]"E"[/color][/size][/color][/size][size=2])[/size]
[size=2]MYATTVALS.Add([/size][size=2][color=#a31515][size=2][color=#a31515]"DESSIN"[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]"F"[/color][/size][/color][/size][size=2])[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]Using[/color][/size][/color][/size][size=2] myTrans2 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] Transaction = BRefID.Database.TransactionManager.StartTransaction[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] myBRef [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] BlockReference = BRefID.GetObject(OpenMode.ForRead)[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] myAttCollection [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AttributeCollection = myBRef.AttributeCollection[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]For[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Each[/color][/size][/color][/size][size=2] myAttRefID [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] ObjectId [/size][size=2][color=#0000ff][size=2][color=#0000ff]In[/color][/size][/color][/size][size=2] myAttCollection[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] myAttRef [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AttributeReference = myAttRefID.GetObject(OpenMode.ForWrite)[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size][/color][/size][size=2] MYATTVALS.ContainsKey(myAttRef.Tag) [/size][size=2][color=#0000ff][size=2][color=#0000ff]Then[/color][/size]
[/color][/size][size=2]myAttRef.TextString = MYATTVALS(myAttRef.Tag)[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size]
[/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Next[/color][/size]
[/color][/size][size=2]myTrans2.Commit()[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Using[/color][/size]
[/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size]
[/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Next[/color][/size]
[/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Next[/color][/size]
[/color][/size][size=2]mytrans.Commit()[/size]
[size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Using[/color][/size][/color][/size]

[size=2][color=#0000ff]

[/color][/size][size=2]myDB.SaveAs(ligneF & [/size][size=2][color=#a31515][size=2][color=#a31515]"1.dwg"[/color][/size][/color][/size][size=2], DwgVersion.AC1004) [/size][size=2][color=#008000][size=2][color=#008000]' crash on this line[/color][/size]
[/color][/size][size=2]myDB.Dispose()[/size]

[size=2][color=#008000][size=2][color=#008000]' mydwg.CloseAndSave(ligneF) 'Application.DocumentManager.Open option crash [/color][/size]
[/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Next[/color][/size]
[/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Sub[/color][/size]
[/color][/size]


Posted

Use Try ... Catch statement to get descriptive error message

Something like

 

 
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

 

 

 

Next use namespace System.IO to get valid fullpath,

probably you had missed a backslash in this line:

Imports System.IO
...................
myDB.SaveAs(Path.Combine(ligneF, "1.dwg"), DwgVersion.AC1004)

Then (I don't know your current version) perhaps,

you have to pass 3 arguments instead of two to this method:

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

Would be good to use

Using ... End Using statement for myDB object

Just on the quick glance

Posted

THANKS'

 

I use the TRY..CATCH and i found that i use the wrong dwgversion with the MYDB.SAVEAS command

 

The sSAVEAS work well now

 

I try the MYDB.SAVE() command but it don't work ???

 

the TRY CATCH give me a eFileINternalErr

 

bizzard

  • 2 weeks later...
Posted

thank's for your help. I see somewhere that only the SAVEAS work, to keep the integrity of the database.

 

 

SO, i saveas, delete the old file, rename the new file

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...