Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
            }
        }