HI.
i want to save my drawing with the xref so i want to launch "-etransmit" here my code:
Application.SetSystemVariable("FILEDIA", 0) doc.SendStringToExecute("-etransmit" & vbCr & _ "CH" & vbCr & _ "archivage" & vbCr & _ "C" & vbCr & _ "" & Txt & "" & vbCr, True, False, True)
So the TXT contain my path+filename (.zip)
"archivage" is the config for etransmit.
i need to set to 0 the FILEDIA for force my path+name.
it work fine but how i can set to 1 the var ? FILEDIA.
the SendStringToExecute is execute after the end of my prog so i cant add the code after this.
Need to use event ?
I tryed to use this :
'*********************************************************************** '** Fonction Lancement d'une commande Synchrone sur la ligne ** '** de commande d'Autocad ** '*********************************************************************** '** ENTREE (exemple) ** '** Tracé une ligne : '** CommandeSync("_.line", New Point3d(10.0, 20.0, 0.0), New Point3d(80.0, 50.0, 0.0), "") '** Freeze du calque 0 '** CommandeSync("_.vplayer", "_freeze", "0", "_select", "\", "", "") '** '** Note: '** - an empty string ("") means a validation (Enter) '** - an anti-slash ("\" with VB or "\\" with C#) means a pause for user input. '** '** - Texte : Le texte à afficher ** '*********************************************************************** '** with A2013, replace "acad.exe" with "accore.dll" in the DllImport attribute arguments. '******************************************************************************************* <System.Security.SuppressUnmanagedCodeSecurity()> _ <System.Runtime.InteropServices.DllImport("acad.exe", _ EntryPoint:="acedCmd", _ CharSet:=System.Runtime.InteropServices.CharSet.Unicode, _ CallingConvention:=System.Runtime.InteropServices.CallingConvention.Cdecl)> _ Private Function acedCmd(ByVal resbuf As IntPtr) As Integer End Function '''<summary> ''' Call an AutoCAD command (runs synchronously). ''' </summary> ''' <param name="args">The command name followed by command inputs.</param> ''' Public Sub LigneCommandeImmediate(ByVal ParamArray args As Object()) Dim resbuf As New ResultBuffer() For Each obj As Object In args Select Case obj.GetType().Name Case "String" resbuf.Add(New TypedValue(CInt(Autodesk.AutoCAD.Runtime.LispDataType.Text), obj)) Exit Select Case "Int16" resbuf.Add(New TypedValue(CInt(Autodesk.AutoCAD.Runtime.LispDataType.Int16), obj)) Exit Select Case "Int32" resbuf.Add(New TypedValue(CInt(Autodesk.AutoCAD.Runtime.LispDataType.Int32), obj)) Exit Select Case "Double" resbuf.Add(New TypedValue(CInt(Autodesk.AutoCAD.Runtime.LispDataType.[Double]), obj)) Exit Select Case "Point2d" resbuf.Add(New TypedValue(CInt(Autodesk.AutoCAD.Runtime.LispDataType.Point2d), obj)) Exit Select Case "Point3d" resbuf.Add(New TypedValue(CInt(Autodesk.AutoCAD.Runtime.LispDataType.Point3d), obj)) Exit Select Case "ObjectId" resbuf.Add(New TypedValue(CInt(Autodesk.AutoCAD.Runtime.LispDataType.ObjectId), obj)) Exit Select Case "ObjectId[]" For Each id As ObjectId In DirectCast(obj, ObjectId()) resbuf.Add(New TypedValue(CInt(Autodesk.AutoCAD.Runtime.LispDataType.ObjectId), id)) Next Exit Select Case "ObjectIdCollection" For Each id As ObjectId In DirectCast(obj, ObjectIdCollection) resbuf.Add(New TypedValue(CInt(Autodesk.AutoCAD.Runtime.LispDataType.ObjectId), id)) Next Exit Select Case "SelectionSetDelayMarshalled", "SelectionSetFullyMarshalled" resbuf.Add(New TypedValue(CInt(Autodesk.AutoCAD.Runtime.LispDataType.SelectionSet), obj)) Exit Select Case Else Throw New InvalidOperationException("Unsupported type in Command() method") End Select Next acedCmd(resbuf.UnmanagedObject) End Sub
but not wotking. i need to execute de etransmit immediately and after set to 1 the FILEDIA. How i can do ?
Solved! Go to Solution.
Solved by SENL1362. Go to Solution.
gasty, your solution need interop. it is annoying to do this. I have many PC and system. (XP, Seven 64b).
so it is much better to add FILEDIA in the SendString.
But you have to check if the dwg is saved and not modified.
Works fine now.
Thank to you 2.
The other way to solve the issue of original post (i.e. reset "FILEDIA" back to 1 after SendStringToExecute()) is to simply add handler to Document.CommandEnded right before calling "etransmit", something like:
private bool doETrans=true; // declare a class level variable as flag, indicating the "etrans" command is from your code
... ...
... ...
Application.SerSystemVariable("FILEDIA", 0);
doc.CommandEnded+=Handle_EtransCommandEnded;
doc.SendStringToExecute("-etransmit ", ... ...)
... ...
private void Handle_EtransCommandEnded(object sender, CommandArgs e)
{
if (e.GlobalCommandName.ToUpper().Contains("ETRANSMIT") && doETrans)
{
Application.SerSystemVariable("FILEDIA", 1);
doc.CommandEnded-=Handle_EtransCommandEnded;
}
}
Hi,
Thanks for your response. I want, on the execution of my command "ETRANSMIT" command should be invoked, but should always show the dialog.
using AcAp = Autodesk.AutoCAD.ApplicationServices.Application;
AcAp.SetSystemVariable("FILEDIA", 1);
AcAp.DocumentManager.MdiActiveDocument.SendStringToExecute("-ETRANSMIT", false, false, true);
This is the code I am using.... is something wrong happening here. Because whenever I execute this piece of code, I am getting not getting the dialog (shown in attachment)
Please help me with this.
Warm Regards,
Sameer Rathoud