012集——CAD图中线段坐标导出到txt(CAD—C#二次开发入门)

如图所示,CAD图中line和pline坐标和图层数据导出到txt文本。

程序运行后导出如下文件:

附部分源代码:

cs 复制代码
public static void DwgToTxt(this Database db)
{
   // var db = Z.db;
    var ed = Z.ed;
    //Point3d pt ;  
    BlockData data = new BlockData();
    List<BlockData> datas = new List<BlockData>();
    List<string> str = new List<string>();
    using (var tr = db.TransactionManager.StartTransaction())
    {
        var bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
        var btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;
        int i = 0;
        int linenum = 1;
        int plinenum = 1;
        foreach (var obj in btr)
        {
            //Double x;
            //double y;
            //Point3d pt = new Point3d(x, y, 0);
            Entity ent = obj.GetObject(OpenMode.ForRead) as Entity;
            if (ent != null)
            {
                if (ent is Curve)
                {
                    if (ent is Line)
                    {
                        str.Add("\n" + linenum + ": Line:\n");
                        Line line = (Line)ent;
                        data.layerName = "图层:" + line.Layer + "\n";
                        data.X = line.StartPoint.X.ToString("F3");
                        data.Y = line.StartPoint.Y.ToString("F3");
                        datas.Add(data);
                        str.Add(datas[i].layerName + datas[i].X + "," + datas[i].Y);
                        i = i + 1;
                        linenum = linenum + 1;
                    }
                    else if (ent is Polyline)
                    {
                        str.Add("\n" + plinenum + "PLine:\n");
                        Polyline pline = (Polyline)ent;
                        for (int k = 0; k < pline.NumberOfVertices; k++)
                        {
                            // Polyline pline = (Polyline)ent;
                            data.layerName = "图层:" + pline.Layer + "\n";
                            data.X = pline.GetPoint3dAt(k).X.ToString("F3") ;
                            data.Y = pline.GetPoint3dAt(k).Y.ToString("F3");
                            datas.Add(data);
                            str.Add(datas[i].layerName + datas[i].X + "," + datas[i].Y);
                            i = i + 1;
                        }
                        plinenum = plinenum + 1;
                    }
                }
            }

        }
    }

    SaveFileDialog savefd;
    DialogResult saveDlgRes;
    db.Sfd(out savefd, out saveDlgRes);
    if (saveDlgRes == Wform.DialogResult.OK)
    {
        string[] contents = new string[str.Count];
        for (int j = 0; j < datas.Count; j++)
        {
            contents[j] = str[j];//datas[j].layerName + ",\n" + datas[j].X + "\n" + datas[j].Y;
        }

        File.WriteAllLines(savefd.FileName, contents);
    }
}

部分方法为个人封装方法,如打开文件对话框,保存文件对话框。部分字段也进行了封装,如定义数据库database db等。

CAD二开插件定制:↓↓↓

相关推荐
神仙别闹7 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
伞伞悦读8 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
林川~018 小时前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
2601_9669496511 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_7345717611 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
He BianGu12 小时前
【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明
opencv·c#·wpf·halcon·机器视觉·visionmaster
tang_042712 小时前
【Hi.Ltd 专题】第9期:Interop 配置互操作(JSON/INI/XML/YAML/注册表/扫码)
经验分享·c#·hi.ltd系列
RAN114267600812 小时前
1.3第一个程序的介绍
开发语言·qt
blue_ice .13 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^1382879887214 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居