.NET

Reply
Valued Contributor
GrzesiekGP
Posts: 67
Registered: ‎02-03-2012
Message 1 of 4 (1,179 Views)
Accepted Solution

SendStringToExecute and echoCommand

1179 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?

*Expert Elite*
Hallex
Posts: 1,569
Registered: ‎10-08-2008
Message 2 of 4 (1,164 Views)

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
Valued Contributor
GrzesiekGP
Posts: 67
Registered: ‎02-03-2012
Message 3 of 4 (1,156 Views)

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!

*Expert Elite*
Hallex
Posts: 1,569
Registered: ‎10-08-2008
Message 4 of 4 (1,147 Views)

Re: SendStringToExecute and echoCommand

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

Glad you get it worked

Cheers :smileyhappy:

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
Announcements
Are you familiar with the Autodesk Expert Elites? The Expert Elite program is made up of customers that help other customers by sharing knowledge and exemplifying an engaging style of collaboration. To learn more, please visit our Expert Elite website.
Need installation help?

Start with some of our most frequented solutions or visit the Installation and Licensing Forum to get help installing your software.