Hi everybody! I am learning objectarx now (2011 version) and I want to create my custom object with some custom properties (which can be edited throug com, for example with VBA). There is a good example in SDK called square wrapper. Everything is ok with it, I have added some extra functionality to square and It works fine, but the question is: how to implement add function , which will be adding my custom entity to autocad drawing. The function should be the same as AddCircle or AddLine. Any suggestions?
You can implement a COM class for your application, then add a AddMyEntity method on an interface exposed by that class. The main point is that you have to implement it yourself; AutoCAD has no way of doing it for you.
Sorry, I guess I don't understand the problem. If you already have an entity, and you're writing a function on the entity's COM wrapper class to add the existing entity to a database, then you need some way to specify where to add it, either as an argument to the function or some other way. I would probably use a single argument to specify the block table record to add the entity to.
I meant my function don't work. Here is the code:
STDMETHODIMP CMyClass::AddFunction (DOUBLE val, LONG node, SHORT type)
// TODO: Add your implementation code here
HRESULT hr = S_OK;
hr = pSquare.CoCreateInstance(CLSID_AsdkSquareWrapper);
pSquareBase = pSquare;
hr = pSquareBase->CreateObject();
// Set the square object up for OPM
AcAxPoint3d pnt3d(0, 0, 0);
hr = pSquareBase->AddToDb(squareId, curDoc()->database()->currentSpaceId());
The problem is in the curdoc(). It doesn't know what is the current document. I hope you will understand me =)
You can use acdbHostApplicationServices()->workingDatabase() to get the working database, but your code must handle the case when this function returns NULL.