C#读取Excel数据在CAD上展图

这是一个将VB.NET版本的‘读取Excel数据在CAD上展图’转换为C#的示例,重点展示了如何使用C#读取Excel数据,并创建带有属性的CAD图块。涉及的技术包括Excel数据读取、图块创建、属性更改和文本样式设置。
摘要由CSDN通过智能技术生成

根据网友的需求,将<<读取Excel数据在CAD上展图>>的VB.NET版本转为C#版本

 


 

本实例包含以下技术要点:

1.如何用代码创建带属性的块对象,而非导入外部图块文件(尤其是带填充对象的图块).

2.如何更改块属性的属性值.

3.如何创建文本样式.

4.如何读取Excel文件当中的数据.

 


 

Excel文件的数据格式:

JKC1 静力触探孔 3045304.377  543717.354  2.630  32.500 
JKC2 静力触探孔 3045617.146  545348.081  3.200  35.800 
JKC3 静力触探孔 3046038.390  546159.911  3.380  35.500 
SKC1 十字板 3045617.739  545346.739  3.200  30.000 
SKC2 十字板 3046138.556  548510.327  2.520  30.000 
SKC3 十字板 3046605.847  555424.066  2.200  30.000 
ZKC1 取土样钻孔 3045384.183  544032.220  2.680  80.000 
ZKC2 取土样钻孔 3045436.779  544468.844  2.720  76.100 
ZKC3 取土样钻孔 3045477.244  544827.897  2.680  80.500 

 


创建图块的源码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;

 

namespace ReaderExcelDrawMapII
{
    /// <summary>
    /// 创建图块
    /// </summary>
    public class CreateBlock
    {
        /// <summary>
        /// 创建JK图块
        /// </summary>
        /// <returns></returns>
        /// <remarks></remarks>
        public static ObjectId createBlockJK()
        {
            ObjectId blockId = new ObjectId();
            Database db = HostApplicationServices.WorkingDatabase;
            //得到当前文档图形数据库
            BlockTableRecord record = new BlockTableRecord();

 

            //图块名称
            record.Name = "JK";
            record.Origin = new Point3d(0, 0, 0);

 

            //打开事务
            using (Transaction trans = db.TransactionManager.StartOpenCloseTransaction())
            {

 

                //创建第一个多段线对象
                Point2dCollection pts1 = new Point2dCollection();
                pts1.Add(new Point2d(-3.8, 0.0));
                pts1.Add(new Point2d(+3.8, 0.0));

 

                Polyline pline1 = new Polyline();
                for (int i = 0; i <= pts1.Count - 1; i++)
                {
                    pline1.AddVertexAt(i, pts1[i], 1, 0.4, 0.4);
                }
                pline1.Closed = true;
                pline1.Layer = "0";
                pline1.ColorIndex = 0;
                record.AppendEntity(pline1);

 

                //创建第一个多段线对象
                Point2dCollection pts2 = new Point2dCollection();
                pts2.Add(new Point2d(0.0, -3.8));
                pts2.Add(new Point2d(3.2909, 1.9));
                pts2.Add(new Point2d(-3.2909, 1.9));

 

                Polyline pline2 = new Polyline();
                for (int i = 0; i <= pts2.Count - 1; i++)
                {
                    pline2.AddVertexAt(i, pts2[i], 0, 0.2, 0.2);
                }
                pline2.Closed = true;
                pline2.Layer = "0";
                pline2.ColorIndex = 0;
                record.AppendEntity(pline2);

 

                //创建第一个多段线对象
                Point2dCollection pts3 = new Point2dCollection();
                pts3.Add(new Point2d(0.0, 4.0));
                pts3.Add(new Point2d(0.0, 14.0));
                pts3.Add(new Point2d(28.0, 14.0));

 

                Polyline pline3 = new Polyline();
                for (int i = 0; i <= pts3.Count - 1; i++)
                {
                    pline3.AddVertexAt(i, pts3[i], 0, 0.2, 0.2);
                }
                pline3.Layer = "0";
                pline3.ColorIndex = 0;
                record.AppendEntity(pline3);

 

                AttributeDefinition att1 = new AttributeDefinition();
                att1.Position = new Point3d(13.6683, 18.8785, 0.0);
                att1.Height = 7.8;
                //设置文字高度
                att1.WidthFactor = 0.7;
                //设置宽度因子
                att1.HorizontalMode = TextHorizontalMode.TextMid;
                //设置水平对齐方式
                att1.VerticalMode = TextVerticalMode.TextVerticalMid;
                //设置垂直对齐方式
                att1.AlignmentPoint = att1.Position;
                att1.Prompt = "孔号";
                //设置属性提示
                att1.TextString = "JKS1";
                //设置属性的缺省值
                att1.Tag = "孔号";
                //设置属性标签
                att1.Layer = "0";
                att1.TextStyleId = CreateEntity.CreateStyle();
                //指定文本样式
                att1.ColorIndex = 0;
                record.AppendEntity(att1);

 


                AttributeDefinition att2 = new AttributeDefinition();
                att2.Position = new Point3d(13.6683, 8.3528, 0.0);
                att2.Height = 7.8;
                //设置文字高度
                att2.WidthFactor = 0.7;
                //设置宽度因子
                att2.HorizontalMode = TextHorizontalMode.TextMid;
                //设置水平对齐方式
                att2.VerticalMode = TextVerticalMode.TextVerticalMid;
                //设置垂直对齐方式
                att2.AlignmentPoint = att2.Position;
                att2.Prompt = "孔深";
                //设置属性提示
                att2.TextString = "0.00";
                //设置属性的缺省值
                att2.Tag = "孔深";
                //设置属性标签
                att2.Layer = "0";
                att2.TextStyleId = CreateEntity.CreateStyle();
                //指定文本样式
                att2.ColorIndex = 0;
                record.AppendEntity(att2);

 

                //以写的方式打开块表
                BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;

 

                //判断图块是否存在
                if (bt.Has(record.Name) == false)
                {
                    //在块表中加入块
                    blockId = bt.Add(record);
                    //通知事务处理
                    trans.AddNewlyCreatedDBObject(record, true);
                    //提交事务
                    trans.Commit();
                }
            }

 

            return blockId;
        }

 

        /// <summary>
        /// 创建MK图块
        /// </summary>
        /// <returns></returns>
        /// <remarks></remarks>
        public static ObjectId createBlockMK()
        {
            ObjectId blockId = new ObjectId();
            Database db = HostApplicationServices.WorkingDatabase;
            //得到当前文档图形数据库
            BlockTableRecord record = new BlockTableRecord();

 

            //图块名称
            record.Name = "MK";
            record.Origin = new Point3d(0, 0, 0);

 

            //打开事务
            using (Transaction trans = db.TransactionManager.StartOpenCloseTransaction())
            {

 

                //创建第一个多段线对象
                Point2dCollection pts1 = new Point2dCollection();
                pts1.Add(new Point2d(-3.8, 0.0));
                pts1.Add(new Point2d(+3.8, 0.0));

 

                Polyline pline1 = new Polyline();
                for (int i = 0; i <= pts1.Count - 1; i++)
                {
                    pline1.AddVertexAt(i, pts1[i], 1, 0.4, 0.4);
                }
                pline1.Closed = true;
                pline1.Layer = "0";
                pline1.ColorIndex = 0;
                record.AppendEntity(pline1);

 

                //创建第一个多段线对象
                Point2dCollection pts2 = new Point2dCollection();
                pts2.Add(new Point2d(0.0, 4.0));
                pts2.Add(new Point2d(0.0, 14.0));
                pts2.Add(new Point2d(28.0, 14.0));

 

                Polyline pline2 = new Polyline();
                for (int i = 0; i <= pts2.Count - 1; i++)
                {
                    pline2.AddVertexAt(i, pts2[i], 0, 0.2, 0.2);
                }
                pline2.Layer = "0";
                pline2.ColorIndex = 0;
                record.AppendEntity(pline2);

 

                AttributeDefinition att1 = new AttributeDefinition();
                att1.Position = new Point3d(13.6683, 18.8785, 0.0);
                att1.Height = 7.8;
       

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值