public Db.ObjectId TEST()
{
------код-------
newBtrId19 = bt["Однолинейная"];
------код-------
}
public class BlockJigCmds
{
// Попросите пользователя разместить блок с именем «TEST», показывая его во время перетаскивания.
// Убедитесь, что блок с этим именем существует в чертеже.
[Rt.CommandMethod("BlockJig")]
static public void BlockJig()
{
Ed.Editor ed = acadApp.DocumentManager.MdiActiveDocument.Editor;//Получить доступ к редактору
Db.Database db = ed.Document.Database;
try
{
using (Db.Transaction tr = db.TransactionManager.StartTransaction())
{
Db.BlockTable bt = (Db.BlockTable)(tr.GetObject(db.BlockTableId, Db.OpenMode.ForRead));
Db.BlockTableRecord btr = (Db.BlockTableRecord)tr.GetObject(bt["Однолинейная"], Db.OpenMode.ForRead);
// Создайте Jig и попросите пользователя разместить блок
MyBlockJig blockJig = new MyBlockJig();
Gm.Point3d point;
Ed.PromptResult res = blockJig.DragMe(btr.ObjectId, out point);
if (res.Status == Ed.PromptStatus.OK)
{
// Теперь нужно сделать обычные шаги, чтобы вставить блок в точку, в котором пользователь сделал щелчок
Db.BlockTableRecord curSpace = (Db.BlockTableRecord)tr.GetObject(db.CurrentSpaceId, Db.OpenMode.ForWrite);
Db.BlockReference insert = new Db.BlockReference(point, btr.ObjectId);
curSpace.AppendEntity(insert); tr.AddNewlyCreatedDBObject(insert, true);
}
tr.Commit();
} // using
}
catch (System.Exception ex)
{
ed.WriteMessage(ex.ToString());
}
} // BlockJig()
} // class BlockJigCmds
// Этот Jig покажет данный блок во время перетаскивания.
public class MyBlockJig : Ed.DrawJig
{
public Gm.Point3d _point;
private Db.ObjectId _blockId = Db.ObjectId.Null;
// Показывает блок, пока пользователь не нажмет на него. Первый параметр - это идентификатор определения блока.
// Второй - это щелчок.
public Ed.PromptResult DragMe(Db.ObjectId i_blockId, out Gm.Point3d o_pnt)
{
_blockId = i_blockId;
Ed.Editor ed = acadApp.DocumentManager.MdiActiveDocument.Editor;//Получить доступ к редактору
Ed.PromptResult jigRes = ed.Drag(this);
o_pnt = _point;
return jigRes;
}
// Необходимо переопределить этот метод. Обновление текущей позиции блока.
protected override Ed.SamplerStatus Sampler(Ed.JigPrompts prompts)
{
Ed.JigPromptPointOptions jigOpts = new Ed.JigPromptPointOptions();
jigOpts.UserInputControls = (Ed.UserInputControls.Accept3dCoordinates | Ed.UserInputControls.NullResponseAccepted);
jigOpts.Message = "Выбор точки вставки:";
Ed.PromptPointResult jigRes = prompts.AcquirePoint(jigOpts);
Gm.Point3d pt = jigRes.Value;
if (pt == _point)
return Ed.SamplerStatus.NoChange;
_point = pt;
if (jigRes.Status == Ed.PromptStatus.OK)
return Ed.SamplerStatus.OK;
return Ed.SamplerStatus.Cancel;
}
//Необходимо переопределить этот метод. Мы показываем наш блок в его текущей позиции здесь.
protected override bool WorldDraw(Autodesk.AutoCAD.GraphicsInterface.WorldDraw draw)
{
Db.BlockReference inMemoryBlockInsert = new Db.BlockReference(_point, _blockId);
draw.Geometry.Draw(inMemoryBlockInsert);
inMemoryBlockInsert.Dispose();
return true;
} // WorldDraw()
} // class BlockJig