• Civil 3D 2013利用API把三角网曲面提取为栅格网


    Civil 3D 2013中对曲面的.net API做了增强,可以让我们从三角网曲面中提取栅格网。先看看效果:

    image

    下面的代码演示了从一个三角网曲面中提取三维栅格网,这些栅格网是由红色是三维多段线polyline构成的。

    //
    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;
    
    // This line is not mandatory, but improves loading performances
    [assembly: CommandClass(typeof(SurfaceApiInCivil3D2013.MyCommands))]
    
    namespace SurfaceApiInCivil3D2013
    {
    
        // This class is instantiated by AutoCAD for each document when
        // a command is called by the user the first time in the context
        // of a given document. In other words, non static data in this class
        // is implicitly per-document!
        public class MyCommands
        {
            static Document _doc = Application.DocumentManager.MdiActiveDocument;
            static Editor _editor = _doc.Editor;
            static Database db = _doc.Database;
    
            private ObjectId promptForTinSurface()
            {
                PromptEntityOptions options = new PromptEntityOptions(
                    "\nSelect a TIN Surface: ");
                options.SetRejectMessage(
                    "\nThe selected object is not a TIN Surface.");
                options.AddAllowedClass(typeof(TinSurface), true);
    
                PromptEntityResult result = _editor.GetEntity(options);
                if (result.Status == PromptStatus.OK)
                {
                    // Everything is cool; we return the selected
                    // surface ObjectId.
                    return result.ObjectId;
                }
                return ObjectId.Null;   // Indicating error.
            }
    
            [CommandMethod("CDS_ExtractGrid")]
            public void CDS_ExtractGrid()
            {
                ObjectId surfaceId = promptForTinSurface();
                if (surfaceId == ObjectId.Null)
                {
                    _editor.WriteMessage("\nNo TIN Surface selected.");
                    return;
                }
    
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    TinSurface surface = surfaceId.GetObject(OpenMode.ForRead)
                        as TinSurface;
                    ObjectIdCollection ids = surface.ExtractGridded(
                        SurfaceExtractionSettingsType.Model);
    
                    foreach (ObjectId id in ids)
                    {
                        Polyline3d polyline =
                            id.GetObject(OpenMode.ForWrite) as Polyline3d;
                        if (polyline != null)
                        {
                            using (polyline)
                            {
                                polyline.Color =
                                    Autodesk.AutoCAD.Colors.Color.FromRgb(255, 0, 0);
                            }
                        }
                    }
                    tr.Commit();
                }
            }
    
    
        }
    
    }
    
     
    想了解更多Civil 3D 2013 API,请看Civilized Development博客中的21WOJP系列 (21 Week Of JayPeak), JayPeak是Civil 3D 2013的代码名。
  • 相关阅读:
    GIS的发展
    ajax请求头加Token时发生的跨域(CORS)请求问题
    js 给定时间,如'20130830',换算和今天的天数差
    过程改进点滴需求调研经验之一
    昨天向PAM推荐的好书
    关于专人整理和分析需求
    走出开发混沌
    过程改进点滴需求调研经验之二
    代码重构注意事项
    插件框架内核完成
  • 原文地址:https://www.cnblogs.com/junqilian/p/2922020.html
Copyright © 2020-2023  润新知