Hi,
Thanks for the solution, It is very useful. But I am implementing using Drawjig instead of entityJig. Is there any equivalent method for Update in Drawjig as update method is not available in Drawjig class.
Thanks in advance.
@_gile wrote:
Hi,
Here's a simple example (just replace "blockName" with the block name).
[CommandMethod("TEST")]
public static void Test()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
using (var tr = db.TransactionManager.StartTransaction())
{
var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
if (!bt.Has("blockName"))
return;
using (var br = new BlockReference(Point3d.Origin, bt["blockName"]))
{
br.TransformBy(ed.CurrentUserCoordinateSystem);
var jig = new BlockJig(br, Point3d.Origin, new Point3d(10.0, 0.0, 0.0));
var pr = ed.Drag(jig);
if (pr.Status == PromptStatus.OK)
{
var curSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
curSpace.AppendEntity(br);
tr.AddNewlyCreatedDBObject(br, true);
}
}
tr.Commit();
}
}
class BlockJig : EntityJig
{
BlockReference br;
LineSegment3d line;
Point3d dragPt;
public BlockJig(BlockReference br, Point3d pt1, Point3d pt2) : base(br)
{
this.br = br;
line = new LineSegment3d(pt1, pt2);
}
protected override SamplerStatus Sampler(JigPrompts prompts)
{
var options = new JigPromptPointOptions("\nInsertion point: ");
options.UserInputControls =
UserInputControls.Accept3dCoordinates |
UserInputControls.UseBasePointElevation;
var result = prompts.AcquirePoint(options);
if (result.Value.IsEqualTo(dragPt))
return SamplerStatus.NoChange;
dragPt = result.Value;
return SamplerStatus.OK;
}
protected override bool Update()
{
br.Position = line.GetClosestPointTo(dragPt).Point;
return true;
}
}
@_gile wrote:
Hi,
Here's a simple example (just replace "blockName" with the block name).
[CommandMethod("TEST")]
public static void Test()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
using (var tr = db.TransactionManager.StartTransaction())
{
var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
if (!bt.Has("blockName"))
return;
using (var br = new BlockReference(Point3d.Origin, bt["blockName"]))
{
br.TransformBy(ed.CurrentUserCoordinateSystem);
var jig = new BlockJig(br, Point3d.Origin, new Point3d(10.0, 0.0, 0.0));
var pr = ed.Drag(jig);
if (pr.Status == PromptStatus.OK)
{
var curSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
curSpace.AppendEntity(br);
tr.AddNewlyCreatedDBObject(br, true);
}
}
tr.Commit();
}
}
class BlockJig : EntityJig
{
BlockReference br;
LineSegment3d line;
Point3d dragPt;
public BlockJig(BlockReference br, Point3d pt1, Point3d pt2) : base(br)
{
this.br = br;
line = new LineSegment3d(pt1, pt2);
}
protected override SamplerStatus Sampler(JigPrompts prompts)
{
var options = new JigPromptPointOptions("\nInsertion point: ");
options.UserInputControls =
UserInputControls.Accept3dCoordinates |
UserInputControls.UseBasePointElevation;
var result = prompts.AcquirePoint(options);
if (result.Value.IsEqualTo(dragPt))
return SamplerStatus.NoChange;
dragPt = result.Value;
return SamplerStatus.OK;
}
protected override bool Update()
{
br.Position = line.GetClosestPointTo(dragPt).Point;
return true;
}
}