Hi KerryBrown,
Thanks for your response.
Could you please see the below sample code:
public bool SelectBlock(string sStartNumber, bool bStartToRenumbering, out string err_msg)
{
bool bSelectBlock = true;
err_msg = "";
string sResult = "";
Database acCurDb = m_acad_doc.Database;
SelectionSet acSSet = null;
string sSelectedBlk_FixtureLocID_AttVal = "";
string sFixture_Code_Val = "";
PromptSelectionOptions psoOptions = new PromptSelectionOptions();
psoOptions.SingleOnly = true;
psoOptions.SinglePickInSpace = true;
//Clear Dictionary of Selected Block list
dicSelected_FixtureType_List.Clear();
acSSPrompt = null;
//This is the filter for blockreferences
//SelectionFilter Filter = new SelectionFilter(new TypedValue[] { new TypedValue(0, "INSERT") });
bool bStopBlkSelection = false;
Autodesk.AutoCAD.Internal.Utils.SetFocusToDwgView();
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// Request for objects to be selected in the drawing area
acSSPrompt = m_acad_doc.Editor.GetSelection(psoOptions);
acSSet = acSSPrompt.Value;
if (acSSet != null)
{
iSelectionCount = iSelectionCount + 1;
int icount = acSSet.Count;
// If the prompt status is OK, objects were selected
if (acSSPrompt.Status == PromptStatus.OK)
{
acSSet = acSSPrompt.Value;
// Step through the objects in the selection set
int iSelCount = acSSet.Count;
string sNewFixtureCode = "";
foreach (SelectedObject acSSObj in acSSet)
{
// Check to make sure a valid SelectedObject object was returned
if (acSSObj != null)
{
DBObject objDB = acTrans.GetObject(acSSObj.ObjectId, OpenMode.ForRead);
if (objDB is BlockReference)
{
Entity acEnt = acTrans.GetObject(acSSObj.ObjectId, OpenMode.ForRead) as Entity;
BlockReference blkRef = acEnt as BlockReference;
long lBlkObjHandle = blkRef.Handle.Value;
ObjectId lBlkObjID = blkRef.Id;
bool bFixtureCodeFound = false;
string sFixtureTypeCode = "";
string sFixtureCodeMaxSequenceNo = "";
string sMaxFixtureLocID = "";
using (DocumentLock docLock = m_acad_doc.LockDocument())
{
if (clsFixtureXrecordeObj.IsThisBlockHasXrecord(objDB.Id))
{
bFixtureCodeFound = clsFixtureXrecordeObj.readSpecifiedXrecord(objDB.Id, clsPublicVariables.sFixture_Code, out sFixture_Code_Val, out inner_table);
if (bFixtureCodeFound == true)
{
if (sFixture_Code_Val != "")
{
bool sLoc_Att_Val = clsFixtureXrecordeObj.readSpecifiedXrecord(objDB.Id, clsPublicVariables.sFixture_Location_ID, out sSelectedBlk_FixtureLocID_AttVal, out inner_table);
//Checking Fixture Code and Location ID
if (sSelectedBlk_FixtureLocID_AttVal != "")
{
if(sSelectedBlk_FixtureLocID_AttVal.Substring(0,2) != sFixture_Code_Val.Substring(2,2))
{
sSelectedBlk_FixtureLocID_AttVal = sFixture_Code_Val.Substring(2, 2) + sSelectedBlk_FixtureLocID_AttVal.Substring(2, 3);
}
}
if (sSelectedBlk_FixtureLocID_AttVal.Trim() == "")
{
//getting Fixture type from Fixture Code.
sNewFixtureCode = sFixture_Code_Val.Substring(2, 2);
bool bGenerate_update = Generate_Update_Loc_ID(sNewFixtureCode, sStartNumber, blkRef, lBlkObjID, bStartToRenumbering, sSelectedBlk_FixtureLocID_AttVal, out err_msg);
if (bGenerate_update == false)
{
bSelectBlock = false;
break;
}
}
else
{
if (bStartToRenumbering == true && sStartNumber != "")
{
//Getting Fixture Type Code
sNewFixtureCode = sFixture_Code_Val.Substring(2, 2);
bool bChkBoxStatus = false;
bool bStatus = false;
if (clsPublicVariables.bCheckBoxbChkBoxOverWriteScreen == false)
{
//displaying overwrite screen.
bStatus = DisplayLocIDOverWriteScreen(ref bChkBoxStatus, sNewFixtureCode);
}
else
{
//Wantendly setting 'TRUE' because already checked 'CHECKBOX' and selected 'YES' button on overwrite screen.
bStatus = true;
}
//Checking the 'YES' and 'NO' options on LOC id Over write screen
if (bStatus == true)
{
bSelectBlock = Generate_Update_Loc_ID(sNewFixtureCode, sStartNumber, blkRef, lBlkObjID, bStartToRenumbering, sSelectedBlk_FixtureLocID_AttVal, out err_msg);
if (bSelectBlock == false)
{
bSelectBlock = false;
break;
}
}
else
{
//Display Attributes on Renumbering screen
ShowAttributesOnUserForm("", "", "", "", "");
}
}
else
{
//Getting Max Sequence number from Dictionary.
sFixtureTypeCode = sSelectedBlk_FixtureLocID_AttVal.Substring(0, 2);
sFixtureCodeMaxSequenceNo = dicExist_Fixture_Types[sFixtureTypeCode];
sMaxFixtureLocID = sFixtureTypeCode + sFixtureCodeMaxSequenceNo;
string sErr_msg = "Location ID to the Fixture is already assigned" + Environment.NewLine + " To change the Location ID explicitly, Please use the Start renumbering option.";
//Display Attributes on Renumbering screen
ShowAttributesOnUserForm("", sSelectedBlk_FixtureLocID_AttVal, "", sErr_msg, sMaxFixtureLocID);
clsMessage.ShowInformationMessage(sErr_msg);
ShowAttributesOnUserForm("", "", "", "", "");
bFixtureCodeFound = true;
}
}
}
else
{
sResult = "Not Assigned : Not an IFP Block.";
//Display Attributes on Renumbering screen
ShowAttributesOnUserForm("", "", "", sResult, "");
}
}
}
else
{
sResult = "Not Assigned : Not an IFP Block.";
//Display Attributes on Renumbering screen
ShowAttributesOnUserForm("", "", "", sResult, "");
}
}
}
}
}
}
}
else
{
}
//checking the Mouse selection on floor plan wheather Error(Right Click) or Not
if (acSSPrompt.Status == PromptStatus.Cancel)
{
bStopBlkSelection = true;
//Display Attributes on Renumbering screen
ShowAttributesOnUserForm("", "", "", "","");
}
acTrans.Commit();
acSSPrompt = null;
}
//Checking the Mouse selection on floor plan
if (bStopBlkSelection == false)
{
//Calling again
if (bSelectBlock == true)
{
bSelectBlock = SelectBlock(sStartNumber, bStartToRenumbering, out err_msg);
if (bSelectBlock == false)
{
bSelectBlock = false;
}
}
}
return bSelectBlock;
}
Thanks in Advance.
Regards,
Manohar.