C# for AUTOCAD ActiveX获取图形对象坐标程序
C# for AUTOCAD ActiveX获取图形对象坐标程序
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Interop.Common;
namespace CAD获取图形对象坐标
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
AcadApplication CadApp;
AcadDocument CadDoc;
AcadModelSpace CadMspace;
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "所有文件*.*|*.*|CAD文件|*.dwg";
open.FilterIndex = 2;
DialogResult diaresult = open.ShowDialog();
if (diaresult == DialogResult.OK)
{
textBox1.Text = open.FileName;
if (System.IO.Path.GetExtension(textBox1.Text) != ".dwg")
{
MessageBox.Show("这不是一个CAD图形文件!");
return;
}
panel1.Enabled = true;
button1.Enabled = true;
CadApp = new AcadApplication();
CadDoc = CadApp.Documents.Open(textBox1.Text);
CadMspace = CadDoc.ModelSpace;
CadApp.Visible = true;
comboBox1.Items.Clear();
comboBox1.Items.Add("所有图层");
foreach (AcadLayer layer in CadDoc.Layers)
{
comboBox1.Items.Add(layer.Name);
}
comboBox1.Text = "所有图层";
}
}
private void button3_Click(object sender, EventArgs e)
{
comboBox1.Items.Clear();
comboBox1.Items.Add("所有图层");
foreach (AcadLayer layer in CadDoc.Layers)
{
comboBox1.Items.Add(layer.Name);
}
comboBox1.Text = "所有图层";
}
{
textBox2.Clear();
AcadSelectionSet MyCadSelect = CadDoc.SelectionSets.Add("MySelect");
Int16[] FilterType = new Int16[1];
object[] FilterDate = new object[1];
if (comboBox1.Text == "所有图层")
{
FilterType[0] = 0;
FilterDate[0] = "*";
}
else
{
FilterType[0] = 8;
FilterDate[0] = comboBox1.Text;
}
if (radioButton1.Checked == true)
{
MyCadSelect.SelectOnScreen(FilterType, FilterDate);
}
else
{
double[] point01 = new double[3];
double[] point02 = new double[3];
point01[0] = 0; point01[1] = 0; point01[2] = 0;
point02[0] = 1000; point02[1] = 1000; point02[2] = 0;
MyCadSelect.Select(AcSelect.acSelectionSetAll, point01, point02, FilterType, FilterDate);
}
double[] d;
for (int i = 0; i < MyCadSelect.Count; i++)
{
if (MyCadSelect.Item(i).ObjectName == "AcDbLine" && checkBox2.Checked == true)
{
AcadLine line;
line = (AcadLine)MyCadSelect.Item(i);
d =(double[]) line.StartPoint;
string str = "\n\r" + "X= " + d[0] + " Y= " + d[1] + " Z= " + d[2] + "\n\r";
d = (double[])line.EndPoint;
str += "\n\r" + "X= " + d[0] + " Y= " + d[1] + " Z= " + d[2] + "\n\r";
textBox2.Text += str;
}
else if (MyCadSelect.Item(i).ObjectName == "AcDbPoint" && checkBox1.Checked == true)
{
AcadPoint point;
point = (AcadPoint)MyCadSelect.Item(i);
d = (double[])point.Coordinates;
string str = "\n\r" + "X= " + d[0] + " Y= " + d[1] + " Z= " + d[2] + "\n\r";
textBox2.Text += str;
}
else if (MyCadSelect.Item(i).ObjectName == "AcDbPolyline" && checkBox3.Checked == true)
{
AcadLWPolyline poly;
poly = (AcadLWPolyline)MyCadSelect.Item(i);
d = (double[])poly.Coordinates;
for (int j = 0; j < d.Length - 1; j = j + 2)
{
textBox2.Text += "\n\r" + "X= " + d[j].ToString() + " Y= " + d[j + 1].ToString() + " Z= " +poly.Elevation.ToString() + "\n\r";
}
}
else if (MyCadSelect.Item(i).ObjectName == "AcDb3dPolyline" && checkBox8.Checked == true)
{
Acad3DPolyline poly;
poly = (Acad3DPolyline)MyCadSelect.Item(i);
d = (double[])poly.Coordinates;
for (int j = 0; j < d.Length - 2; j = j + 3)
{
textBox2.Text += "\n\r" + "X= " + d[j].ToString() + " Y= " + d[j + 1].ToString() + " Z= " + d[j + 2].ToString() + "\n\r";
}
}
else if (MyCadSelect.Item(i).ObjectName == "AcDbCircle" && checkBox4.Checked == true)
{
AcadCircle circle;
circle = (AcadCircle)MyCadSelect.Item(i);
d = (double[])circle.Center;
textBox2.Text += "\n\r" + "X= " + d[0] + " Y= " + d[1] + " Z= " + d[2] + "\n\r";
}
else if (MyCadSelect.Item(i).ObjectName == "AcDbArc" && checkBox5.Checked == true)
{
AcadArc arc;
arc = (AcadArc)MyCadSelect.Item(i);
d = (double[])arc.StartPoint;
string str = "\n\r" + "X= " + d[0] + " Y= " + d[1] + " Z= " + d[2] + "\n\r";
d = (double[])arc.EndPoint;
str += "\n\r" + "X= " + d[0] + " Y= " + d[1] + " Z= " + d[2] + "\n\r";
textBox2.Text += str;
}
else if (MyCadSelect.Item(i).ObjectName == "AcDbSpline" && checkBox6.Checked == true)
{
AcadSpline spline = (AcadSpline)MyCadSelect.Item(i);
d = (double[])spline.ControlPoints;
for (int j = 0; j < d.Length - 2; j = j + 3)
{
textBox2.Text += "\n\r" + " X= " + d[j].ToString() + " Y= " + d[j + 1].ToString() + " Z= " + d[j + 2].ToString() + "\n\r";
}
}
else if (MyCadSelect.Item(i).ObjectName == "AcDbBlockReference" && checkBox7.Checked == true)
{
AcadBlockReference block = (AcadBlockReference)MyCadSelect.Item(i);
d = (double[])block.InsertionPoint;
textBox2.Text += "\n\r" + "X= " + d[0] + " Y= " + d[1] + " Z= " + d[2] + "\n\r";
}
}
MessageBox.Show("共处理完成" + MyCadSelect.Count + "个对象");
CadDoc.SelectionSets.Item("MySelect").Delete();
}
private void button5_Click(object sender, EventArgs e)
{
MessageBox.Show("作者:深海,QQ454138882");
}
}
}
编此程序的主要目的是,我要几张CAD图里图元的坐标 作为原始数据或者在没有原始数据的情况下,获取图上指定图元的坐标方法进行补图成图。
C# for AUTOCAD ActiveX获取图形对象坐标程序的更多相关文章
- C#/AutoCAD 2018/ObjectArx/二次开发添加图形对象步骤和添加直线的例子(三)
1.创建一个图形对象的步骤如下(1)得到创建对象的图形数据库:(2)在内存中创建实体类的一个对象:(3)定义一个指向当前数据库的事务处理:(4)打开图形数据库的块表:(5)打开一个存储实体的块表记录( ...
- AutoCAD.NET中添加图形对象的基本步骤与实例演示
https://blog.csdn.net/u011170962/article/details/37755201 要创建一个图形对象,需要遵循下面的步骤:1.得到创建对象的图形数据库:2.在内存中创 ...
- 基于.NET的CAD二次开发学习笔记二:AutoCAD .NET中的对象
1.CAD对象:一个CAD文件(DWG文件)即对应一个数据库,数据库中的所有组成部分,看的见(包括点.多段线.文字.圆等)和看不见(图层.线型.颜色等)的都是对象,数据库本身也是一个对象. 直线.圆弧 ...
- 图形对象函数figure() 及 子图创建函数subplot()
1 图像对象创建函数figure 创建图形Creates a new figure, 图形名既可以作为显示在图形窗口标题栏中的文本,也是该对象的名称 也可以通过mp.figure()获取(或激活)已创 ...
- matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象
一起来学matlab-matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matl ...
- js鼠标及对象坐标控制属性详细解析
对js鼠标及对象坐标控制属性进行了详细的分析介绍. offsetTop获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算顶端位置. offsetLeft获取对象相对于版面或由 ...
- jquery获取当前元素坐标
1. jquery获取当前元素坐标 A) 获取对象
- JavaScript 获取 Div 的坐标
示例代码: <html> <head> <script> function CPos(x, y) { this.x = x; this.y = y; } /** * ...
- 利用servlet产生随机数,原理是获取Graphics对象进行绘图
public class ResonpeRandomImgDemo extends HttpServlet { int width=100; int height=30; public void do ...
随机推荐
- HDU 5699 货物运输 二分判定
转自:http://blog.csdn.net/jtjy568805874/article/details/51480479 #include <cstdio> #include < ...
- 傲游浏览器4,傲游浏览器5如何一键批量打开url链接。
傲游浏览器批量打开网址的插件没用了.有很多网友发了方法也无法实现.实际上,是可以实现傲游浏览器4,傲游浏览器5一键批量打开url链接的.我来告诉大家如何来实现.最新的M5都能使用.在收藏夹添加一个收藏 ...
- activemq p2p方式
package ch02.chat; import java.io.Serializable; import javax.jms.Connection; import javax.jms.Connec ...
- 解决:Eclipse导入工程后全是错误,连基本类型都不识别
当初在大学没时间完成作业时,总是喜欢网上搜一个或者拷贝同学的一个工程过来,导入到Eclipse中却全是红叉,连基本类型都不识别. 当时就纳闷了,难道是天要亡我之心不死?后来慢慢了解了,其实是导入的工程 ...
- Java深度遍历文件夹(递归实现)
package FileDemo; import java.io.File; public class DeepSearchDir { /** * @param args */ public stat ...
- SQL2008-不同数据库之间的触发器
create trigger tr_update_Table_1 on rwqd FOR UPDATE As update dataabc.dbo.Table_1 set ...
- PCB编辑快捷键
TAB: 调节属性PgUp: 放大PgDn: 缩小Delete: 删除Ctrl+C: 复制Ctrl+V: 粘贴Ctrl+X: 剪贴Ctrl+Z: 撤销Ctrl+Y: 取消撤销Ctrl+F: 查找Ctr ...
- ALM11用例测试类型
默认一般都是选择的是manual
- 简单OS(ucos超级精简版)——裸调度器【worldsing笔记】
简单原则少ROM,少RAM,任务完成就让出CPU,调度器描述: 1.按最大任务数轮番调度: 2.任务调用延时接口将让出CPU使用权,进入下一个任务调度: 3.用户任务都处于延时或是不使用CPU运行Id ...
- Open War I: 怪物繁殖,行走仿真,瞄准射击...
See below demo: Share the source codes with your guys. >>>download this "hacking meat& ...