网站首页技术中心专业软件校园招聘就业指导考研交流学习经验技术论坛单片机| PLC | 电力电子| 控制理论| 工厂供电| CAD技术| DSP | 工控技术| 模电数电| 电路基础| MSP430 | 电路图| RIFI | 组态软件| 工业总线| 变频器-
当前位置:中国高校自动化网>> cad >> 浏览文章
用C#实现外部调用CAD绘图一例
文章来源:不详作者:佚名
--------------------------------------------------------------------------------
该文章讲述了用C#实现外部调用CAD绘图一例.
? 绝妙的数学等式MTSTool钢结构工具箱?
2005-12-25 19:30:34
用C#实现外部调用CAD绘图一例-CAD Automation
说明:
一个老外(好像是印度人)写的例子,实现外部程序调用CAD程序,代码中加入了自定义了的类——PF (PublicFunctions),类中包含了几个很实用的函数,如CreateAutoCADObject()可以创建打开一个新的AutoCAD文档,还有绘制线(Line)、文字(Text)和圆(Circel)等函数。注释不多,但仔细研究一下还是对自己很有帮助的。
代码下载:本地|CodeProject
PF类代码示例:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Windows.Forms;
using AutoCAD;
namespace CADAutomation
{
public static class PF
{
public static AcadApplication gbl_app;
public static AcadDocument gbl_doc;
public static AcadModelSpaceClass gbl_modSpace;
public static AcadAcCmColor gbl_color;
public static double gbl_pi = 3.14159;
//Layer For Donuts
public static AcadLayer TerminalsLayer;
public static AcadLayer SwitchLayer;
//Layer Termination Points
public static AcadLayer TerminationPoints;
#region PublicFunctions
public static void CloseAllInstance()
{
Process[] aCAD =
Process.GetProcessesByName("acad");
foreach (Process aCADPro in aCAD)
{
aCADPro.CloseMainWindow();
}
}
public static void CreateAutoCADObject()
{
try
{
CloseAllInstance();
gbl_app = new AcadApplication();
gbl_doc = gbl_app.ActiveDocument;
gbl_app.Application.Visible = true;
gbl_modSpace = (AcadModelSpaceClass)gbl_doc.ModelSpace;
gbl_doc.Linetypes.Load("HIDDEN", "acad.lin");
gbl_doc.Linetypes.Load("CENTER", "acad.lin");
//Other Objects Layer
SwitchLayer = PF.gbl_https://www.wendangku.net/doc/372244521.html,yers.Add("Switch110Layer");
SwitchLayer.color = AutoCAD.AcColor.acGreen;
PF.gbl_doc.ActiveLayer = SwitchLayer;
//Layer For Donuts
TerminalsLayer = PF.gbl_https://www.wendangku.net/doc/372244521.html,yers.Add("TerminalsLayer");
TerminalsLayer.color = AutoCAD.AcColor.acRed;
//Layer Termination Points
TerminationPoints =
PF.gbl_https://www.wendangku.net/doc/372244521.html,yers.Add("TerminationPoints");
TerminationPoints.color = AutoCAD.AcColor.acWhite;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public static void DrawLine(double StartX1,
double StartY1,
double EndX2,
double EndY2,
string LineType,
bool DrawDonutsOnLineStart,
bool DrawDonutsOnLineEnds) {
AcadLine lineObj;
double[] startPoint = new double[3];
double[] endPoint = new double[3]; ;
startPoint[0] = StartX1;
startPoint[1] = StartY1;
startPoint[2] = 0.0;
endPoint[0] = EndX2;
endPoint[1] = EndY2;
endPoint[2] = 0.01;
lineObj = gbl_doc.ModelSpace.AddLine(startPoint, endPoint);
if (LineType.Length > 0)
{
lineObj.Linetype = LineType; //'"HIDDEN"
lineObj.LinetypeScale = 10;
lineObj.Update();
}
if (DrawDonutsOnLineStart == true)
{
DrawDonut((AcadBlock)gbl_doc.ModelSpace,
0, 3.0, StartX1, StartY1);
}
if (DrawDonutsOnLineEnds == true)
{
DrawDonut((AcadBlock)gbl_doc.ModelSpace,
0, 3.0, EndX2, EndY2);
}
gbl_app.ZoomAll();
}
public static void DrawLine(double StartX1,
double StartY1,
double EndX2,
double EndY2)
{
DrawLine(StartX1, StartY1, EndX2, EndY2, "", false, false); }
public static void DrawLine(double StartX1,
double StartY1,
double EndX2,
double EndY2,
string LineType)
{
DrawLine(StartX1, StartY1, EndX2, EndY2,
LineType, false, false);
}
public static void DrawLine(double StartX1,
double StartY1,
double EndX2,
double EndY2,
string LineType,
bool DrawDonutsOnLineStart)
{
DrawLine(StartX1, StartY1, EndX2,
EndY2, LineType, DrawDonutsOnLineStart, false);
}
public static AcadLWPolyline DrawDonut(AcadBlock space,
double inRad,
double outRad,
double cenPt1,
double cenPt2) {
double width, radius, PI;
double[] tmp = new double[2];
double[] v = new double[4];
AcadLWPolyline pl;
double[] basePnt = new double[3];
try
{
//Switch to terminals layer
gbl_doc.ActiveLayer = TerminalsLayer;
basePnt[0] = cenPt1;
basePnt[1] = cenPt2;
basePnt[2] = 0.0;
PI = Math.Atan(1) * 4;
width = (outRad - inRad) / 2;
radius = (inRad + width) / 2;
tmp = (double[])gbl_doc.Utility.PolarPoint(basePnt,
PI, radius);
v[0] = tmp[0];
v[1] = tmp[1];
tmp = (double[])gbl_doc.Utility.PolarPoint(basePnt,
0, radius);
v[2] = tmp[0];
v[3] = tmp[1];
pl = space.AddLightWeightPolyline(v);
pl.Closed = true;
pl.SetWidth(0, width, width);
pl.SetBulge(0, -1);
pl.SetWidth(1, width, width);
pl.SetBulge(1, -1);
//Switch to other layer
gbl_doc.ActiveLayer = SwitchLayer;
return pl;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return null;
}
}
public static void DrawSolid(double StartingXPoint,
double StartingYPoint,
double Length,
double Width)
{
AcadSolid solidObj;
double[] point1 = new double[3];
double[] point2 = new double[3];
double[] point3 = new double[3];
double[] point4 = new double[3];
//Solid Starts
point1[0] = StartingXPoint;
point1[1] = StartingYPoint;
point1[2] = 0.0;
point2[0] = StartingXPoint;
point2[1] = (StartingYPoint) - Width;
point2[2] = 0.0;
point3[0] = StartingXPoint + Length;
point3[1] = StartingYPoint;
point3[2] = 0.0;
point4[0] = StartingXPoint + Length;
point4[1] = (StartingYPoint) - Width;
point4[2] = 0.0;
solidObj = gbl_doc.ModelSpace.AddSolid(point1,
point2, point3, point4);
//Solid ENDS
}
public static void DrawText(double StartingXPoint,
double StartingYPoint,
string textString,
double Height,
double Rotation)
{
AcadText textObj;
double[] insertionPoint = new double[3];
insertionPoint[0] = StartingXPoint;
insertionPoint[1] = StartingYPoint;
insertionPoint[2] = 0.0;
textObj = gbl_doc.ModelSpace.AddText(textString,
insertionPoint, Height);
textObj.Alignment = AcAlignment.acAlignmentLeft;
textObj.Backward = false;
textObj.Rotation = Rotation;
}
public static void DrawText(double StartingXPoint,
double StartingYPoint,
string textString)
{
DrawText(StartingXPoint, StartingYPoint, textString, 3, 0); }
public static void AddText(double StartingXPoint,
double StartingYPoint,
string textString,
double Height)
{
DrawText(StartingXPoint, StartingYPoint, textString, Height, 0); }
public static void DrawCircle(double StartingXPoint,
double StartingYPoint,
double Radius)
{
AcadCircle circleObj;
double[] centerPoint = new double[3];
centerPoint[0] = StartingXPoint;
centerPoint[1] = StartingYPoint;
centerPoint[2] = 0.0;
circleObj = gbl_doc.ModelSpace.AddCircle(centerPoint, Radius); }
public static void DrawArc(double StartingXPoint,
double StartingYPoint,
double Radius)
{
//For Drawing Arc
AcadArc arcObj;
AcadCircle circleObj;
double[] centerPoint = new double[3];
double startAngleInDegree;
double endAngleInDegree;
double startAngleInRadian;
double endAngleInRadian;
//Draw Arc
centerPoint[0] = StartingXPoint;
centerPoint[1] = StartingYPoint;
startAngleInDegree = 175.0;
endAngleInDegree = 5.0;
startAngleInRadian = startAngleInDegree * 3.141592 / 180.0;
endAngleInRadian = endAngleInDegree * 3.141592 / 180.0;
arcObj = gbl_doc.ModelSpace.AddArc(centerPoint, Radius,
startAngleInRadian, endAngleInRadian);
}
public static void DrawTerminationPoint(double StartingXPoint,
double StartingYPoint) {
gbl_doc.ActiveLayer = TerminationPoints;
DrawCircle(StartingXPoint, StartingYPoint, 1.8);
DrawLine(StartingXPoint - 2.5, StartingYPoint - 4.0,
(StartingXPoint - 2.5) + 4.0,
(StartingYPoint - 4.0) + 7.0);
gbl_doc.ActiveLayer = SwitchLayer;
}
#endregion
}
}
相关文章:
Kappa Emeraude 2.42.10 生产测井解释软件
Windows PC Vis5d 2维图转成矢量图
ObjectARX 介绍
上一篇:服务式GIS
下一篇:常见文件扩展名最近更新如何选用放大电路基极电阻Rb
再谈PLC程序设计之铜墙铁壁
我们学校开始新一轮的创新课题征集,大家看看
利用matlab中的函数进行线性回归分析
搜集的LabVIEW程序界面
模电常见疑问
什么叫电
十六进制数-十六进制表示-什么是十六进制
电子管单端输出变压器的设计计算公式
SolidWorks扫描之挪移心法二
音频、视频格式大全
The installer cannot read the mwinstall.dll file, This is probably due to a CD r
广告链接-
热门文章CAD电气制图快速入门教程
AutoCAD绘图速度训练教程
CAD系统变量大全
CAD作图原则--正对初学者
79种CAD小问题解决办法
CAD基本绘图与编辑命令
CAD制图技巧
AutoCAD应用技巧
把CAD文件转成JPG图片
什么是CAD?
AutoCAD初学者如何有效提高绘图速度
AutoCAD应用中常见问题的分析与解决
AutoCAD 高级技巧
常用AutoCAD快捷键有效提高绘图速度
AutoCAD中输入特殊字符
AutoCAD软件作图的速度技巧
广告推荐文章最新文章热门文章
电力系统供电局笔试题
PLC现场工程师工作指南
(转)给自动化毕业生以及刚工作
写给自控类大学生的一些意见
【转载】可以让你少奋斗10年的工
转分析现行的常用的文件格式类别
常见文件扩展名
用C#实现外部调用CAD绘图一例
服务式GIS
微狗——内置微处理器的智能型加密
对Linux的误解和错误认识
电子档案编制系统软件开源
解决加载arx时,出现非法异常的方案
适合任何CAD版本的CAD开发技巧
Delcam PowerInspect 5040 sp1\
终于付诸行动了~~~
工控主板EM9000数字IO的增强扩展
Protel使用中遇到的问题说明
自恢复保险丝PPTC的使用整理
ucos-ii核心算法分析
6264外部数据存储器的使用
VB实现电脑与台达PLC的串列通信二
频敏电阻启动式绕线转子异步电动
一种高效的无线传感器网络认证方
ARM开发经典学习网站推荐
基于C8051F的动平衡测试系统
变压器铁心材料介绍
主题推广高校自动化网| 关于我们| 广告服务| 友情链接|网站团队|版权申明|网站团队| 联系我们
中国高校自动化网All Rights Reserved. 互联网违法和不良信息举报
信息产业部备案号: 湘ICP备09001063号
本文来自: 高校自动化网(https://www.wendangku.net/doc/372244521.html,) 详细出处参考(转载请保留本链接):https://www.wendangku.net/doc/372244521.html,/html/cad/8729.html