private BlockTableRecord _blockRecord;
public BlockTableRecord BlockRecord
{
get
{
try
{
if (!BlockId.IsNull)
{
using (var tr = AcadHelpers.Database.TransactionManager.StartTransaction())
{
var blkRef = (BlockReference)tr.GetObject(BlockId, OpenMode.ForWrite);
_blockRecord = (BlockTableRecord)tr.GetObject(blkRef.BlockTableRecord, OpenMode.ForWrite);
_blockRecord.BlockScaling = BlockScaling.Uniform;
if (_blockRecord.GetBlockReferenceIds(true, true).Count <= 1)
{
foreach (var objectId in _blockRecord)
{
objectId.GetObject(OpenMode.ForWrite).Erase(true);
}
}
else
{
var blockTable = (BlockTable)tr.GetObject(AcadHelpers.Database.BlockTableId, OpenMode.ForWrite);
_blockRecord = new BlockTableRecord { Name = "*U" };
if (Annotative) _blockRecord.Annotative = AnnotativeStates.True;
blockTable.Add(_blockRecord);
tr.AddNewlyCreatedDBObject(_blockRecord, true);
blkRef.BlockTableRecord = _blockRecord.Id;
}
tr.Commit();
}
using (var tr = AcadHelpers.Database.TransactionManager.StartTransaction())
{
var blkRef = (BlockReference)tr.GetObject(BlockId, OpenMode.ForWrite);
_blockRecord = (BlockTableRecord)tr.GetObject(blkRef.BlockTableRecord, OpenMode.ForWrite);
var matrix3D = Matrix3d.Displacement(-InsertionPoint.GetAsVector()) * GetCurrentMatrixForBlockUpdate();
foreach (var entity in Entities)
{
var transformedCopy = entity.GetTransformedCopy(matrix3D);
_blockRecord.AppendEntity(transformedCopy);
tr.AddNewlyCreatedDBObject(transformedCopy, true);
}
tr.Commit();
}
}
else
{
var matrix3D = Matrix3d.Displacement(-InsertionPoint.GetAsVector()) * GetCurrentMatrixForBlockUpdate();
foreach (var ent in Entities)
{
var transformedCopy = ent.GetTransformedCopy(matrix3D);
_blockRecord.AppendEntity(transformedCopy);
}
}
return _blockRecord;
}
catch (Exception exception)
{
MpExWin.Show(exception);
return null;
}
}
set => _blockRecord = value;
}