.NET
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
Re: Can't find ModelessOp erationWil l Start Event in Dot net
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hi Alex,
Oh my God , You are so caring. I had a moving this weekend and couldn't check on internet the whole 3 days.
Right now I am back on track. Still I didn't get into your posts but I will . Just wanted to let you know I am really
appreciated . I will look and If I have question I will ask you for sure if you don't mind.
Thanks you so much for your help Alex.
Janet.
Re: Can't find ModelessOp erationWil l Start Event in Dot net
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hi Again Alex . I didn't understand one word of c++ code you provided, It is my fault , no offence , I am not that smart . I said to myself let's just use Alex's Arx compiled file and implement it in my project. Below code is what I did . But it doesn't work. what did I do wrong ? .
Let me rephrase myself to avoid any confustion.
this is how I implement this for Attedit command. When commandStart triggers . If the command is Attedit I add handler for objectmodify event.
If object had any changes then I do my stuff . And then when CommandEnded triggers ,I remove ObjectModify handler.
so basically Commandstart and Commandend events always running. But ObjectModify doesn't run always.
Now let's go back to your solution for properties palette. How would I know user start changing an atrribute so I active the objectmodify event ?
Please give me some light here . Thanks.
Public Sub Initialize() Implements IExtensionApplication.Initialize
SystemObjects.DynamicLinker.LoadModule("c:\OPMTest 2010x64.arx", False, False)
Properties_palette_changed_helper.Start_monitoring _pallette()
End Sub
Public Sub Terminate() Implements IExtensionApplication.Terminate
End Sub
Public Class Properties_palette_changed_helper
<DllImport("OPMTest2010x64.arx", CallingConvention:=CallingConvention.Cdecl, EntryPoint:="IsOPMChangeProps")> _
Private Shared Function IsOPMChangeProps2010x64() As Integer
End Function
Public Shared Sub Start_monitoring_pallette()
Application.DocumentManager.MdiActiveDocument.Edit or.WriteMessage(vbLf & IsOPMChangeProps2010x64.ToString)
End Sub
End Class
Re: Can't find ModelessOp erationWil l Start Event in Dot net
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hi, Janet!
You do not understand me. The function that I wrote allows you to check whether the entity has changed with the Properties Palette (OPM) or not. But it is not an event and does not allow him to subscribe to the event.
If you are not interested in how the entity has been changed - you do not need this function.
In order to make the event ModelessOperationWillStart / ModelessOperationEnd need to write .NET wrapper with Mixed C++, what I'm not an expert. Sorry!
Re: Can't find ModelessOp erationWil l Start Event in Dot net
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Anyways. At least you look into it. That is nice of you.
Maybe somebody else from autodesk help us. Now is the time we see lack of Tony Tanzilla in this forum .
So many unanswered question.
Cheers Janet.
Re: Can't find ModelessOp erationWil l Start Event in Dot net
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hi Janet!
I've found solution without mixed C++. Try it. I've attached two solution. First - create arx-files (OPMTest2010x32.arx and OPMTest2010x64.arx). Second - create .NET-assembly which use arx-files (from first solution) in order to set own event handlers.
using System;
using System.Runtime.InteropServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
// This line is not mandatory, but improves loading performances
[assembly: CommandClass(typeof(COPMEvent.MyCommands))]
namespace COPMEvent
{
// This class is instantiated by AutoCAD for each document when
// a command is called by the user the first time in the context
// of a given document. In other words, non static data in this class
// is implicitly per-document!
public class MyCommands
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl) ]
public delegate void OPMChangeEvent();
[DllImport("OPMTest2010x32.arx", CallingConvention = CallingConvention.Cdecl, EntryPoint = "SetOPMChangeStart")]
private static extern void SetOPMChangeStart32(OPMChangeEvent callBackFunc);
[DllImport("OPMTest2010x64.arx", CallingConvention = CallingConvention.Cdecl, EntryPoint = "SetOPMChangeStart")]
private static extern void SetOPMChangeStart64(OPMChangeEvent callBackFunc);
[DllImport("OPMTest2010x32.arx", CallingConvention = CallingConvention.Cdecl, EntryPoint = "SetOPMChangeStop")]
private static extern void SetOPMChangeStop32(OPMChangeEvent callBackFunc);
[DllImport("OPMTest2010x64.arx", CallingConvention = CallingConvention.Cdecl, EntryPoint = "SetOPMChangeStop")]
private static extern void SetOPMChangeStop64(OPMChangeEvent callBackFunc);
private static void SetOPMChangeStart(OPMChangeEvent callBackFunc)
{
if (IntPtr.Size == 4) SetOPMChangeStart32(callBackFunc);
else SetOPMChangeStart64(callBackFunc);
}
private static void SetOPMChangeStop(OPMChangeEvent callBackFunc)
{
if (IntPtr.Size == 4) SetOPMChangeStop32(callBackFunc);
else SetOPMChangeStop64(callBackFunc);
}
private void OPMChangeEventStart()
{
// For testing only
Application.ShowAlertDialog("OPMEventStart - Begin Editing");
}
private void OPMChangeEventStop()
{
// For testing only
Application.ShowAlertDialog("OPMEventStop - Stop Editing");
}
private static OPMChangeEvent callBackFuncStart = null;
private static OPMChangeEvent callBackFuncStop = null;
// Modal Command with localized name
[CommandMethod("SetOPMEvent")]
public void SetOPMEvent() // This method can have any name
{
callBackFuncStart = new OPMChangeEvent(OPMChangeEventStart);
callBackFuncStop = new OPMChangeEvent(OPMChangeEventStop);
SetOPMChangeStart(callBackFuncStart); SetOPMChangeStop(callBackFuncStop);
}
[CommandMethod("ResetOPMEvent")]
public void ResetOPMEvent() // This method can have any name
{
callBackFuncStart = null;
callBackFuncStop = null;
SetOPMChangeStart(callBackFuncStart); SetOPMChangeStop(callBackFuncStop);
}
}
}
Select any entity and try change it with Properties Palette.
Re: Can't find ModelessOp erationWil l Start Event in Dot net
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hi Alex.
I really don't know how to make it up to you , for all your consideration. Thanks
I tried to convert your code to vb. ( using those online translators.
the only part I couldn't translate is
[CommandMethod("SetOPMEvent")]
public void SetOPMEvent() // This method can have any name
{
callBackFuncStart = new OPMChangeEvent(OPMChangeEventStart);
callBackFuncStop = new OPMChangeEvent(OPMChangeEventStop);
SetOPMChangeStart(callBackFuncStart); SetOPMChangeStop(callBackFuncStop);
}
I am pretty sure you can handle vb if you know C# and c++
I just know vb
Thanks again Alex.
Regards,
Janet.
Re: Can't find ModelessOp erationWil l Start Event in Dot net
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
With help of http://www.developerfusion.com/tools/convert/cshar
Imports System.Runtime.InteropServices Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry Imports Autodesk.AutoCAD.EditorInput ' This line is not mandatory, but improves loadingperformances <Assembly: CommandClass(GetType(COPMEvent.MyComman ds))> Namespace COPMEvent ' This class is instantiated by AutoCAD for ea ch document when ' a command is called by the user the first ti me in the context ' of a given document. In other words, non sta tic data in this class ' is implicitly per-document! Public Class MyCommands <UnmanagedFunctionPointer(CallingConventio n.Cdecl)> _ Public Delegate Sub OPMChangeEvent() <DllImport("OPMTest2010x32.arx", CallingCo nvention:=CallingConvention.Cdecl, EntryPoint:="Se tOPMChangeStart")> _ Private Shared Sub SetOPMChangeStart32(cal lBackFunc As OPMChangeEvent) End Sub <DllImport("OPMTest2010x64.arx", CallingCo nvention:=CallingConvention.Cdecl, EntryPoint:="Se tOPMChangeStart")> _ Private Shared Sub SetOPMChangeStart64(cal lBackFunc As OPMChangeEvent) End Sub <DllImport("OPMTest2010x32.arx", CallingCo nvention:=CallingConvention.Cdecl, EntryPoint:="Se tOPMChangeStop")> _ Private Shared Sub SetOPMChangeStop32(call BackFunc As OPMChangeEvent) End Sub <DllImport("OPMTest2010x64.arx", CallingCo nvention:=CallingConvention.Cdecl, EntryPoint:="Se tOPMChangeStop")> _ Private Shared Sub SetOPMChangeStop64(call BackFunc As OPMChangeEvent) End Sub Private Shared Sub SetOPMChangeStart(callB ackFunc As OPMChangeEvent) If IntPtr.Size = 4 Then SetOPMChangeStart32(callBackFunc) Else SetOPMChangeStart64(callBackFunc) End If End Sub Private Shared Sub SetOPMChangeStop(callBa ckFunc As OPMChangeEvent) If IntPtr.Size = 4 Then SetOPMChangeStop32(callBackFunc) Else SetOPMChangeStop64(callBackFunc) End If End Sub Private Sub OPMChangeEventStart() ' For testing only Application.ShowAlertDialog("OPMEventS tart - Begin Editing") End Sub Private Sub OPMChangeEventStop() ' For testing only Application.ShowAlertDialog("OPMEventS top - Stop Editing") End Sub Private Shared callBackFuncStart As OPMCha ngeEvent = Nothing Private Shared callBackFuncStop As OPMChan geEvent = Nothing ' Modal Command with localized name <CommandMethod("SetOPMEvent")> _ Public Sub SetOPMEvent() ' This method can have any name callBackFuncStart = New OPMChangeEvent (AddressOf OPMChangeEventStart) callBackFuncStop = New OPMChangeEvent( AddressOf OPMChangeEventStop) SetOPMChangeStart(callBackFuncStart) SetOPMChangeStop(callBackFuncStop) End Sub <CommandMethod("ResetOPMEvent")> _ Public Sub ResetOPMEvent() ' This method can have any name callBackFuncStart = Nothing callBackFuncStop = Nothing SetOPMChangeStart(callBackFuncStart) SetOPMChangeStop(callBackFuncStop) End Sub End Class End Namespace
Re: Can't find ModelessOp erationWil l Start Event in Dot net
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Alex,
you are incredible. Now in vb editor I am error free.
I ran the command and right after I hit enter
I get this
************** Exception Text **************
System.EntryPointNotFoundException: Unable to find an entry point named 'SetOPMChangeStart' in DLL 'OPMTest2010x64.arx'.
at VBOPMEvent.COPMEvent.MyCommands.SetOPMChangeStart6
at VBOPMEvent.COPMEvent.MyCommands.SetOPMEvent() in C:\VBOPMEvent\myCommands.vb:line 69
at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker
at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker
at Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.I
at Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk
and Alex line 69 is this line
SetOPMChangeStop(callBackFuncStop)
my system is 2012 64 bit.
Cheers,
Janet.
Re: Can't find ModelessOp erationWil l Start Event in Dot net
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Are you sure you used the correct version of OPMTest2010x64.arx?
I just rechecked with AutoCAD 2012 x64 - no errors.
The correct version is: http://forums.autodesk.com/autodesk/attachments/au
Re: Can't find ModelessOp erationWil l Start Event in Dot net
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Don't kill me Alex,
you were right.
Sorry . I am a girl .
You are really my hero.
I think autodesk should be proud of you.
It works like a charm





