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

    .NET

    Reply
    Valued Contributor
    GrzesiekGP
    Posts: 56
    Registered: ‎02-03-2012
    Accepted Solution

    SendStringToExecute and echoCommand

    197 Views, 3 Replies
    03-19-2013 12:33 AM

    Hello,

     

    I've searched a lot, but I didn't find any solution for my problem.

     

    I've function written in C#:

        [CommandMethod("GDF")]
            public void doDimLinear()
            {
                DF.doDimLinear();
            }

     In DF class, in doDimLinear function at the end I have:

    doc.SendStringToExecute("dimlinear ", false, false, false);

     

    And everything works OK, my function is switching layer, setting dimension style and invoking dimlinear function.

     

    But when I want to repeat last command (by spacebar, right mouse) I have dimlinear command instead of GDF.

     

    Can anyone help me?

    Please use plain text.
    *Expert Elite*
    Hallex
    Posts: 1,371
    Registered: ‎10-08-2008

    Re: SendStringToExecute and echoCommand

    03-19-2013 02:33 AM in reply to: GrzesiekGP

    My guees is you have to use acedCmd instead

    Search for this  method here

    http://adndevblog.typepad.com/autocad/

     

    Quick example, works good on A2010

            [System.Security.SuppressUnmanagedCodeSecurity]
            [DllImport("acad.exe", EntryPoint = "acedCmd", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
            extern static private int acedCmd(IntPtr resbuf);
    
            [CommandMethod("dimlin")]
    
            public void acedCmdDimLinear()
            {
    
                ResultBuffer rb = new ResultBuffer();
    
                // RTSTR = 5005
    
                rb.Add(new TypedValue(5005, "_.DIMLINEAR"));
    
                // start the insert command
    
                acedCmd(rb.UnmanagedObject);
    
    
    
                bool quit = false;
    
                // loop round while the insert command is active
    
                while (!quit)
                {
    
                    // see what commands are active
    
                    string cmdNames = (string)Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("CMDNAMES");
    
                    // if the INSERT command is active
    
                    if (cmdNames.ToUpper().IndexOf("DIMLINEAR") >= 0)
                    {
    
                        // then send a PAUSE to the command line
    
                        rb = new ResultBuffer();
    
                        // RTSTR = 5005 - send a user 3 pause to the command line
    
                        rb.Add(new TypedValue(5005, "\\")); rb.Add(new TypedValue(5005, "\\")); rb.Add(new TypedValue(5005, "\\"));
    
                        acedCmd(rb.UnmanagedObject);
    
                    }
    
                    else
    
                        // otherwise quit
    
                        quit = true;
    
                }
    
            }

     

    _____________________________________
    C6309D9E0751D165D0934D0621DFF27919
    Please use plain text.
    Valued Contributor
    GrzesiekGP
    Posts: 56
    Registered: ‎02-03-2012

    Re: SendStringToExecute and echoCommand

    03-19-2013 03:27 AM in reply to: Hallex

    Seems to work:

           ResultBuffer rb = new ResultBuffer();
                // RTSTR = 5005
                rb.Add(new TypedValue(5005, "_.dimlinear"));
                utilities.acedCmd(rb.UnmanagedObject);

     

    Thank you!

    Please use plain text.
    *Expert Elite*
    Hallex
    Posts: 1,371
    Registered: ‎10-08-2008

    Re: SendStringToExecute and echoCommand

    03-19-2013 03:49 AM in reply to: GrzesiekGP

    Glad you get it worked

    Cheers :smileyhappy:

    _____________________________________
    C6309D9E0751D165D0934D0621DFF27919
    Please use plain text.