Active Document - eNotFromThisDocument error

Active Document - eNotFromThisDocument error

Ertqwa
Advocate Advocate
1,959 Views
3 Replies
Message 1 of 4

Active Document - eNotFromThisDocument error

Ertqwa
Advocate
Advocate

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.

0 Likes
Accepted solutions (1)
1,960 Views
3 Replies
Replies (3)
Message 2 of 4

Alfred.NESWADBA
Consultant
Consultant
Accepted solution

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
ISH-Solutions GmbH / Ingenieur Studio HOLLAUS
www.ish-solutions.at ... blog.ish-solutions.at ... LinkedIn ... CDay 2026
------------------------------------------------------------------------------------

(not an Autodesk consultant)
0 Likes
Message 3 of 4

Hallex
Advisor
Advisor

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
0 Likes
Message 4 of 4

Ertqwa
Advocate
Advocate
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.
0 Likes