.NET
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

SendStringToExecute and echoCommand

3 REPLIES 3
SOLVED
Reply
Message 1 of 4
GrzesiekGP
3100 Views, 3 Replies

SendStringToExecute and echoCommand

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?

3 REPLIES 3
Message 2 of 4
Hallex
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
Message 3 of 4
GrzesiekGP
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!

Message 4 of 4
Hallex
in reply to: GrzesiekGP

Glad you get it worked

Cheers 🙂

_____________________________________
C6309D9E0751D165D0934D0621DFF27919

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk DevCon in Munich May 28-29th


Autodesk Design & Make Report

”Boost