SectionType st = SectionType.Section2d;
Extents3d ext = source.GeometricExtents; // source - это объект с которого надо сделать снимок
Point3dCollection pts = new Point3dCollection();
double planeElev = Math.Round(ext.MaxPoint.Z + 5, 0);
pts.Add(new Point3d(ext.MaxPoint.X, ext.MaxPoint.Y, planeElev));
pts.Add(new Point3d(ext.MinPoint.X, ext.MinPoint.Y, planeElev));
BlockTableRecord model = EntityExt.GetModel(tr, db);
if (model == null) return false;
Section sec = new Section(pts, Vector3d.YAxis, Vector3d.ZAxis.Negate());
sec.State = SectionState.Plane;
model.AppendEntity(sec);
tr.AddNewlyCreatedDBObject(sec, true);
sec.SetHeight(SectionHeight.HeightAboveSectionLine, 3.0); // я просто скопировал эту строку - смысл не знаю
sec.SetHeight(SectionHeight.HeightBelowSectionLine, 1.0); // я просто скопировал эту строку - смысл не знаю
SectionSettings ss = (SectionSettings)tr.GetObject(sec.Settings, OpenMode.ForWrite);
ss.CurrentSectionType = st;
ObjectIdCollection oic = new ObjectIdCollection();
oic.Add(source.ObjectId);
ss.SetSourceObjects(st, oic);
ss.SetVisibility(st, SectionGeometry.BackgroundGeometry, true); //тоже непонятные настройки
ss.SetHiddenLine(st, SectionGeometry.BackgroundGeometry, false); //тоже непонятные настройки
ss.SetGenerationOptions(st, SectionGeneration.SourceSelectedObjects | SectionGeneration.DestinationFile);
Array flEnts, bgEnts, foregEntities, ftEnts, ctEnts;
sec.GenerateSectionGeometry(source, out flEnts, out bgEnts, out foregEntities, out ftEnts, out ctEnts);