首页 > 编程语言 >AutoCAD C# 绘制圆柱

AutoCAD C# 绘制圆柱

时间:2024-05-26 20:33:41浏览次数:25  
标签:圆柱 EndPoint AutoCAD get C# var new StartPoint public

有这么一个需求我需要将其他软件提取管子信息在AutoCAD中重新搭建3D管线模型

数据如下

最终AutoCAD模型如下

疯转的管子信息代码如下

public class PipeData
{
    public string Name { get; set; }
    public string MaterialGrade { get; set; }
    public string CrossSectionName { get; set; }
    public Point3d StartPoint { get; set; }
    public Point3d EndPoint { get; set; }


    public static List<PipeData> ReadDataFromExcel(string excelFn)
    {
        dynamic wb = Microsoft.VisualBasic.Interaction.GetObject(excelFn);
        var ws = wb.Sheets[1];
        int lastRow = ws.Range["A65536"].End[-4162].Row;
        var dataArray = ws.Range["A2:E" + lastRow].Value2 as object[,];
        Marshal.FinalReleaseComObject(ws);
        wb.Close(false);
        //if (wb!=null) Marshal.FinalReleaseComObject(wb);
        List<PipeData> res = new List<PipeData>();
        for (var i = 1; i <= dataArray.GetLength(0); i++)
        {
            var str = new List<string>();
            for (var j = 1; j <= dataArray.GetLength(1); j++)
            {
                str.Add(dataArray[i, j] != null ? dataArray[i, j].ToString() : "");
            }
            var pd = new PipeData(str);
            res.Add(pd);
        }
        return res;
    }
    public PipeData(List<string> strs)
    {
        //P1A	DNVGL VL E36	PIPE 610x45	(134311.000,6996.000,29329.000)	(122550.000,9077.500,12200.000)
        Name = strs.FirstOrDefault();
        MaterialGrade = strs[1];
        CrossSectionName = strs[2];
        var sparr = strs[3].Replace("(", "").Replace(")", "").Split(',').Select(c => double.Parse(c)).ToArray();
        StartPoint = new Point3d(sparr);
        var eparr = strs[4].Replace("(", "").Replace(")", "").Split(',').Select(c => double.Parse(c)).ToArray();
        EndPoint = new Point3d(eparr);
    }
    public double OuterDiameter
    {
        get
        {
            return double.Parse(CrossSectionName.Split('x')[0].Replace("PIPE", "").Trim());
        }
    }
    public double WallThickness
    {
        get
        {
            return double.Parse(CrossSectionName.Split('x')[1].Trim());
        }
    }
    public Vector3d AixsZ
    {
        get
        {
            return EndPoint.Z > StartPoint.Z ? StartPoint.GetVectorTo(EndPoint) : EndPoint.GetVectorTo(StartPoint);
        }
    }

    public ObjectId DrawPipeSolid(Database db)
    {
        var cir = new Circle(StartPoint.Z > EndPoint.Z ? EndPoint : StartPoint, AixsZ, OuterDiameter);
        var s3d = new Solid3d();
        var objcol = new DBObjectCollection();
        objcol.Add(cir);
        Region reg = Region.CreateFromCurves(objcol).Cast<Region>().FirstOrDefault();
        s3d.Extrude(reg, StartPoint.DistanceTo(EndPoint), Math.PI * 0);
        cir.Dispose();
        return AcEnv.CurDb.AppendEntities(s3d).Cast<ObjectId>().FirstOrDefault();
    }
}

业务代码如下

  [CommandMethod("myss9")]
  public static void 绘制圆柱()
  {
      try
      {
          using var doclock = AcEnv.CurDocument.LockDocument();
          //read excel table 
          var fn = "D:\\NetDriveDir\\OneDrive\\Desktop\\Pipe WorkPoint.xlsx";
          var res = PipeData.ReadDataFromExcel(fn);
          foreach (var item in res)
          {
              item.DrawPipeSolid(AcEnv.CurDb);
          }
      }
      catch (System.Exception ex)
      {
          AcApp.Application.ShowAlertDialog(ex.StackTrace);
      }
  }

 

标签:圆柱,EndPoint,AutoCAD,get,C#,var,new,StartPoint,public
From: https://www.cnblogs.com/NanShengBlogs/p/18214244

相关文章

  • 力扣 32. 最长有效括号 python AC
    动态规划classSolution:deflongestValidParentheses(self,s):s=''+ssize=len(s)dp=[0]*sizeforiinrange(2,size):ifs[i]==')':ifs[i-1]=='(':......
  • 【leetcode 找出第 K 大的异或坐标值]
    前缀和+最小堆importjava.util.PriorityQueue;classSolution{publicstaticvoidmain(String[]args){Solutionsolution=newSolution();solution.kthLargestValue(newint[][]{{5,2},{1,6}},4);}......
  • [AIGC] flink sql 消费kafka消息,然后写到mysql中的demo
    这是一个使用FlinkSQL从Kafka中消费数据并写入MySQL的示例。在这个示例中,我们将假设有一个Kafka主题“input_topic”,它产生格式为(user_id:int,item_id:int,behavior:string,timestamp:long)的数据,我们需要把这些数据写入名为"output_table"的MySQL表......
  • [AIGC] mac os 中 .DS_Store 是什么
    .DS_Store是在MacOS系统中由Finder应用程序创建和维护的一种隐藏文件,用于保存有关其所在目录的自定义属性,例如图标位置或背景颜色。“.DS_Store”是“DesktopServicesStore”的缩写。.DS_Store的作用.DS_Store文件在每个MacOSX文件夹中都存在,用于储存这......
  • (读后分享)移动Web前端高效开发实战:HTML 5 + CSS 3 + JavaScript + Webpack + React Nat
    链接:pan.baidu.com/s/1tIHXj9HmIYojAHqje09DTA?pwd=jqso提取码:jqsoHTML5新特性与应用:介绍HTML5的新特性,包括语义化标签、本地存储、设备兼容、连接特性等,并讲解如何在移动Web前端开发中充分利用这些特性提升用户体验。CSS3样式与动画设计:详细讲解CSS3的样式设计和动画效果,包......
  • 二叉树遍历算法与堆数据结构详解(C语言)
    目录树的概念及结构二叉树的概念及结构概念二叉树的性质满二叉树和完全二叉树满二叉树完全二叉树深度的计算二叉树顺序结构及实现顺序存储堆的概念数组建堆向下调整堆的实现完整代码Heap.hHeap.cTest.c堆的初始化(实现小堆为例)插入数据删除堆顶的数据 ......
  • C语言----判断n是否是2的次方数,利用到按位与&,算法n&(n-1)
    //写一个代码,判断n是否是2的次方数//if(n&(n-1))==0/*2的0次方是1---二进制12的1次方是2---二进制102的2次方是4---二进制1002的一次方-1是1---二进制是12的二次方-1是3---二进制是112的三次方-1是7---二进制是111n与n-1按位与后&是0就是0,两个1才是1所以if(n&(n-1......
  • C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
    //编写代码实现:求一个整数存储在内存中的二进制中1的个数//第一种写法/*intcount_bit_one(unsignedintn){intcount=0;while(n)//除到最后余数是0,那么这个循环就结束了{//这个题就是可以想成求15的二进制的过程//每次都除以2,余数为1的时候就......
  • 【C++风云录】走进数字农业:农业科学与粮食安全
    跨越边界:农业模拟库的编程特性与应用领域前言在本篇文章中,我们将深入探讨六个领域的软件库—APSIM,AgroLib,CropModelMKS,SoilR,Bionet和FSEarth。这些库均用于农业生态系统建模、作物模拟、农业数据处理和分析、合成作物模型构造、土壤碳氮循环模型集成、生物网络模拟以及农......
  • springmvc 前端向后端发送http请求报错“HTTP状态 405 - 方法不允许”
    如图我使用前端向后端发送文件时报错,405方法不允许,于是我就检查了前后端的method方法设置是否一致?  检查后发现明明前后端请求方式一致,都是post遵循文件上传的方式。这个问题令我十分苦恼,最后发现原来是前端提交form表单时设置的选项之间存在逗号,原则是每一项之间都不应......