
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi,
I have to insert a block in a paerspace layout if it is not already present in that layout.
I tried the following function to identify the presence of the block.
But it returns true even if the block is not present in the particular layout but is present in another layout.
private bool checkBlockPresence()
{
try
{
Autodesk.AutoCAD.EditorInput.Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
Autodesk.AutoCAD.DatabaseServices.TypedValue[] acTypValAr;
acTypValAr = new Autodesk.AutoCAD.DatabaseServices.TypedValue[1];
//acTypValAr.SetValue(new Autodesk.AutoCAD.DatabaseServices.TypedValue((int)Autodesk.AutoCAD.DatabaseServices.DxfCode.Start, "INSERT"), 0);
acTypValAr.SetValue(new Autodesk.AutoCAD.DatabaseServices.TypedValue((int)Autodesk.AutoCAD.DatabaseServices.DxfCode.BlockName, "BPC_PrjDrg_Logo"), 0);
Autodesk.AutoCAD.EditorInput.SelectionFilter sf = new Autodesk.AutoCAD.EditorInput.SelectionFilter(acTypValAr);
Autodesk.AutoCAD.EditorInput.PromptSelectionResult selPrompt = ed.SelectAll(sf);
if (selPrompt.Status == Autodesk.AutoCAD.EditorInput.PromptStatus.OK)
{
Autodesk.AutoCAD.EditorInput.SelectionSet acSet = selPrompt.Value;
if (acSet.Count > 0)
{
return true;
}
else
{
return false;
}
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("Error while checkBlockPresence: Type" + ex.GetType() + " Message:" + ex.Message);
}
return false;
}
Also I am using the following function to make the particular layout active before calling the above function.
public void SwitchTo(string Layout)
{
Autodesk.AutoCAD.ApplicationServices.Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Autodesk.AutoCAD.DatabaseServices.Database acCurDb = acDoc.Database;
using (Autodesk.AutoCAD.ApplicationServices.DocumentLock doclock = acDoc.LockDocument())
{
using (Autodesk.AutoCAD.DatabaseServices.Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
try
{
Autodesk.AutoCAD.DatabaseServices.LayoutManager acLayoutMgr;
acLayoutMgr = Autodesk.AutoCAD.DatabaseServices.LayoutManager.Current;
acLayoutMgr.CurrentLayout = Layout;
// System.Windows.Forms.MessageBox.Show("Current Layout = " + acLayoutMgr.CurrentLayout);
acTrans.Commit();
}
catch (Autodesk.AutoCAD.Runtime.Exception ex)
{
Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Exception while changing to " + Layout + "\n Error:" + ex.Message);
}
}
}
}
So my code is similer to
SwithTo("A3")
if(checkBlockPresence() == false) // this always returns true.
{
---------
}
Regards,
Shijith
Solved! Go to Solution.