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

How to using Modeless form in AutoCAD

2 REPLIES 2
SOLVED
Reply
Message 1 of 3
$o-olitarY
802 Views, 2 Replies

How to using Modeless form in AutoCAD

Hello, 

I have a problem.

I want to AutoCAD do not lock it's space, when my Form is shown on display.

But I have an exception when I use modeless dialog.

 

public void MyCommand ()
{
  //-------------------------------------------------

  // Using this code, my program works fine, but locks modal space of AutoCAD

  System.Windows.Forms.Application.EnableVisualStyles ();
  System.Windows.Forms.Application.Run (new  Form1 ());

 

  // I want to use this instruction to do not lock modal space
  // Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog (new Form1 ());
  //------------------------------------------------- 
}

 

If I use modeless dialog I can read and write from acad prompt and create block; BUT I can't create BlockReference. 

I get an exception "eLockViolation" in the next code instructions:

 

//------------------------------------------------------------------------------------------------------------------------------

public void CreateBlockReference (string strBlockName, Point3d Origin)
{
  using( Transaction t = db.TransactionManager.StartTransaction () )
  {
   BlockTable btTable = (BlockTable)t.GetObject (db.BlockTableId, OpenMode.ForRead);  // <--- EXCEPTION

   BlockTableRecord btrModelSpace = (BlockTableRecord)t.GetObject (
     btTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

   if( !btTable.Has (strBlockName) )
   {
     ed.WriteMessage (string.Format (msgs.BlockNoExist,strBlockName));
     throw new Exception (ErrorStatus.MissingBlockName, 
     string.Format (msgs.BlockNoExist,strBlockName));
   }
   ObjectId myBlockId = btTable[strBlockName];

   BlockReference brRefBlock = new BlockReference (Origin, myBlockId);

   btrModelSpace.AppendEntity (brRefBlock);
   t.AddNewlyCreatedDBObject (brRefBlock, true);

   t.Commit ();
  } // end using
}

//------------------------------------------------------------------------------------------------------------------------------

 

Please, help me.

Thank you.

2 REPLIES 2
Message 2 of 3
$o-olitarY
in reply to: $o-olitarY

I found right answer:

 

/// <summary></summary>
/// <param name="strBlockName"></param>
/// <param name="Origin"></param>
public void CreateBlockReference (string strBlockName, Point3d Origin)
{
  DocumentLock dl = Application.DocumentManager.MdiActiveDocument.LockDocument ();

  using( Transaction t = db.TransactionManager.StartTransaction () )
 {
  BlockTable btTable = (BlockTable)t.GetObject (db.BlockTableId, OpenMode.ForRead);

  BlockTableRecord btrModelSpace = (BlockTableRecord)t.GetObject (
    btTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

  if( !btTable.Has (strBlockName) )
  {
    ed.WriteMessage (string.Format (msgs.BlockNoExist,strBlockName));
    throw new Exception (ErrorStatus.MissingBlockName, 
    string.Format (msgs.BlockNoExist,strBlockName));
  }
  ObjectId myBlockId = btTable[strBlockName];

 

  BlockReference brRefBlock = new BlockReference (Origin, myBlockId);
 
  btrModelSpace.AppendEntity (brRefBlock);
  t.AddNewlyCreatedDBObject (brRefBlock, true);

  t.Commit ();
  } // end using
  dl.Dispose ();
}

Message 3 of 3
Daniel.Du
in reply to: $o-olitarY

yes, use DocumentLock in a model or modeless dialouge.



Daniel Du
Developer Technical Services
Autodesk Developer Network

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