.NET

Reply
Active Member
Hans530
Posts: 8
Registered: ‎03-03-2012
Message 1 of 12 (2,283 Views)

SendStringToExecute

2283 Views, 11 Replies
03-19-2012 07:48 AM

 Hi Everybody

When the code below are executed the line, drawing the line are executed after the rest of the code,

that is the msgboxes are displayed before the line are drawn in Acad_Window.

what should be done to display the  msgboxes before the line, as the order in the code indicates

Hope someone has an explanation and solution to this

With Regards

HansP

''

Application.DocumentManager.MdiActiveDocument.SendStringToExecute("line_

1800,2001600,3000 ", True, False, True)

MsgBox("DWG Saved")

dwgPath = ThisDrawing.GetVariable("DWGPREFIX")

dwgName = ThisDrawing.GetVariable("DWGNAME")

Dim thisDwg AsString = dwgPath + dwgName

MsgBox(thisDwg)

*Expert Elite*
norman.yuan
Posts: 966
Registered: ‎04-27-2009
Message 2 of 12 (2,279 Views)

Re: SendStringToExecute

03-19-2012 08:14 AM in reply to: Hans530

What you should do is to use the .NET API to

 

  • Start a Transaction
  • Construct a Line object, such as:

  Dim l as Line=New Line

  Line.StartPoint=New Point3d(....)

  Line.EndPoint=New Point3d(...)

 

  • Set the line's properties as needed
  • Append the line to targeting space (Model or layout)
  • Commit the transaction

You can create a command method to cover all the steps aforemention, and then use SendStringToExecution() method as one call.

 

If the intention is to use all Acad existing/built-in commands, use AutoCAD script would do in most cases.

Active Member
Hans530
Posts: 8
Registered: ‎03-03-2012
Message 3 of 12 (2,278 Views)

Re: SendStringToExecute

03-19-2012 08:23 AM in reply to: Hans530

Thank you for your quick responce

 

The line worked fine, but how to do with a zoom command.

 

Hans P

Contributor
ranjith0326
Posts: 24
Registered: ‎04-16-2011
Message 4 of 12 (2,242 Views)

Re: SendStringToExecute

03-19-2012 10:05 PM in reply to: Hans530

Try with below one

 

Application.DocumentManager.MdiActiveDocument.SendStringToExecute("zoom e ", True, False, True)

Regards,

R.Ranjith
Moderator
Alexander.Rivilis
Posts: 1,398
Registered: ‎04-09-2008
Message 5 of 12 (2,236 Views)

Re: SendStringToExecute

03-19-2012 11:30 PM in reply to: Hans530

Hans530 wrote:

The line worked fine, but how to do with a zoom command.

 


http://forums.autodesk.com/t5/NET/ZoomWindow-and-ZoomScale/m-p/3249340#M26321


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

Active Member
Hans530
Posts: 8
Registered: ‎03-03-2012
Message 6 of 12 (2,226 Views)

Re: SendStringToExecute

03-20-2012 03:57 AM in reply to: Alexander.Rivilis

 

 

I do not know anything about C# so, I translated the ZoomExtents like this. It compiled OK but there was a runtime error complaining about the BindingFlags. As I don’t know any C# and as it seems not enough VB either to translate that part of the code where several BindingFlags are listid. I must ask for further help with that part

Thanks in advance Hans P

 

public static void ZoomExtents()

    {

        object acad = Application.AcadApplication;

        acad.GetType().InvokeMember("ZoomExtents", BindingFlags.DeclaredOnly | BindingFlags.Public |

             BindingFlags.Instance | BindingFlags.InvokeMethod, null, acad, null);

    }

 

 

 

 

Public Sub ZoomExtents()

Dim acad As Object = Application.AcadApplication

acad.GetType().InvokeMember("ZoomExtents",BindingFlags.DeclaredOnly, Nothing, acad, Nothing)

End Sub

Moderator
Alexander.Rivilis
Posts: 1,398
Registered: ‎04-09-2008
Message 7 of 12 (2,224 Views)

Re: SendStringToExecute

03-20-2012 03:59 AM in reply to: Hans530
Imports System.Reflection

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

Active Member
Hans530
Posts: 8
Registered: ‎03-03-2012
Message 8 of 12 (2,215 Views)

Re: SendStringToExecute

03-20-2012 04:37 AM in reply to: Alexander.Rivilis

Imports System.Reflection

I had that one without that it wouldn't compile

But is the row



acad.GetType().InvokeMember("ZoomExtents",BindingFlags.DeclaredOnly, Nothing, acad, Nothing)

translated ok from C#



 

 Hans P

Moderator
Alexander.Rivilis
Posts: 1,398
Registered: ‎04-09-2008
Message 9 of 12 (2,213 Views)

Re: SendStringToExecute

03-20-2012 04:44 AM in reply to: Hans530
acad.GetType().InvokeMember("ZoomExtents",BindingFlags.InvokeMethod, Nothing, acad, Nothing)

 


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

*Expert Elite*
_gile
Posts: 2,077
Registered: ‎04-29-2006
Message 10 of 12 (2,186 Views)

Re: SendStringToExecute

03-20-2012 03:08 PM in reply to: Alexander.Rivilis

Hi,

 

While using Reflection/Late binding, we can use some (extension) methods to make the code more readable than the :

GetType().InvokeMember(...)

 

With C# and Framework 3.5 or upper, we can write some extension methods so that the upper expression to ma make zoom extents become:

acad.Invoke("ZoomExtents");

or, to set the cursor size to 10:

acad.Get("Preferences").Get("Display").Set("CursorSize", 10);

 

public static class LateBinding
{
	public static object Get(this object obj, string propName, params object[] parameter)
	{
		return obj.GetType().InvokeMember(propName, BindingFlags.GetProperty, null, obj, parameter);
	}

	public static void Set(this object obj, string propName, params object[] parameter)
	{
		obj.GetType().InvokeMember(propName, BindingFlags.SetProperty, null, obj, parameter);
	}

	public static object Invoke(this object obj, string methName, params object[] parameter)
	{
		return obj.GetType().InvokeMember(methName, BindingFlags.InvokeMethod, null, obj, parameter);
	}
}

 

With F#, it's really easy to extend any Type, but ther's no way (AFAIK) to use optional parameters (as with params or ParamArray), but creating an array is so simple.

The zoom extents:

acad.invoke("ZoomExtents", null) |> ignore

The cursor to 10:
let size = acad.get("Preferences", null).get("Display", null).set("CursorSize", [| 10 |])

 

type Object with
    member x.get(propName, parameter) = 
        x.GetType().InvokeMember(propName, BindingFlags.GetProperty, null, x, parameter)

    member x.set(propName, parameter) = 
        x.GetType().InvokeMember(propName, BindingFlags.SetProperty, null, x, parameter)
        |> ignore

    member x.invoke (propName, parameter) = 
        x.GetType().InvokeMember(propName, BindingFlags.InvokeMethod, null, x, parameter)

 

VB do not allow to use extension methods with the Object Type, but we can define methods so that late binding expressions look like the vlax-get, vlax-put, and vlax,invoke LISP functions.

The zoom extents:

Invoke(acad, "ZoomExtents")

The cursor to 10:
SetProperty(GetProperty(GetProperty(acad, "Preferences"), "Display"), "CursorSize", 10)

 

Module LateBindingExtensions

    Public Function GetProperty(ByVal obj As Object, ByVal propName As String, ByVal ParamArray parameter As Object()) As Object
        Return obj.GetType().InvokeMember(propName, BindingFlags.GetProperty, Nothing, obj, parameter)
    End Function

    Public Sub SetProperty(ByVal obj As Object, ByVal propName As String, ByVal ParamArray parameter As Object())
        obj.GetType().InvokeMember(propName, BindingFlags.SetProperty, Nothing, obj, parameter)
    End Sub

    Public Function Invoke(ByVal obj As Object, ByVal methName As String, ByVal ParamArray parameter As Object()) As Object
        Return obj.GetType().InvokeMember(methName, BindingFlags.InvokeMethod, Nothing, obj, parameter)
    End Function

End Module

 


Gilles Chanteau

You are not logged in.

Log into access your profile, ask and answer questions, share ideas and more. Haven't signed up yet? Register

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 to get help installing your software.

Ask the Community