在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → C# CAD插件开发实例源码下载

C# CAD插件开发实例源码下载

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:1.21M
  • 下载次数:163
  • 浏览次数:1716
  • 发布时间:2017-07-14
  • 实例类别:C#语言基础
  • 发 布 人:crazycode
  • 文件格式:.rar
  • 所需积分:2
 相关标签: cad 插件

实例介绍

【实例简介】

0,
项目效果查看:
a:在CAD2006的命令行输入netload,加载Test.dll
b1:在命令行输入helloworld可以看到命令功能
b2:右键可以看到右键菜单,画一个红色的圆
b3:左边工具面板多了一个工具条,有个界面可以输入各种参数来画一个组合图形


1,建一个xindows窗体程序项目,设置输出为类库
2,引用acdbmgd.dll和acmgd.dll
3,引用如下命名空间
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Windows.ToolPalette;
using Autodesk.AutoCAD.Windows;


4,在Form1上规划界面和后台代码。重点看代码如何实现

5,计划是CAD上增加一个面板按钮,点击按钮就打开Form1来自动画图。
   这里我们加一个用户控件,拖一个按钮,按钮方法写:
Form1 modalForm = new Form1();            Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(modalForm);
注意这里仅仅是打开的窗体的方式选择了AutoCAD的方式。  
想建立一整套工具栏,就多拉几个按钮。按4的方法写好每个按钮执行的代码(可以要个Form1这样的界面,也可以不要,自由选择)

6,把这个项目导出还需要一个类来辅助
先看初始化Initialize()和Terminate()方法。这里给CAD加了一个面板工具栏和右键菜单,以及一些命令行

【实例截图】

from clipboard

【核心代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Windows.ToolPalette;
using Autodesk.AutoCAD.Windows;
namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        float C;//长
        float K;//宽
        /// <summary> 画CAD图,根据计算出的坐标
        /// 
        /// </summary>
        void drawCAD()
        {
            Point3d p0 = new Point3d(0,0,0);
            Point3d p1 = new Point3d(C,0,0);
            Point3d p2 = new Point3d(C, K, 0);
            Point3d p3 = new Point3d(0, K, 0);
           
            using (DocumentLock doclock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument())
            {
                //
                Database db = HostApplicationServices.WorkingDatabase;
                using (Transaction trans = db.TransactionManager.StartTransaction())
                {
                    BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                    BlockTableRecord btr = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;


                    //画4条直线的矩形
                    List<Line> lins = new List<Line>();
                    lins.Add(new Line(p0, p1));
                    lins.Add(new Line(p1, p2));
                    lins.Add(new Line(p2, p3));
                    lins.Add(new Line(p3, p0));
                    foreach (Line line in lins)
                    {
                        btr.AppendEntity(line);
                        trans.AddNewlyCreatedDBObject(line, true);
                    }


                    //画圆,这里直接用矩形的四个点来画
                    List<Point3d> points = new List<Point3d>();
                    points.Add(p0);
                    points.Add(p1);
                    points.Add(p2);
                    points.Add(p3);
                    List<Circle> cirs = new List<Circle>();
                    foreach (Point3d p3d in points)
                    {
                        int R = 20;
                        cirs.Add(new Circle(p3d, Vector3d.ZAxis, R));
                    }
                    foreach (Circle cir in cirs)
                    {
                        cir.ColorIndex = 1;
                        btr.AppendEntity(cir);
                        trans.AddNewlyCreatedDBObject(cir, true);
                    }

                    trans.Commit();
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            this.C = Convert.ToInt32(this.textBox1.Text);//int转成float一定可以,所以可以把int的值直接赋给float
            this.K = Convert.ToInt32(this.textBox2.Text);
            this.drawCAD();
            this.Close();
        }
    }
}

标签: cad 插件

实例下载地址

网友评论

第 1 楼 任国鑫 发表于: 2019-07-13 16:24 39
不能下载

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警