Set the watershed for the surface style

QQ netizen 1109743151 for help,

Does not display after setting up a watershed.

There seems to be no problem in the code,

after testing,

It was found that during the manual setting of surface styles,

If a watershed is displayed,

There will be a process of surface analysis,

So the code for surface analysis is added to the code,

The watershed can then be displayed normally.

The test code is as follows:

Posted his code without the permission of netizens,

Hope there are no misunderstandings!

 

// (C) Copyright 2018 by Microsoft 
//
using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.Civil.DatabaseServices;
using Autodesk.Civil.ApplicationServices;
using Autodesk.Civil.DatabaseServices.Styles;

// This line is not mandatory, but improves loading performances
[assembly: CommandClass(typeof(AutoCAD_CSharp_plug_in3.MyCommands))]

namespace AutoCAD_CSharp_plug_in3
{

    public  class MyCommands
    {
        public static void ModifyTheFurface(bool T1, bool T2, bool T3, bool T4, bool T5, bool T6, bool T7, bool T8, bool T9, bool T10)
        {
            // Unlock before opening model space in modeless mode
             // DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument(); 
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
             ////////////////////
             PromptEntityOptions peo = new PromptEntityOptions( " \nSelect TIN surface " );
            peo.SetRejectMessage( " \nPlease select the TIN surface " );
            peo.AddAllowedClass(typeof(TinSurface), true);
            PromptEntityResult per= ed.GetEntity(peo);
            if (per.Status != PromptStatus.OK) return;

            ObjectId objectid =per.ObjectId;
            /////////////////////
            //ObjectId objectid = promptForEntity(typeof(TinSurface));

            using (Transaction trans = doc.TransactionManager.StartTransaction())
            {
                CivilDocument civilDoc = CivilApplication.ActiveDocument;
                TinSurface surface = trans.GetObject(objectid, OpenMode.ForWrite) as TinSurface;
                 // change the style, the style is changed below 
                ObjectId styleId = new ObjectId();
                 if (civilDoc.Styles.SurfaceStyles.Contains( " Standard " ))
                    styleId = civilDoc.Styles.SurfaceStyles["Standard"];
                else
                    if (!civilDoc.Styles.SurfaceStyles.Contains("Standard"))
                {
                    civilDoc.Styles.SurfaceStyles.Add("Standard");
                    styleId = civilDoc.Styles.SurfaceStyles["Standard"];
                }

                SurfaceStyle surfaceStyle = styleId.GetObject(OpenMode.ForWrite) as SurfaceStyle;
                //平滑系数                
                surfaceStyle.ContourStyle.SmoothContours = true;
                surfaceStyle.ContourStyle.SmoothingType = ContourSmoothingType.AddVertices;
                surfaceStyle.ContourStyle.SmoothingFactor = 10;
                surfaceStyle.ContourStyle.MajorContourColorScheme = ColorSchemeType.Rainbow ;
                 // Contour 

                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.MajorContour).Color = Autodesk.AutoCAD.Colors.Color.FromRgb( 255 , 191 , 0 ); // Add group main contour Line red 
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.MajorContour).Layer = " 0 " ; // Add group main contour zero layer 
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.MajorContour).LinetypeScale = 0.4 ; // Add group main contour scale
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.MinorContour).Color = Autodesk.AutoCAD.Colors.Color.FromRgb(165, 145, 82);//次等高线红色
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.MinorContour).Layer = "0";//次等高线零层
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.MajorContour).LinetypeScale = 0.1;//加组主等高线比例

                DisplayStyle majorContours = surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.MajorContour);
                majorContours.Visible = true ;
                 // majorContours.Color = Autodesk.AutoCAD.Colors.Color.FromRgb(255, 255, 0); 
                surfaceStyle.ContourStyle.BaseElevationInterval = 0.0 ; // Base elevation interval 
                surfaceStyle.ContourStyle.MajorContourInterval = 10 ; // Main contour spacing 
                surfaceStyle.ContourStyle.MinorContourInterval = 2 ; // Minor contour spacing        
                DisplayStyle minorContours = surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.MinorContour);
                minorContours.Visible = true;
                // minorContours.Color = Autodesk.AutoCAD.Colors.Color.FromRgb(0, 255, 0);
                // 显示等高线
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.MajorContour).Visible = T1;//是否显示等高线
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.MinorContour).Visible = T1;//细等高线
                // display boundaries:
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.Boundary).Visible = true;
                surfaceStyle.BoundaryStyle.DisplayExteriorBoundaries = true;
                surfaceStyle.BoundaryStyle.DisplayInteriorBoundaries = false ;
                 // Close other displays displayed      
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.UserContours).Visible = T2; // User contour 
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.Directions).Visible = T3; // Orientation 
                surfaceStyle. GetDisplayStylePlan(SurfaceDisplayStyleType.Elevations).Visible = T4; // altitude 
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.Slopes).Visible = T5; // on the hillside
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.SlopeArrows).Visible = T6;//斜率的箭
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.Watersheds).Visible = T7;//分水岭

                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.Gridded).Visible = T8;//网格
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.Points).Visible = T9;//
                surfaceStyle.GetDisplayStylePlan(SurfaceDisplayStyleType.Triangles).Visible = T10;//
                surface.StyleId = styleId;//指定文档中第一表面的风格
                //surface.UpgradeOpen();
                surface.Rebuild();//重建曲面   
                /////////////////////////////
                if (T7)
                {
                    SurfaceAnalysis sa = surface.Analysis;
                    SurfaceAnalysisWatershedDataCollection swdc = sa.GetWatershedData();
                    in.SetWatershedData (swdc);
                }
                ///////////////////////// / 
                trans.Commit(); // Commit the transaction 
                ed.UpdateScreen();
                ed.UpdateTiledViewportsFromDatabase();
                ed.UpdateTiledViewportsInDatabase();
            }
            // ZoomExtents();
             // to lock after use
             // docLock.Dispose(); 
        }

        [CommandMethod("MyGroup", "MyCommand", "MyCommandLocal", CommandFlags.Modal)]
        public void MyCommand() // This method can have any name
        {
            ModifyTheFurface(false, false, false, false, false, false, true, false, false, false);
        }
    }
}

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325044126&siteId=291194637