2015-03-31 14 views
6

Sto provando a scrivere due metodi che chiamano il comando UNDO di AutoCAD e passano in parametri diversi. Il primo metodo chiama UNDO e passa a M che indica la posizione del disegno. Il secondo metodo chiama UNDO e passa B che significa annullare fino alla posizione contrassegnata (o alla fine se non ce n'è uno). Finora sono piuttosto sempliciChiamare comandi AutoCAD da C# .NET

 /// <summary> 
     /// Method to mark the current position of the AutoCAD program 
     /// </summary> 
     public static void MarkPosition() 
     { 
      doc.SendStringToExecute("._UNDO M", true, false, true); 
     } 

     /// <summary> 
     /// Method to step AutoCAD back int steps 
     /// </summary> 
     public static void BigUndo() 
     { 
      doc.SendStringToExecute("._UNDO B", true, false, true); 
     } 

Questi sembrano come dovrebbero funzionare ma per qualche motivo non lo fanno. Quando chiamo MarkPosition() e poi BigUndo() viene visualizzato un errore che indica che è stato rilevato Start of Group; immettere Annulla fine per tornare indietro. Per testare la mia sintassi. Ho cambiato MarkPosition in

public static void MarkPosition() 
{ 
    doc.SendStringToExecute("circle 2,2,0 4 ", true, false, true); 
} 

che disegna con successo un cerchio. Ciò significa che la mia sintassi è giusta, ma qualcosa di strano sta succedendo con Undo.

+0

Digitando presumibilmente il comando direttamente in AutoCAD si ottiene la risposta desiderata? – ZombieSheep

+0

Sì, corretto –

+0

SendStringtoExecute è asincrono. Vengono eseguiti dopo che il codice .net è terminato. Sei sicuro di testare le cose giuste? prova a disegnare il cerchio con questo metodo tra il segno e il retro http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-F4A36181-39FB-4923-A2AF-3333945DB289 – Alain

risposta

0

Lo spazio che si sta inviando non viene riconosciuto come una nuova riga da AutoCAD. È necessario aggiungere la nuova linea prima quindi inviare il carattere successivo su un'altra linea come di seguito:

  doc.SendStringToExecute("._UNDO\n", true, false, true); 
      doc.SendStringToExecute("M\n", true, false, true); 

      doc.SendStringToExecute("._UNDO\n", true, false, true); 
      doc.SendStringToExecute("B\n", true, false, true); 
0

vi state perdendo un @END spazio della stringa di comando.

doc.SendStringToExecute("._UNDO B", true, false, true); // Instead of this 
doc.SendStringToExecute("._UNDO B ", true, false, true); // use this