public CivilTinSurface CreateSelectedSurface(Autodesk.AutoCAD.DatabaseServices.ObjectId oid) { try { ACADLogging.LogMyExceptions("Start CreateSelectedSurface Method"); string surfaceName = GetPolyLayerFromOid((oid)); string surfaceStyleName = GetPolyLayerFromOid((oid)); //layer and style name are the same name. // m_polylinesurfaces = new Dictionary<ObjectId, string>(); int i = 0; //string tempSurface = "s-" + surfaceName.ToLower(); string tempSurface = surfaceName.ToUpper(); while (CivilTinSurface.FindCivilTinSurfaceByName(tempSurface, "")) { tempSurface = string.Format("{0}-{1}", surfaceName, i++); } surfaceName = tempSurface; if (!SurfaceStyleManager.Exists(surfaceStyleName)) { string msg = String.Format("\nSurface Style '{0}' doesn't exist. Creating it with default values.", surfaceStyleName); //EditorUtils.Write(msg); SurfaceStyleManager.CreateDefault(surfaceStyleName); } CivilTinSurface surface = new CivilTinSurface(surfaceName, surfaceStyleName); m_polylinesurfaces.Add(CivilTinSurface.FindCivilTinSurfaceByName(surface.Name), surfaceName); m_polylinesonly.Add(oid, surfaceName); return(surface); } catch (System.Exception ex) { ACADLogging.LogMyExceptions("CreateSelectedSurface" + ex.Message); } return(null); }
public bool PasteAllSurfaces(Autodesk.Civil.DatabaseServices.Surface sHole) { ObjectId objectId = ObjectId.Null; try { foreach (KeyValuePair <ObjectId, string> id in m_polylinesurfaces) { objectId = id.Key; try { TestPasteSurface(sHole, CivilTinSurface.FindSurfaceBySurfaceId(objectId)); } catch (System.Exception e) { Console.WriteLine(e); } } return(true); } catch (System.Exception e) { Console.WriteLine(e); } return(false); }
public bool CreateOverallSurface() { string surfaceName = EditorUtils.PromptForString("\nEnter surface name: "); if (String.IsNullOrEmpty(surfaceName)) { surfaceName = "OVERALLSURFACE"; } // if (surfaceName == String.Empty) EditorUtils.Write("\nERROR: Invalid name for surface."); string surfaceStyleName = EditorUtils.PromptForString("\nEnter surface style name: "); // if (surfaceStyleName == String.Empty) EditorUtils.Write("\nERROR: Invalid style name for surface style."); if (!SurfaceStyleManager.Exists(surfaceStyleName)) { string msg = String.Format("\nSurface Style '{0}' doesn't exist. Creating it with default values.", surfaceStyleName); // EditorUtils.Write(msg); SurfaceStyleManager.CreateDefault(surfaceStyleName); } CivilTinSurface surface = new CivilTinSurface(surfaceName, surfaceStyleName); surface.AddPoints(SurfaceDataProvider.GenerateRandomPoints(100, 100, 100, 10)); return(true); }
public static CivilTinSurface FindSurfaceIdForPolylineV2(ObjectId oid) { try { foreach (KeyValuePair <ObjectId, string> id in m_polylinesonly) { if (id.Key == null) { continue; } if (oid == id.Key) { Debug.WriteLine("Match iod" + oid + "and" + id.Key); return(CivilTinSurface.CreateFromExisting(id.Value)); } Debug.WriteLine("NO match iod" + oid + "and" + id.Key); } } catch (System.Exception e) { ACADLogging.LogMyExceptions("FindSurfaceIdForPolylineV2" + e.Message); } return(null); }
public CivilTinSurface FindSurfaceIdForPolylineV1(ObjectId oid) { try { foreach (KeyValuePair <ObjectId, string> id in m_polylinesurfaces) { if (id.Key == null) { continue; } if (oid == id.Key) { Debug.WriteLine("Match iod" + oid + "and" + id.Key); return(CivilTinSurface.CreateFromExisting(id.Value)); } Debug.WriteLine("NO match iod" + oid + "and" + id.Key); } } catch (System.Exception e) { Console.WriteLine(e); } return(null); }
public bool AddBoundariesForSurfaces(ObjectIdCollection polylines) { try { foreach (KeyValuePair <ObjectId, string> pair in m_polylinesonly) { try { //Test for Complexity if (PolylineUtils.ExcludePolyBasedOnComplexity(pair.Key)) { continue; } #region Create Outer Boundary PGA.Civil.Logging.ACADLogging.LogMyExceptions("Start AddBoundariesForSurfaces"); using (Transaction tr = CivilApplicationManager.StartTransaction()) { ObjectId lObjectId = new ObjectId(); lObjectId = CivilTinSurface.FindCivilTinSurfaceByName(pair.Value); //1. Create new surface if no existing surface passed in TinSurface surface = lObjectId.GetObject(OpenMode.ForRead) as TinSurface; //2. Store boundary ObjectIdCollection boundaryEntities = new ObjectIdCollection(); boundaryEntities = GetObjectIdCollectionFromEntity(pair.Key); //3. Access the BoundariesDefinition object from the surface object SurfaceDefinitionBoundaries surfaceBoundaries = surface.BoundariesDefinition; //4. now add the boundary to the surface (for non-destructive set true) try { surfaceBoundaries.AddBoundaries(boundaryEntities, 1.0, SurfaceBoundaryType.Outer, true); } catch (System.Exception) { PGA.Civil.Logging.ACADLogging.LogMyExceptions("Error AddBoundariesForSurfaces"); } PGA.Civil.Logging.ACADLogging.LogMyExceptions("End AddBoundariesForSurfaces"); tr.Commit(); } #endregion } catch (System.Exception ex) { ACADLogging.LogMyExceptions("Error in loop AddBoundariesForSurfaces" + ex.Message); } } return(true); } catch (System.Exception ex) { ACADLogging.LogMyExceptions("Error in AddBoundariesForSurfaces" + ex.Message); } return(false); }
public void RebuildAllSurfaces() { try { var polylines = new ObjectIdCollection(); Dictionary <ObjectId, ObjectIdCollection> m_dict; var surfaceManager = new PasteSurfaces(); m_dict = new Dictionary <ObjectId, ObjectIdCollection>(); if (CivilTinSurface.FindCivilTinSurface("All")) { #region get polylines and generate surfaces and boundaries polylines = surfaceManager.GetAllPolyLines(); #endregion ObjectIdCollection internalPLines = null; foreach (ObjectId baseObj in polylines) { #region store the internal boundaries for the selected base object in dict if (GetPolyFromObjId(baseObj) == null) { continue; } internalPLines = surfaceManager.GetAllInternalPolyLinesToSelected(baseObj, polylines, minpolyseparation); m_dict.Add(baseObj, internalPLines); #endregion } #region Iterate through inner boundaries CivilTinSurface lsurface = null; foreach (KeyValuePair <ObjectId, ObjectIdCollection> innerbdy in m_dict) { #region Removed //#region Create Surface for that Base Polyline and Add outer boundary //if ((lsurface = (surfaceManager.CreateSelectedSurface(baseObj))) == null) // throw new Exception("CreateSelectedSurface Failed!"); //lsurface.AddStandardBoundary(baseObj, "OuterBoundary"); //#endregion #endregion if (innerbdy.Value == null) { continue; } ObjectId outerPline = innerbdy.Key; ObjectIdCollection innerIdCollection = innerbdy.Value; lsurface = PasteSurfaces.FindSurfaceIdForPolylineV2(outerPline); if (lsurface == null) { continue; } #region Interate Internal Polylines to add breaklines and boundaries if (innerIdCollection != null) { foreach (ObjectId pLines in innerIdCollection) { try { #region Breaklines Deprecated //Breaklines removed due to overlapping //lsurface.AddStandardBreakline // (PasteSurfaces.GetPolyPointsByObjectId(pLines), "Breakline-"); #endregion lsurface.AddStandardInnerBoundary(pLines, "Boundary-"); } catch (NullReferenceException e) { ACADLogging.LogMyExceptions("AddAsInnerBoundary Failed: " + e.Message); //throw new Exception(e.Message); } internalPLines = null; } } #endregion #region Rebuild Surfaces if (lsurface != null) { CivilTinSurface.RebuildSurfaceBySurfaceName(lsurface.Name); } #endregion #region Regenerate Graphics EditorUtils.Regen(); #endregion } #endregion internalPLines = null; } else { throw new FileNotFoundException( "Did not find the surface ALL!"); } EditorUtils.Write("\nRebuild Surfaces Complete!\n"); } catch (NullReferenceException e) { EditorUtils.Write(e.StackTrace); ACADLogging.LogMyExceptions(e.Message); } catch (Autodesk.AutoCAD.Runtime.Exception e) { ACADLogging.LogMyExceptions(e.Message); } catch (Exception e) { ACADLogging.LogMyExceptions(e.Message); } }
public void CreateAllSurfaces() { try { var polylines = new ObjectIdCollection(); Dictionary <ObjectId, ObjectIdCollection> m_dict; var surfaceManager = new PasteSurfaces(); m_dict = new Dictionary <ObjectId, ObjectIdCollection>(); #region Steps //1 Create Overall Surface //2 Create new Surface with Defaults //3 Open new Surface to Paste Overall Surface //4 Select Surface to Paste Overall Surface Into //5 Add Boundary to New Surface //1 Select All Polylines //2 Determine if boundaries are needed to be type inner or outer //3 Filter Polylines based on layer name. May be able to know the type. #endregion try { sminpolyseparation = EditorUtils.PromptForString("\nEnter polyline separation distance (0.05'): "); if (String.IsNullOrEmpty(sminpolyseparation)) { minpolyseparation = 0.05; } else { minpolyseparation = Convert.ToDouble(sminpolyseparation); } } catch (Exception) { minpolyseparation = 0.05; //set default } if (CivilTinSurface.FindCivilTinSurface("All")) { #region Insert Point Cloud into Overall Surface #endregion #region get polylines and generate surfaces and boundaries polylines = surfaceManager.GetAllPolyLines(); //Create a surface hive to generate a TIN surface if (!surfaceManager.CreateSurfaceForPolylines(polylines)) { throw new SystemException("Create surface for polylines failed!"); } if (!surfaceManager.PasteAllSurfaces(CivilTinSurface.GetCivilSurfaceBySurfaceName("All"))) { throw new SystemException("Pasting Surfaces failed!"); } if (!surfaceManager.AddBoundariesForSurfaces(polylines)) { throw new SystemException("Add overall Boundaries for surfaces failed!"); } #endregion ACADLogging.LogMyExceptions("Store boundaries to Object Dictionary"); ObjectIdCollection internalPLines = null; foreach (ObjectId baseObj in polylines) { #region store the internal boundaries for the selected base object in dict if (GetPolyFromObjId(baseObj) == null) { continue; } internalPLines = surfaceManager.GetAllInternalPolyLinesToSelected(baseObj, polylines, minpolyseparation); m_dict.Add(baseObj, internalPLines); //if (internalPLines == null) continue; #endregion } #region Iterate through inner boundaries ACADLogging.LogMyExceptions("Start Iterate through inner boundaries"); CivilTinSurface lsurface = null; foreach (KeyValuePair <ObjectId, ObjectIdCollection> innerbdy in m_dict) { #region Removed //#region Create Surface for that Base Polyline and Add outer boundary //if ((lsurface = (surfaceManager.CreateSelectedSurface(baseObj))) == null) // throw new Exception("CreateSelectedSurface Failed!"); //lsurface.AddStandardBoundary(baseObj, "OuterBoundary"); //#endregion #endregion if (innerbdy.Value == null) { continue; } ObjectId outerPline = innerbdy.Key; ObjectIdCollection innerIdCollection = innerbdy.Value; lsurface = PasteSurfaces.FindSurfaceIdForPolylineV2(outerPline); if (lsurface == null) { continue; } #region Interate Internal Polylines to add breaklines and boundaries ACADLogging.LogMyExceptions("Start AddStandardInnerBoundary"); if (innerIdCollection != null) { foreach (ObjectId pLines in innerIdCollection) { if (pLines == null) { continue; } try { #region Breaklines Deprecated //Breaklines removed due to overlapping //lsurface.AddStandardBreakline // (PasteSurfaces.GetPolyPointsByObjectId(pLines), "Breakline-"); #endregion lsurface.AddStandardInnerBoundary(pLines, "Boundary-"); } catch (NullReferenceException e) { ACADLogging.LogMyExceptions("AddAsInnerBoundary Failed: " + e.Message); } catch (Exception e) { ACADLogging.LogMyExceptions("AddAsInnerBoundary Failed: " + e.Message); } internalPLines = null; } } ACADLogging.LogMyExceptions("End AddStandardInnerBoundary"); #endregion #region Rebuild Surfaces ACADLogging.LogMyExceptions("Start RebuildSurfaceBySurfaceName"); if (lsurface != null) { CivilTinSurface.RebuildSurfaceBySurfaceName(lsurface.Name); } #endregion } #endregion internalPLines = null; ACADLogging.LogMyExceptions("End Iterate through inner boundaries"); } else { EditorUtils.Write("Missing 'All' Surface. Create Surfaces Incomplete!"); throw new FileNotFoundException( "Did not find the surface ALL!"); } EditorUtils.Write("Create Surfaces Complete!\n"); } catch (NullReferenceException e) { Console.WriteLine(e.StackTrace); ACADLogging.LogMyExceptions(e.Message); } catch (Autodesk.AutoCAD.Runtime.Exception e) { ACADLogging.LogMyExceptions(e.Message); } catch (Exception e) { ACADLogging.LogMyExceptions(e.Message); } }