<?xml encoding=”UTF-8″>By Deepak Nadig
We had an issue raised by a customer regarding setting origin(image) during hatch creation.
It was found that origin of hatch has to be set in a transaction other than the one in which it is created for it to work correctly.
Below code can be used for testing :
[CommandMethod(<span>"setOrginHatch"</span>)]
public <span>void</span> <span>setOriginHatch</span>()
{
Document doc = Application<span>.DocumentManager</span><span>.MdiActiveDocument</span>;
Database db = doc<span>.Database</span>;
Editor ed = doc<span>.Editor</span>;
ObjectId mHatchId;
Hatch mHatch = new Hatch();
using (Transaction tr1 = db<span>.TransactionManager</span>.<span>StartTransaction</span>())
{
BlockTable bt = (BlockTable)tr1.<span>GetObject</span>(doc<span>.Database</span><span>.BlockTableId</span>, OpenMode<span>.ForRead</span>);
BlockTableRecord btr = (BlockTableRecord)tr1.<span>GetObject</span>(db<span>.CurrentSpaceId</span>, OpenMode<span>.ForWrite</span>);
Point2d pt = new Point2d(0, 0);
Polyline mPolyline = new Polyline(4);
mPolyline.<span>AddVertexAt</span>(0, pt, 0.0, -1.0, -1.0);
mPolyline<span>.Normal</span> = Vector3d<span>.ZAxis</span>;
mPolyline.<span>AddVertexAt</span>(1, new Point2d(pt<span>.X</span> + 10, pt<span>.Y</span>), 0.0, -1.0, -1.0);
mPolyline.<span>AddVertexAt</span>(2, new Point2d(pt<span>.X</span> + 10, pt<span>.Y</span> + 5), 0.0, -1.0, -1.0);
mPolyline.<span>AddVertexAt</span>(3, new Point2d(pt<span>.X</span>, pt<span>.Y</span> + 5), 0.0, -1.0, -1.0);
mPolyline<span>.Closed</span> = true;
ObjectId mPlineId;
mPlineId = btr.<span>AppendEntity</span>(mPolyline);
tr1.<span>AddNewlyCreatedDBObject</span>(mPolyline, true);
ObjectIdCollection ObjIds = new ObjectIdCollection();
ObjIds.<span>Add</span>(mPlineId);
Vector3d normal = new Vector3d(0.0, 0.0, 1.0);
mHatch<span>.Normal</span> = normal;
mHatch<span>.Elevation</span> = 0.0;
mHatch<span>.PatternScale</span> = 2.0;
mHatch.<span>SetHatchPattern</span>(HatchPatternType<span>.PreDefined</span>, "NET");
mHatch<span>.ColorIndex</span> = 1;
mHatch<span>.PatternAngle</span> = 2;
//trying to set origin here does not work
//Point2d setOrigin = new Point2d(6.698, 2.78);
//mHatch<span>.Origin</span> = setOrigin;
btr.<span>AppendEntity</span>(mHatch);
tr1.<span>AddNewlyCreatedDBObject</span>(mHatch, true);
mHatch<span>.Associative</span> = true;
mHatch.<span>AppendLoop</span>(HatchLoopTypes<span>.Outermost</span>, ObjIds);
mHatch.<span>EvaluateHatch</span>(true);
//get the ObjectId of hatch
mHatchId = mHatch<span>.ObjectId</span>;
tr1.<span>Commit</span>();
}
//to set the origin use another transaction
using (Transaction tr2 = doc<span>.TransactionManager</span>.<span>StartTransaction</span>())
{
Entity ent = (Entity)tr2.<span>GetObject</span>(mHatchId, OpenMode<span>.ForWrite</span>);
if (ent != null)
{
Hatch nHatch = ent as Hatch;
String hatchName = nHatch<span>.PatternName</span>;
Point2d setOrigin = new Point2d(6.698, 2.78);
nHatch<span>.Origin</span> = setOrigin;
nHatch.<span>SetHatchPattern</span>(HatchPatternType<span>.PreDefined</span>, hatchName);
nHatch.<span>EvaluateHatch</span>(true);
nHatch.<span>Draw</span>();
}
tr2.<span>Commit</span>();
}
}


Leave a Reply to Jose GCancel reply