Source_Liu 发表于 2009-5-30 22:39:00

用C#实现外部调用CAD绘图一例

实现外部程序调用CAD程序,代码中加入了自定义了的类——PF (PublicFunctions),类中包含了几个很实用的函数,如CreateObject()可以创建打开一个新的AutoCAD文档,还有绘制线(Line)、文字(Text)和圆(Circel)等函数。注释不多,但仔细研究一下还是对自己很有帮助的。

Source_Liu 发表于 2009-5-30 22:40:00


using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Windows.Forms;
using AutoCAD;
namespace CADAutomation
{
    public static class&nbspF
    {
      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&nbspoints
      public static AcadLayer TerminationPoints;
      #region&nbspublicFunctions
      public static void CloseAllInstance()
      {
         &nbsprocess[] aCAD =
            &nbsprocess.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 =&nbspF.gbl_doc.Layers.Add("Switch110Layer");
                SwitchLayer.color = AutoCAD.AcColor.acGreen;
               &nbspF.gbl_doc.ActiveLayer = SwitchLayer;
                //Layer For Donuts
                TerminalsLayer =&nbspF.gbl_doc.Layers.Add("TerminalsLayer");
                TerminalsLayer.color = AutoCAD.AcColor.acRed;
                //Layer Termination&nbspoints
                TerminationPoints =
               &nbspF.gbl_doc.Layers.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;
            double[] endPoint = new double; ;
            startPoint = StartX1;
            startPoint = StartY1;
            startPoint = 0.0;
            endPoint = EndX2;
            endPoint = EndY2;
            endPoint = 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,&nbspI;
            double[] tmp = new double;
            double[] v = new double;
            AcadLWPolyline pl;
            double[] basePnt = new double;
            try
            {
                //Switch to terminals layer
                gbl_doc.ActiveLayer = TerminalsLayer;
                basePnt = cenPt1;
                basePnt = cenPt2;
                basePnt = 0.0;
               &nbspI = Math.Atan(1) * 4;
                width = (outRad - inRad) / 2;
                radius = (inRad + width) / 2;
                tmp = (double[])gbl_doc.Utility.PolarPoint(basePnt,
                                                      &nbspI, radius);
                v = tmp;
                v = tmp;
                tmp = (double[])gbl_doc.Utility.PolarPoint(basePnt,
                                                      0, radius);
                v = tmp;
                v = tmp;
                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;
            double[] point2 = new double;
            double[] point3 = new double;
            double[] point4 = new double;
            //Solid Starts
            point1 = StartingXPoint;
            point1 = StartingYPoint;
            point1 = 0.0;
            point2 = StartingXPoint;
            point2 = (StartingYPoint) - Width;
            point2 = 0.0;
            point3 = StartingXPoint + Length;
            point3 = StartingYPoint;
            point3 = 0.0;
            point4 = StartingXPoint + Length;
            point4 = (StartingYPoint) - Width;
            point4 = 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;
            insertionPoint = StartingXPoint;
            insertionPoint = StartingYPoint;
            insertionPoint = 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;
            centerPoint = StartingXPoint;
            centerPoint = StartingYPoint;
            centerPoint = 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;
            double startAngleInDegree;
            double endAngleInDegree;
            double startAngleInRadian;
            double endAngleInRadian;
            //Draw Arc
            centerPoint = StartingXPoint;
            centerPoint = 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
    }
}

stuwhh 发表于 2012-11-17 23:34:00


此处如何修改文字属性?可否提供属性修改范例,谢谢

lysgyx 发表于 2012-12-28 09:22:00

不错。谢谢!
页: [1]
查看完整版本: 用C#实现外部调用CAD绘图一例