public class CustomDwgEntityController : DwgEntityController { public override bool SupportPaint3d { get { return true; } } protected override void OnPaintEntity(DwgEntity entity, PaintEntityEventArgs args) { var e = (CustomDwgEntity)entity; var block = e.GetPlan(args.AnnotationScale); if (block != null) { Vector3D position, scale; double angle; e.Matrix.GetElementView(out position, out scale, out angle); PaintEntityEventArgs.PaintEntities(e, block, position, scale, angle, args); } } public override IEnumerable GetGrips(DwgEntity entity, object cadview) { var e = (CustomDwgEntity)entity; var has_grips = false; var grip = new EntityGrip(((CadView)cadview), entity); grip.Location = e.Position; var z = e.Position.Z; grip.Move += delegate (Vector3D vertex) { e.Position = new Vector3D(vertex.Pos, z); }; yield return grip; } protected override void OnPaintEntity3d(DwgEntity entity, PaintEntityEventArgs args) { var e = (CustomDwgEntity)entity; var dc = args.Pen.DeviceContext; if (args.Pen.DeviceContext.gContains(e.Bounds3d)) { var cache = e.GetCache(); if (cache != null) { var pivot = dc.Pivot; dc.Pivot = e.Position; try { cache.Paint(dc); } finally { dc.Pivot = pivot; } } } } public override double? Fire(DwgEntity entity, Ray3D ray) { var e = (CustomDwgEntity)entity; return e.Fire(ray); } }