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); } } }