public List <string> SearchSurfaces() { List <string> SurfaceNames = new List <string>(); ObjectIdCollection SurfaceIds = CivilDoc.GetSurfaceIds(); foreach (ObjectId surfaceId in SurfaceIds) { TinSurface oSurface = surfaceId.GetObject(OpenMode.ForRead) as TinSurface; if (!SurfaceNames.Contains(oSurface.Name)) { SurfaceNames.Add(oSurface.Name); } } return(SurfaceNames); }
public ResultBuffer GetSurfaceIds(ResultBuffer resbuf) { var nil = new TypedValue((int)LispDataType.Nil); if (resbuf == null) { CivilDocument currentDocument = CivilApplication.ActiveDocument; ObjectIdCollection SurfaceIds = currentDocument.GetSurfaceIds(); ResultBuffer returnValue = ListObjectIds(SurfaceIds); return(returnValue); } return(new ResultBuffer(nil)); }
private Autodesk.Civil.DatabaseServices.Surface EGSurface() { ObjectIdCollection SurfaceIds = civDoc.GetSurfaceIds(); foreach (ObjectId surfaceId in SurfaceIds) { Autodesk.Civil.DatabaseServices.Surface CivSurface = surfaceId.GetObject(OpenMode.ForRead) as Autodesk.Civil.DatabaseServices.Surface; if (CivSurface.Name == "EG") { return(CivSurface); } } return(null); }
public static Surface ByIndex(int index) { CivilDocument civilDocument = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument; Surface surface = null; ObjectIdCollection surfaceIds = civilDocument.GetSurfaceIds(); //get the current document and database AcadApp.Document doc = AcadApp.Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (Transaction trans = db.TransactionManager.StartTransaction()) { surface = new Surface((Autodesk.Civil.DatabaseServices.Entity)trans.GetObject(surfaceIds[index], OpenMode.ForRead), false); } return(surface); }
public static void FindWaterBowlsByWaterdrop() { CivilDocument civilDoc = CivilApplication.ActiveDocument; Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (Transaction trans = db.TransactionManager.StartTransaction()) { BlockTableRecord modelSpace = trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord; ObjectIdCollection surfaceIds = civilDoc.GetSurfaceIds(); foreach (ObjectId surfaceId in surfaceIds) { TinSurface surf = trans.GetObject(surfaceId, OpenMode.ForRead) as TinSurface; if (surf == null) { continue; } foreach (TinSurfaceVertex vertex in surf.Vertices) { // get the centroid is failing... need to investigate better //Point2d centroid = GetCentroid(new List<Point3d>() { triangle.Vertex1.Location, triangle.Vertex2.Location, triangle.Vertex3.Location }); ObjectIdCollection drops = surf.Analysis.CreateWaterdrop(vertex.Location.Convert2d(new Plane()), Autodesk.Civil.WaterdropObjectType.Polyline3D); if (drops.Count > 1) { Point3d closestPoint = FindClosestPoint(trans, drops[0], drops[1]); Polyline3d curveA = trans.GetObject(drops[0], OpenMode.ForRead) as Polyline3d; if (closestPoint.DistanceTo(curveA.StartPoint) > Tolerance.Global.EqualPoint) { DBPoint newPoint = new DBPoint(); newPoint.Position = closestPoint; modelSpace.AppendEntity(newPoint); trans.AddNewlyCreatedDBObject(newPoint, true); } } // cleanup... foreach (ObjectId drop in drops) { trans.GetObject(drop, OpenMode.ForWrite).Erase(); } } } trans.Commit(); } }
public static void FindWaterBowlsByVertex() { CivilDocument civilDoc = CivilApplication.ActiveDocument; Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (Transaction trans = db.TransactionManager.StartTransaction()) { BlockTableRecord modelSpace = trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord; ObjectIdCollection surfaceIds = civilDoc.GetSurfaceIds(); foreach (ObjectId surfaceId in surfaceIds) { TinSurface surf = trans.GetObject(surfaceId, OpenMode.ForRead) as TinSurface; if (surf == null) { continue; } foreach (TinSurfaceVertex vertex in surf.Vertices) { // start assuming is a low point bool isLowest = true; // now look at the other end of each Edge from the vertex foreach (TinSurfaceEdge edge in vertex.Edges) { TinSurfaceVertex otherVertice = (edge.Vertex1.Location.DistanceTo(vertex.Location) < Tolerance.Global.EqualPoint ? edge.Vertex2 : edge.Vertex1); // is the other vertice lower? if (otherVertice.Location.Z < vertex.Location.Z) { isLowest = false; // other is lower, therefore this is not the lowest } } // if is the lowest, add a point there if (isLowest) { DBPoint newPoint = new DBPoint(); newPoint.Position = vertex.Location; modelSpace.AppendEntity(newPoint); trans.AddNewlyCreatedDBObject(newPoint, true); } } } trans.Commit(); } }
public static List <Surface> GetSurfaces(Autodesk.AutoCAD.DynamoNodes.Document document) { List <Surface> surfaces = new List <Surface>(); Autodesk.AutoCAD.ApplicationServices.Document acDoc = document.AcDocument; Database db = acDoc.Database; CivilDocument civilDocument = CivilDocument.GetCivilDocument(db); ObjectIdCollection surfaceIds = civilDocument.GetSurfaceIds(); using (Transaction trans = db.TransactionManager.StartTransaction()) { foreach (ObjectId surfaceId in surfaceIds) { surfaces.Add(new Surface((Autodesk.Civil.DatabaseServices.Entity)trans.GetObject(surfaceId, OpenMode.ForRead), false)); } } return(surfaces); }
public ObjectId findSurface(string surfaceName) { CivilDocument doc = CivilApplicationManager.ActiveCivilDocument; using (Transaction tr = CivilApplicationManager.StartTransaction()) { foreach (ObjectId surfaceId in doc.GetSurfaceIds()) { C3DLandDb.Surface surface = surfaceId.GetObject(OpenMode.ForRead) as C3DLandDb.Surface; if (surface.Name == surfaceName) { return(surfaceId); } } } return(ObjectId.Null); }
public static Surface ByName(string surfaceName) { CivilDocument civilDocument = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument; Surface surface = null; ObjectIdCollection surfaceIds = civilDocument.GetSurfaceIds(); //get the current document and database AcadApp.Document doc = AcadApp.Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (Transaction trans = db.TransactionManager.StartTransaction()) { foreach (ObjectId objectId in surfaceIds) { surface = new Surface((Autodesk.Civil.DatabaseServices.Entity)trans.GetObject(objectId, OpenMode.ForRead), false); if (surface.Name != surfaceName) { surface = null; } } } return(surface); }
/// <summary> /// Get the list of surfaces and search by name /// </summary> /// <param name="name">Name of surface to search. /// Case sensitive.</param> /// <returns>ObjectId of the surface</returns> public static ObjectId GetSurfaceId(string name) { Database db = Application.DocumentManager. MdiActiveDocument.Database; using (Transaction trans = db. TransactionManager.StartTransaction()) { CivilDocument civilDoc = CivilApplication.ActiveDocument; ObjectIdCollection surfaceIds = civilDoc.GetSurfaceIds(); foreach (ObjectId surfaceId in surfaceIds) { CivilSurface surface = trans.GetObject(surfaceId, OpenMode.ForRead) as CivilSurface; if (surface.Name == name) { return(surface.ObjectId); } } } return(ObjectId.Null); }
public static Dictionary <string, object> BySurfaces(Autodesk.AutoCAD.DynamoNodes.Document doc_dyn, List <string> TopSurfacesNames, List <string> BottomSurfacesNames, string PathToFolderSaveLog, string layer = "0", string Id_separator = "___") { Document doc = doc_dyn.AcDocument; CivilDocument c3d_doc = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument; //Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; //Internal variables: //For logging processes string PathToSaveLog = PathToFolderSaveLog + $"\\SolidsBySurfaces_{Guid.NewGuid()}.log"; //File.Create(PathToSaveLog); void SaveLog(string save_data) { File.AppendAllText(PathToSaveLog, save_data); } //For out data Dictionary <string, object> out_data = new Dictionary <string, object>(); List <ObjectId> solids_instances = new List <ObjectId>(); List <string> solids_ids = new List <string>(); ObjectIdCollection SurfaceIds = c3d_doc.GetSurfaceIds(); ObjectId GetSurfaceByName(string name) { foreach (ObjectId id in SurfaceIds) { TinSurface oSurface = id.GetObject(OpenMode.ForRead) as TinSurface; if (oSurface.Name == name) { return(id); } } return(ObjectId.Null); } using (DocumentLock acDocLock = doc.LockDocument()) { using (Transaction tr = db.TransactionManager.StartTransaction()) { for (int i1 = 0; i1 < TopSurfacesNames.Count; i1++) { string TopName = TopSurfacesNames[i1]; string BottomName = BottomSurfacesNames[i1]; ObjectId top_surf_id = GetSurfaceByName(TopName); ObjectId bottom_surf_id = GetSurfaceByName(BottomName); string surfaces_id = TopName + Id_separator + BottomName; if (top_surf_id != ObjectId.Null && bottom_surf_id != ObjectId.Null) { TinSurface top_surf = top_surf_id.GetObject(OpenMode.ForRead) as TinSurface; TinSurface bottom_surf = bottom_surf_id.GetObject(OpenMode.ForRead) as TinSurface; //bool UseCurrentFile = string.IsNullOrEmpty(PathToSaveSolids); ObjectIdCollection out_solids = null; try { out_solids = top_surf.CreateSolidsAtSurface(bottom_surf_id, layer, 0); } catch { SaveLog($"Wrong operation CreateSolids for top = {TopName} and bottom = {BottomName}"); } if (out_solids != null) { string ids = $"For {surfaces_id} was created nest solids (Handle): \n"; foreach (ObjectId one_id in out_solids) { string obj_handle = ((ObjectId)one_id).Handle.ToString(); ids += obj_handle + "\t"; solids_instances.Add(one_id); solids_ids.Add(surfaces_id); } SaveLog(ids + "\n"); } } else { SaveLog($"Invalid names for top = {TopName} and bottom = {BottomName}"); } } tr.Commit(); } } return(new Dictionary <string, object> { { "Solid's instances", solids_instances }, { "Solid's ids (by surfaces)", solids_ids } }); }
[CommandMethod("expsurfpts")] //Comanda pentru exportarea intr-un fisier PENZD.csv a punctelor unei suprafete public void ExpSurfPts() { CivilDocument civDoc = CivilApplication.ActiveDocument; Document acadDoc = Application.DocumentManager.MdiActiveDocument; Database db = HostApplicationServices.WorkingDatabase; Editor ed = acadDoc.Editor; ObjectIdCollection surfIds = civDoc.GetSurfaceIds(); //Verificarea existentei a cel putin unei suprafete if (surfIds.Count == 0) { ed.WriteMessage("\nNo Surfaces found!"); return; } using (Transaction trans = db.TransactionManager.StartTransaction()) { //Selectarea suprafetei Autodesk.Civil.DatabaseServices.Surface suprafata; if (surfIds.Count == 1) { suprafata = (Autodesk.Civil.DatabaseServices.Surface)trans.GetObject(surfIds[0], OpenMode.ForRead); } else { PromptEntityOptions PrEntOpt = new PromptEntityOptions("\nSelect Surface: "); PrEntOpt.AllowNone = false; PrEntOpt.SetRejectMessage("\nSelected object is not a Civil3D surface!"); PrEntOpt.AddAllowedClass(typeof(Autodesk.Civil.DatabaseServices.Surface), false); PromptEntityResult PrEntRes = ed.GetEntity(PrEntOpt); if (PrEntRes.Status != PromptStatus.OK) { ed.WriteMessage("\nAborting!"); return; } suprafata = (Autodesk.Civil.DatabaseServices.Surface)trans.GetObject(PrEntRes.ObjectId, OpenMode.ForRead); } //Obtinerea punctelor suprafetei List <string> puncte = new List <string>(); int nr = 0; if (suprafata is Autodesk.Civil.DatabaseServices.TinSurface) { Autodesk.Civil.DatabaseServices.TinSurface suprafTIN = (Autodesk.Civil.DatabaseServices.TinSurface)suprafata; //Autodesk.Civil.DatabaseServices.TinSurfaceVertexCollection vertecsiTIN = suprafTIN.Vertices; foreach (Autodesk.Civil.DatabaseServices.TinSurfaceVertex V in suprafTIN.Vertices) { nr = nr + 1; puncte.Add(nr.ToString() + "," + V.Location.ToString().Replace("(", "").Replace(")", "") + "," + suprafata.Name); } } else if (suprafata is Autodesk.Civil.DatabaseServices.GridSurface) { Autodesk.Civil.DatabaseServices.GridSurface suprafGRID = (Autodesk.Civil.DatabaseServices.GridSurface)suprafata; foreach (Autodesk.Civil.DatabaseServices.GridSurfaceVertex V in suprafGRID.Vertices) { nr = nr + 1; puncte.Add(nr.ToString() + "," + V.Location.ToString().Replace("(", "").Replace(")", "") + "," + suprafata.Name); } } else { ed.WriteMessage("\nSurface type not supported! Aborting."); return; } ////TEST: se listeaza punctele //foreach(string p in puncte) ed.WriteMessage(p); //Selectia fisierului .csv si scrierea punctelor PromptSaveFileOptions PrFileOpt = new PromptSaveFileOptions("\nSelect file for point export: "); PrFileOpt.Filter = ("CSV file (*.csv)|*.csv"); string caleDocAcad = HostApplicationServices.Current.FindFile(acadDoc.Name, acadDoc.Database, FindFileHint.Default); //PrFileOpt.InitialDirectory = caleDocAcad.Remove(caleDocAcad.LastIndexOf("\\"); PrFileOpt.InitialFileName = caleDocAcad.Replace(caleDocAcad.Substring(caleDocAcad.LastIndexOf('.')), ".csv"); ed.WriteMessage(PrFileOpt.InitialDirectory); PromptFileNameResult PrFileRes = ed.GetFileNameForSave(PrFileOpt); if (PrFileRes.Status != PromptStatus.OK) { ed.WriteMessage("\nPoint export unsuccessful!"); return; } StreamWriter scriitor = new StreamWriter(PrFileRes.StringResult); foreach (string p in puncte) { scriitor.WriteLine(p); } scriitor.Dispose(); } }