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

Active Document - eNotFromThisDocument error

3 REPLIES 3
SOLVED
Reply
Message 1 of 4
Ertqwa
1262 Views, 3 Replies

Active Document - eNotFromThisDocument error

Hello Forum,

 

the following code gives me an eNotFromThisDocument error:

 

[LispFunction("MyFunction")]
public ResultBuffer MyFunction(ResultBuffer rbParameter)
{
    ...
    objDocument = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.Open(strPath, false);
    if (!objDocument.IsReadOnly)
    {
        using (objDocumentLock = objDocument.LockDocument())
        {
            Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument = objDocument;
            objDocument.Database.TileMode = true; //  = eNotFromThisDocument.
        }
        objDocument.CloseAndSave(strPath);
        objDocument.Dispose();
    }
    ...
}

 I think it is because the Editor does not get linked to the newly opened drawing. In other words, I can not change tilemode of objDocument, because the drawing from which I called this function is still the active/current drawing. How can I tell AutoCAD that objDocument should be the active/current drawing, so I can change the tilemode, and use Editor functionality, such as SendString()?

 

Thank you.

3 REPLIES 3
Message 2 of 4
Alfred.NESWADBA
in reply to: Ertqwa

Hi,

 

as a guess: in LISP you get lost if the document changed as LISP-code it runs document-based. If you start a LISP in A.DWG you can start to load B.DWG but the lisp-code will not continue in B.DWG.

That you load a drawing and make the this other drawing active within a LISP-function may be the source of the problem.

 

- alfred -

------------------------------------------------------------------------------------
Alfred NESWADBA
Ingenieur Studio HOLLAUS ... www.hollaus.at ... blog.hollaus.at ... CDay 2024
------------------------------------------------------------------------------------
(not an Autodesk consultant)
Message 3 of 4
Hallex
in reply to: Ertqwa

See if this works for yoy, tested on A2010

<code>

[LispFunction("MyFunction")]
public ResultBuffer MyFunction(ResultBuffer rbParameter)
{
Document doc = acadApp.DocumentManager.MdiActiveDocument;
string strPath = .....;
using (DocumentLock objDocumentLock = doc.LockDocument())
{
Document objDocument = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.Open(strPath, false);
if (!objDocument.IsReadOnly)
{
using (DocumentLock pDocumentLock = objDocument.LockDocument())
{

Database pdb = HostApplicationServices.WorkingDatabase;
if (pdb.TileMode == true)
pdb.TileMode = false;
//Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("ctab", "Floor Plan");//debug only

}

objDocument.CloseAndSave(strPath);
objDocument.Dispose();
}

}

return new ResultBuffer(new TypedValue((int)LispDataType.Nil));
}

</code>

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
Message 4 of 4
Ertqwa
in reply to: Hallex

Hello Hallex, with your code I no longer get the "eNotFromThisDocument" error, but that is because "HostApplicationServices.WorkingDatabase" returns the database of the drawing from which I run the lisp function, and not the database from the drawing that I open with "DocumentManager.Open". Thank you for the response.

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