• Industries
  • Products
  • Buy
  • Services & Support
  • Communities
  • Discussion Groups

    .NET

    Reply
    Contributor
    Posts: 14
    Registered: ‎04-04-2012
    Accepted Solution

    Override default commands

    350 Views, 17 Replies
    04-04-2012 03:01 AM

    Hi!

     

    I'm trying to do something like this:

     

    [Autodesk.AutoCAD.Runtime.CommandMethod("REFEDIT", Autodesk.AutoCAD.Runtime.CommandFlags.UsePickSet)]
    public void RefEdit()
    {
    Document doc = AcadApp.DocumentManager.MdiActiveDocument;

     

    if (doc is a document I care about))
    {
    do my stuff...
    }
    else
    {

    run the default command...
    }
    }

     

    I haven't undefined the default command, my definition of REFEDIT executes anyway.

    I wanna be able to run the default command from my definition.

     

    doc.SendStringToExecute(".REFEDIT ", true, false, false); will loop forever.

     

    Please use plain text.
    ADN Support Specialist
    Balaji_Ram
    Posts: 345
    Registered: ‎03-21-2011

    Re: Override default commands

    04-04-2012 05:40 AM in reply to: annse

    Hi,

     

    I tried this which is very similar to what you are trying and it worked ok.

    With this code, the line command is redefined only for drawings that have "Test" in their name.

     

    Can you try this and see if it works for you ?

    Maybe it will then help you identify the reason for your code to loop indefinitely.

     

    // Add reference to Autodesk.AutoCAD.Interop 
    // Add reference to Autodesk.AutoCAD.Interop.Common
    using Autodesk.AutoCAD.Interop;
    using Autodesk.AutoCAD.Interop.Common;
    
    [CommandMethod("LINE")]
    static public void LineMethod()
    {
        Document doc = Application.DocumentManager.MdiActiveDocument;
        Editor ed = doc.Editor;
        if (doc.Name.Contains("Test"))
            ed.WriteMessage("My implementation of line");
        else
        {
            AcadApplication app = (AcadApplication)Application.AcadApplication;
            app.ActiveDocument.SendCommand("_.LINE ");
            ed.WriteMessage("My implementation of line");
        }
    }
        
    void IExtensionApplication.Initialize()
    {
        AcadApplication app = (AcadApplication)Application.AcadApplication;
        app.ActiveDocument.SendCommand("_.UNDEFINE _LINE ");
    }
    

     

     

     



    Balaji
    Developer Technical Services
    Autodesk Developer Network

    Please use plain text.
    Contributor
    Posts: 14
    Registered: ‎04-04-2012

    Re: Override default commands

    04-04-2012 06:58 AM in reply to: Balaji_Ram

    Thank you for your quick response!

     

    I've added required references and I now use SendCommand instead of SendStringToExecute.

    This will still loop indefinitely. (If doc.Name doesn't contain "Test")

     

    public void Initialize()
    {

    AcadApplication app = (AcadApplication)Application.AcadApplication;
    app.ActiveDocument.SendCommand("_.UNDEFINE _REFEDIT ");
    }

     

    [Autodesk.AutoCAD.Runtime.CommandMethod("REFEDIT", Autodesk.AutoCAD.Runtime.CommandFlags.UsePickSet)]
    static public void RefEdit()
    {
    Document doc = AcadApp.DocumentManager.MdiActiveDocument;
    Editor ed = doc.Editor;

     

    if (doc.Name.Contains("Test"))
    {
    ed.WriteMessage("New refedit...");
    }
    else
    {
    AcadApplication app = (AcadApplication)Application.AcadApplication;
    app.ActiveDocument.SendCommand("_.REFEDIT ");
    }
    }

     

    Thanks again!

    Please use plain text.
    ADN Support Specialist
    Balaji_Ram
    Posts: 345
    Registered: ‎03-21-2011

    Re: Override default commands

    04-04-2012 08:36 AM in reply to: annse

    Hi,

     

    With the Line command the code does work.

     

    But there seems to be some problem with using it for "Refedit".

    Can you check if the command is actually undefined after sending the "undefine" command ?

     

     

     



    Balaji
    Developer Technical Services
    Autodesk Developer Network

    Please use plain text.
    Moderator
    Alexander.Rivilis
    Posts: 1,167
    Registered: ‎04-09-2008

    Re: Override default commands

    04-04-2012 11:42 AM in reply to: Balaji_Ram

    What about:

    app.ActiveDocument.SendCommand("_ACAD_REFEDIT.REFEDIT ");

     ?

    Command _REFEDIT defined in file AcRefEd.arx

    If your's dll-file loaded after AcRefEd.arx - than no need to _UNDEFINE _REFEDIT, because your command REFEDIT override standard command REFEDIT. And standard command REFEDIT can be invoked using _ACAD_REFEDIT.REFEDIT


    Пожалуйста не забывайте про Утвердить в качестве решения!Утвердить в качестве решения и Give Kudos!Баллы
    Please remember to Accept Solution!Accept as Solution and Give Kudos!Kudos

    Please use plain text.
    Contributor
    Posts: 14
    Registered: ‎04-04-2012

    Re: Override default commands

    04-04-2012 11:32 PM in reply to: Balaji_Ram

    Hi!

     

    When I do the same thing with LINE instead of REFEDIT, my new definition of LINE won't run.

    I get this error with both LINE and REFEDIT.

     

    _.UNDEFINE
    ; error: no function definition: ACET-STR-REPLACE
    _LINE

     

    Thanks!

    Please use plain text.
    Contributor
    Posts: 14
    Registered: ‎04-04-2012

    Re: Override default commands

    04-04-2012 11:46 PM in reply to: Alexander.Rivilis

    Thanks, Alexander! That works!

     

    My dll is loaded in a .bundle installation.

    So, because I can't override _LINE the same way, _LINE is loaded after my dll and _REFEDIT before?

     

    Thanks again!

    Please use plain text.
    Contributor
    Posts: 14
    Registered: ‎04-04-2012

    Re: Override default commands

    04-05-2012 12:29 AM in reply to: Alexander.Rivilis

    If the timing issue is irrelevant due to that the _REFEDIT command is already defined when my dll is loading,

    I can use SendStringToExecute instead of SendCommand?

    This way I won't have to echo the command.

     

    Thanks again!

    Please use plain text.
    Moderator
    Alexander.Rivilis
    Posts: 1,167
    Registered: ‎04-09-2008

    Re: Override default commands

    04-05-2012 12:39 AM in reply to: annse

    annse wrote:

    I can use SendStringToExecute instead of SendCommand?

    This way I won't have to echo the command.


    I think you can do it. Try!  :-)


    Пожалуйста не забывайте про Утвердить в качестве решения!Утвердить в качестве решения и Give Kudos!Баллы
    Please remember to Accept Solution!Accept as Solution and Give Kudos!Kudos

    Please use plain text.
    Contributor
    Posts: 14
    Registered: ‎04-04-2012

    Re: Override default commands

    04-05-2012 03:32 AM in reply to: Alexander.Rivilis

    Hello again...

     

    Sending "_ACAD_REFEDIT.REFEDIT " seems to redefine the command.

    If the string is executed, the next time you run REFEDIT, it'll run the default definition. 

     

    [Autodesk.AutoCAD.Runtime.CommandMethod("REFEDIT", Autodesk.AutoCAD.Runtime.CommandFlags.Session & Autodesk.AutoCAD.Runtime.CommandFlags.UsePickSet)]
    static public void RefEditDef()
    {
    Document doc = Application.DocumentManager.MdiActiveDocument;
    Editor ed = doc.Editor;

     

    if (doc.Name.Contains("Test"))
    {

    ed.WriteMessage("selected ref..");

    }
    else
    {
    doc.SendStringToExecute("_ACAD_REFEDIT.REFEDIT ", true, false, false);
    }
    }

     

    Any ideas?

     

    Thanks!

    Please use plain text.