2015-03-31 15 views
6

Tôi đang cố gắng viết hai phương thức gọi lệnh UNDO của AutoCAD và chuyển các tham số khác nhau. Phương thức đầu tiên gọi UNDO và vượt qua M có nghĩa là đánh dấu vị trí của bản vẽ. Phương pháp thứ hai gọi UNDO và vượt qua B có nghĩa là hoàn tác tất cả các cách quay lại vị trí được đánh dấu (hoặc kết thúc nếu không có). Cho đến nay chúng khá đơn giảnGọi các lệnh AutoCAD từ 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); 
     } 

Có vẻ như chúng sẽ hoạt động nhưng vì lý do nào đó chúng không hoạt động. Khi tôi gọi MarkPosition() và sau đó BigUndo() tôi nhận được một lỗi nói rằng bắt đầu của nhóm gặp phải; nhập Hoàn tác kết thúc để quay lại tiếp tục. Để kiểm tra cú pháp của tôi. Tôi đã thay đổi MarkPosition để

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

mà thu hút thành công một vòng tròn. Điều đó có nghĩa là cú pháp của tôi là đúng nhưng có điều gì đó kỳ lạ đang xảy ra với Hoàn tác.

+0

lẽ gõ lệnh trực tiếp trong AutoCAD cung cấp cho bạn câu trả lời mong muốn? – ZombieSheep

+0

Vâng, đúng là –

+0

SendStringtoExecute là không đồng bộ. Chúng được thực hiện sau khi mã .net đã kết thúc. Bạn có chắc Bạn đang thử nghiệm đúng nội dung không? cố gắng vẽ vòng tròn qua phương pháp này giữa dấu và quay lại http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-F4A36181-39FB-4923-A2AF-3333945DB289 – Alain

Trả lời

0

Không gian bạn đang gửi không được công nhận là dòng mới của AutoCAD. Bạn phải thêm dòng mới đầu tiên sau đó gửi các ký tự tiếp theo trên dòng khác như dưới đây:

  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

Bạn đang thiếu một @END không gian của chuỗi lệnh.

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