关于autocad .net二次开发的初学者疑问

一段在 使用ObjectIds 的代码,是在autocad.net开发手册上面摘抄的一段代码,但或许是还有什么namespace没有引用,编译会出现错误
[code=csharp]using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Internal;
using Autodesk.AutoCAD.Interop.Common;

namespace help2
{
class Object
{

    Document acCurDb = Application.DocumentManager.MdiActiveDocument.Database;
    Transaction acTrans = acCurDb.TransactionManager.StartTransaction();

    LayerTableRecord acLyrTblRec ;
    acLyrTblRec = acTrans.GetObject(acCurDb.LayerZero,OpenMode.ForRead) as LayerTableRecord;

    acTrans.Dispose();

}

}
[/code]
http://img.bbs.csdn.net/upload/201502/14/1423902708_150151.jpg

如图,很多地方说cannot resolve symbol

请问我是哪里错了,跪谢

3个回答

也可能是代码里使用using,但没有通过以下方式添加对应的引用的原因:
图片说明

没有做过这方面的,看错误提示是因为还有什么namespace没有引用。

testcs_dn
微wx笑 回复大象从不倒下: 起步入门的时候确实比较痛苦,坚持一断时间就好了。
接近 5 年之前 回复
tytmty
大象从不倒下 谢谢,好像最后是有个dll忘了添加了。刚刚起步,各种无助。谢谢
接近 5 年之前 回复

参考以下代码:

 using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Colors;
using Autodesk.AutoCAD.EditorInput;

[assembly: CommandClass(typeof(ClassLibrary.Class))]

namespace ClassLibrary
{
  /// <summary>
  /// Summary description for Class.
  /// </summary>
  public class Class
  {
    public Class()
    {
      // TODO: Add constructor logic here
    }

    #region CreateEmployeeDefinition
    // This function returns the ObjectId for the BlockTableRecord called "EmployeeBlock",
    // creating it if necessary.  The block contains three entities - circle, text 
    // and ellipse.
    private ObjectId CreateEmployeeDefinition()
    {
      ObjectId newBtrId = new ObjectId(); //The return value for this function
      Database db = HostApplicationServices.WorkingDatabase; //save some space
      using (Transaction trans = db.TransactionManager.StartTransaction()) //begin the transaction
      {
        // Now, access the database and obtain a reference to the BlockTable
        BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);
        if ((bt.Has("EmployeeBlock")))
        {
          newBtrId = bt["EmployeeBlock"];
        }
        else
        {
          Point3d center = new Point3d(0, 0, 0); 
          // Declare and define the entities we want to add:
          // Circle:
          Circle circle = new Circle(center, Vector3d.ZAxis, 2);

          // Attribute Definition
          AttributeDefinition text = new AttributeDefinition(center, "NoName", "Name:", "Enter Name", db.Textstyle);
          text.ColorIndex = 2;

          // Ellipse:
          Ellipse ellipse = new Ellipse(center, Vector3d.ZAxis, new Vector3d(3, 0, 0), 0.5, 0, 0);

          // Next, create a layer with the helper function, and assign the layer to our entities.
          ObjectId empId = CreateLayer();
          text.LayerId = empId;
          circle.LayerId = empId;
          ellipse.LayerId = empId;
          // Set the color for each entity irrespective of the layer's color.
          text.ColorIndex = 2;
          circle.ColorIndex = 1;
          ellipse.ColorIndex = 3;

          // Create a new block definition called EmployeeBlock
          BlockTableRecord newBtr = new BlockTableRecord();
          newBtr.Name = "EmployeeBlock";
          newBtrId = bt.Add(newBtr); //Add the block, and set the id as the return value of our function
          trans.AddNewlyCreatedDBObject(newBtr, true); //Let the transaction know about any object/entity you add to the database!

          newBtr.AppendEntity(circle); //Append our entities...
          newBtr.AppendEntity(text);
          newBtr.AppendEntity(ellipse);
          trans.AddNewlyCreatedDBObject(circle, true); //Again, let the transaction know about our newly added entities.
          trans.AddNewlyCreatedDBObject(text, true);
          trans.AddNewlyCreatedDBObject(ellipse, true);
        }

        trans.Commit(); //All done, no errors?  Go ahead and commit!
      }
      return newBtrId;
    }
#endregion

    #region CreateEmployeeCommand
      [CommandMethod("CREATE")]
      public void Create()
      {
          Database db = HostApplicationServices.WorkingDatabase;
          Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
          try
          {
              using (Transaction trans = db.TransactionManager.StartTransaction())
              {
                  //Prompts for each employee detail
                  PromptStringOptions prName = new PromptStringOptions("Enter Employee Name");
                  PromptStringOptions prDiv = new PromptStringOptions("Enter Employee Division");
                  PromptDoubleOptions prSal = new PromptDoubleOptions("Enter Employee Salary");
                  PromptPointOptions prPos = new PromptPointOptions("Enter Employee Position or");

                  //Add keywords when prompting for position
                  prPos.Keywords.Add("Name");
                  prPos.Keywords.Add("Division");
                  prPos.Keywords.Add("Salary");

                  //Set the default values for each of these
                  prName.Message = "Earnest Shackleton";
                  prDiv.Message = "Sales";
                  prSal.Message ="10000.0f";

                  //Set conditions for prompting
                  prPos.AllowNone = false; //Do not allow null values

                  //prompt results - set explicitly to null 
                  PromptResult prNameRes = null;
                  PromptResult prDivRes = null;
                  PromptDoubleResult prSalRes = null;
                  PromptPointResult prPosRes = null;

                  //Loop to get employee details. Exit the loop when positon is entered
                  while (prPosRes == null || prPosRes.Status != PromptStatus.OK)
                  {
                      //Prompt for position
                      prPosRes = ed.GetPoint(prPos);
                      if (prPosRes.Status == PromptStatus.Keyword) //Got a keyword
                      {
                          switch (prPosRes.StringResult)
                          {
                              case "Name":
                                  //Get employee name
                                  prName.AllowSpaces = true;
                                  prNameRes = ed.GetString(prName);
                                  if (prNameRes.Status != PromptStatus.OK)
                                      throw new System.Exception("Error or User Cancelled");
                                  break;
                              case "Division":
                                  //Get employee division
                                  prDiv.AllowSpaces = true;
                                  prDivRes = ed.GetString(prDiv);
                                  if (prDivRes.Status != PromptStatus.OK)
                                      throw new System.Exception("Error or User Cancelled");
                                  break;
                              case "Salary":
                                  //Get employee salary
                                  prSal.AllowNegative = false;
                                  prSal.AllowNone = true;
                                  prSal.AllowZero = false;
                                  prSalRes = ed.GetDouble(prSal);
                                  if (prSalRes.Status != PromptStatus.OK & prSalRes.Status != PromptStatus.None)
                                      throw new System.Exception("Error or User Cancelled");
                                  break;
                          }
                      }
                      if (prPosRes.Status == PromptStatus.Cancel || prPosRes.Status == PromptStatus.Error)
                          throw new System.Exception("Error or User Cancelled");
                  }

                  //Create the Employee - either use the input value or the default value...
                  string empName = (prNameRes == null ? prName.Message : prNameRes.StringResult);
                  string divName = (prDivRes == null ? prDiv.Message : prDivRes.StringResult);
                  double salary = (prSalRes == null ? Convert.ToDouble( prSal.Message) : prSalRes.Value);

                  CreateEmployee(empName, divName, salary, prPosRes.Value);


                  //Now create the division 
                  //Pass an empty string for manager to check if it already exists
                  string manager = "";
                  ObjectId xRecId = CreateDivision(divName, manager);

                  //Open the department manager XRecord
                  Xrecord depMgrXRec = (Xrecord)trans.GetObject(xRecId, OpenMode.ForRead);
                  TypedValue[] typedVal = depMgrXRec.Data.AsArray();
                  foreach (TypedValue val in typedVal)
                  {
                      string str = (string)val.Value;
                      if (str == "")
                      {
                          //Manager was not set, now set it
                          // Prompt for  manager name first
                          ed.WriteMessage("\r\n");
                          PromptStringOptions prManagerName = new PromptStringOptions("No manager set for the division! Enter Manager Name");
                          prManagerName.Message = "Delton T. Cransley";
                          prManagerName.AllowSpaces = true;
                          PromptResult prManagerNameRes = ed.GetString(prManagerName);
                          if (prManagerNameRes.Status != PromptStatus.OK)
                              throw new System.Exception("Error or User Cancelled");
                          //Set a manager name
                          depMgrXRec.Data = new ResultBuffer(new TypedValue((int)DxfCode.Text, prManagerNameRes.StringResult));
                      }
                  }
                  trans.Commit();
              }
          }
          catch (System.Exception ex)
          {
              ed.WriteMessage("\nError: "   ex.Message   "\n");
          }
      }
    #endregion

    #region CreateEmployee
    // This function creates a new BlockReference to the "EmployeeBlock" object,
    // and adds it to ModelSpace.
    private ObjectId CreateEmployee(string name, string division, double salary, Point3d pos)
    {
      // get the current working database
      Database db = HostApplicationServices.WorkingDatabase;
      using (Transaction trans = db.TransactionManager.StartTransaction())
      {
        BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForWrite));
        BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
        // Create the block reference...use the return from CreateEmployeeDefinition directly!
        BlockReference br = new BlockReference(pos, CreateEmployeeDefinition());

        AttributeReference attRef = new AttributeReference();
        // Iterate the employee block and find the attribute definition
        BlockTableRecord empBtr = (BlockTableRecord)trans.GetObject(bt["EmployeeBlock"], OpenMode.ForRead);
        foreach (ObjectId id in empBtr)
        {
          Entity ent = (Entity)trans.GetObject(id, OpenMode.ForRead, false);
          // Use it to open the current object! 
          if (ent is AttributeDefinition)  // We use .NET's RunTimeTypeInformation (RTTI) to establish type.
          {
            // Set the properties from the attribute definition on our attribute reference
            AttributeDefinition attDef = ((AttributeDefinition)(ent));
            attRef.SetPropertiesFrom(attDef);
            attRef.Position = new Point3d(attDef.Position.X   br.Position.X, attDef.Position.Y   br.Position.Y, attDef.Position.Z   br.Position.Z);
            attRef.Height = attDef.Height;
            attRef.Rotation = attDef.Rotation;
            attRef.Tag = attDef.Tag;
            attRef.TextString = name;
          }
        }
        // Add the reference to ModelSpace
        btr.AppendEntity(br);
        // Add the attribute reference to the block reference
        br.AttributeCollection.AppendAttribute(attRef);
        // let the transaction know
        trans.AddNewlyCreatedDBObject(attRef, true);
        trans.AddNewlyCreatedDBObject(br, true);

        // Create the custom per-employee data
        Xrecord xRec = new Xrecord();
        // We want to add 'Name', 'Salary' and 'Division' information.  Here is how:
        xRec.Data = new ResultBuffer(
          new TypedValue((int)DxfCode.Text, name),
          new TypedValue((int)DxfCode.Real, salary),
          new TypedValue((int)DxfCode.Text, division));

        // Next, we need to add this data to the 'Extension Dictionary' of the employee.
        br.CreateExtensionDictionary();
        DBDictionary brExtDict = (DBDictionary)trans.GetObject(br.ExtensionDictionary, OpenMode.ForWrite, false);
        brExtDict.SetAt("EmployeeData", xRec); //Set our XRecord in the dictionary at 'EmployeeData'.
        trans.AddNewlyCreatedDBObject(xRec, true);

        ObjectId retId = br.ObjectId;
        trans.Commit();

        return retId;
      }
    }
    #endregion

    #region CreateLayer
    // This function returns the objectId for the "EmployeeLayer", creating it if necessary.
    private ObjectId CreateLayer()
    {
      ObjectId layerId;
      Database db = HostApplicationServices.WorkingDatabase;
      using (Transaction trans = db.TransactionManager.StartTransaction())
      {
        // open the layer table for read first, to check to see if the requested layer exists
        LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);
        // Check if EmployeeLayer exists...
        if (lt.Has("EmployeeLayer"))
        {
          layerId = lt["EmployeeLayer"];
        }
        else
        {
          // if not, create the layer here.
          LayerTableRecord ltr = new LayerTableRecord();
          ltr.Name = "EmployeeLayer"; // Set the layer name
          ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, 2);
          // upgrade the open from read to write
          lt.UpgradeOpen();
          // now add the new layer
          layerId = lt.Add(ltr);
          trans.AddNewlyCreatedDBObject(ltr, true);
          trans.Commit(); // Only need to commit when we have made a change!
        }
      }
      return layerId;
    }
    #endregion

    #region CreateDivision
    private ObjectId CreateDivision(string division, string manager)
    {
      ObjectId retId = ObjectId.Null;
      Database db = HostApplicationServices.WorkingDatabase;
      using (Transaction trans = db.TransactionManager.StartTransaction())
      {
        // First, get the Named Objects Dictionary (NOD)...
        DBDictionary NOD = (DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForWrite);
        // Define a corporate level dictionary
        DBDictionary acmeDict;

        // here's another way to check to see if an entry exists, using try/catch instead of has[]
        try
        {
          // Just throw if it doesn't exist...do nothing else
          acmeDict = (DBDictionary)trans.GetObject(NOD.GetAt("ACME_DIVISION"), OpenMode.ForRead);
        }
        catch
        {
          //Doesn't exist, so create one, and set it in the NOD?
          acmeDict = new DBDictionary();
          NOD.SetAt("ACME_DIVISION", acmeDict);
          trans.AddNewlyCreatedDBObject(acmeDict, true);
        }

        // Now get the division we want from acmeDict
        DBDictionary divDict;
        try
        {
          divDict = (DBDictionary)trans.GetObject(acmeDict.GetAt(division), OpenMode.ForWrite);
        }
        catch
        {
          divDict = new DBDictionary();
          //Division doesn't exist, create one
          acmeDict.UpgradeOpen();
          acmeDict.SetAt(division, divDict);
          trans.AddNewlyCreatedDBObject(divDict, true);
        }

        // Now get the manager info from the division
        // We need to add the name of the division supervisor.  We'll do this with another XRecord.
        Xrecord mgrXRec;
        try
        {
          mgrXRec = (Xrecord)trans.GetObject(divDict.GetAt("Department Manager"), OpenMode.ForWrite);
        }
        catch
        {
          mgrXRec = new Xrecord();
          mgrXRec.Data = new ResultBuffer(new TypedValue((int)DxfCode.Text, manager));
          divDict.SetAt("Department Manager", mgrXRec);
          trans.AddNewlyCreatedDBObject(mgrXRec, true);
        }

        // Return the department manager XRecord
        retId = mgrXRec.ObjectId;
        trans.Commit();
      }
      return retId;
    }
    #endregion

    #region EmployeeCountCommand
    [CommandMethod("EMPLOYEECOUNT")]
    public void EmployeeCount()
    {
      // get the working database
      Database db = HostApplicationServices.WorkingDatabase;

      // we need to be able to print to the commandline.  Here is an object which will help us:
      Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;

      try
      {
        // Start the transaction.
        using (Transaction trans = db.TransactionManager.StartTransaction())  
        {
          int nEmployeeCount = 0;
          // First, get at the BlockTable, and the ModelSpace BlockTableRecord
          BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
          BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead);

          // here is the fun part.  This is where we iterate through ModelSpace:
          foreach (ObjectId id in btr)
          {
            Entity ent = (Entity)trans.GetObject(id, OpenMode.ForRead, false);  //Use it to open the current object!
            if (ent.GetType() == typeof(BlockReference)) //We use .NET's RTTI to establish type.
            {
              nEmployeeCount  = 1;
            }
          }
          ed.WriteMessage("Employees Found: "   nEmployeeCount.ToString());
          trans.Commit();
        }
      }
      catch (System.Exception ex)
      {
        ed.WriteMessage("Error Counting Employees: "   ex.Message);
      }
    }
    #endregion

    #region ListEmployee
    //We want a command which will go through and list all the relevant employee data.
    private static void ListEmployee(ObjectId employeeId, ref string[] saEmployeeList)
    {
      Database db = HostApplicationServices.WorkingDatabase;
      // Start the transaction
      using (Transaction trans = db.TransactionManager.StartTransaction()) 
      {
        int nEmployeeDataCount = 0;
        Entity ent = (Entity)trans.GetObject(employeeId, OpenMode.ForRead, false); // Use it to open the current object!
        if (ent.GetType() == typeof(BlockReference)) // We use .NET's RTTI to establish type.
        {
          // Not all BlockReferences will have our employee data, so we must make sure we can handle failure
          bool bHasOurDict = true;
          Xrecord EmployeeXRec = null;
          try
          {
            BlockReference br = (BlockReference)ent;
            DBDictionary extDict = (DBDictionary)trans.GetObject(br.ExtensionDictionary, OpenMode.ForRead, false);
            EmployeeXRec = (Xrecord)trans.GetObject(extDict.GetAt("EmployeeData"), OpenMode.ForRead, false);
          }
          catch
          {
            // something bad happened...our dictionary and/or XRecord is not accessible for some reason
            bHasOurDict = false; 
          }

          // If obtaining the Extension Dictionary, and our XRecord is successful...
          if (bHasOurDict) 
          {
            // allocate memory for the list
            saEmployeeList = new String[4];

            TypedValue resBuf = EmployeeXRec.Data.AsArray()[0];
            saEmployeeList.SetValue(string.Format("{0}\n", resBuf.Value), nEmployeeDataCount);
            nEmployeeDataCount  = 1;
            resBuf = EmployeeXRec.Data.AsArray()[1];
            saEmployeeList.SetValue(string.Format("{0}\n", resBuf.Value), nEmployeeDataCount);
            nEmployeeDataCount  = 1;
            resBuf = EmployeeXRec.Data.AsArray()[2];
            string str = (string)resBuf.Value;
            saEmployeeList.SetValue(string.Format("{0}\n", resBuf.Value), nEmployeeDataCount);
            nEmployeeDataCount  = 1;
            DBDictionary NOD = (DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead, false);
            DBDictionary acmeDict = (DBDictionary)trans.GetObject(NOD.GetAt("ACME_DIVISION"), OpenMode.ForRead);
            DBDictionary salesDict = (DBDictionary)trans.GetObject(acmeDict.GetAt((string)EmployeeXRec.Data.AsArray()[2].Value), OpenMode.ForRead);
            Xrecord salesXRec = (Xrecord)trans.GetObject(salesDict.GetAt("Department Manager"), OpenMode.ForRead);
            resBuf = salesXRec.Data.AsArray()[0];
            saEmployeeList.SetValue(string.Format("{0}\n", resBuf.Value), nEmployeeDataCount);
            nEmployeeDataCount  = 1;
          }
        }
        trans.Commit();
      }
    }
    #endregion

    #region ListEmployeesCommand
    [CommandMethod("LISTEMPLOYEES")]
    public void List()
    {
      Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
      try
      {
        PromptSelectionOptions Opts = new PromptSelectionOptions();
        TypedValue[] filList = new TypedValue[1];
        //Build a filter list so that only block references are selected
        filList[0] = new TypedValue((int)DxfCode.Start, "INSERT");
        SelectionFilter filter = new SelectionFilter(filList);
        PromptSelectionResult res = ed.GetSelection(Opts, filter);
        //Do nothing if selection is unsuccessful
        if (res.Status != PromptStatus.OK)
          return;
        Autodesk.AutoCAD.EditorInput.SelectionSet SS = res.Value;
        ObjectId[] idArray;
        idArray = SS.GetObjectIds();
        string[] saEmployeeList = new string[4];
        //collect all employee details in saEmployeeList array
        foreach (ObjectId employeeId in idArray)
        {
          ListEmployee(employeeId, ref saEmployeeList);
          //Print employee details to the command line
          foreach (string employeeDetail in saEmployeeList)
          {
            ed.WriteMessage(employeeDetail);
          }
          //separator
          ed.WriteMessage("----------------------"   "\r\n");
        }
      }
      catch (System.Exception ex)
      {
        ed.WriteMessage("Error Listing Employees: "   ex.Message);
      }
    }
    #endregion

    #region PrintoutEmployeeCommand
    [CommandMethod("PRINTOUTEMPLOYEE")]
    public static void PrintoutEmployee()
    {
      Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
      Database db = HostApplicationServices.WorkingDatabase;
      try
      {
        using (Transaction trans = db.TransactionManager.StartTransaction())
        {
          BlockTable bt = (BlockTable)trans.GetObject(HostApplicationServices.WorkingDatabase.BlockTableId, OpenMode.ForRead);
          BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead);
          foreach (ObjectId id in btr)
          {
            Entity ent = (Entity)trans.GetObject(id, OpenMode.ForRead, false);
            if (ent is BlockReference)
            {
              string[] saEmployeeList = null;

              ListEmployee(id, ref saEmployeeList);
              if ((saEmployeeList.Length == 4))
              {
                ed.WriteMessage("Employee Name: {0}", saEmployeeList[0]);
                ed.WriteMessage("Employee Salary: {0}", saEmployeeList[1]);
                ed.WriteMessage("Employee Division: {0}", saEmployeeList[2]);
                ed.WriteMessage("Division Manager: {0}", saEmployeeList[3]);
              }
            }
          }
        }
      }
      catch (System.Exception ex)
      {
        ed.WriteMessage("Error Printing Out Employees: "   ex.Message);
      }
    }
    #endregion    

    #region TestCommand
    [CommandMethod("Test")]
    public void Test()
    {
      Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
      try
      {
        CreateDivision("Sales", "Randolph P. Brokwell");
      }
      catch (System.Exception ex)
      {
        ed.WriteMessage("Error in Test Command: "   ex.Message);
      }
    }
    #endregion
  }
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c# autocad 二次开发,application services无法使用
只要程序中加入下列代码,程序无法正常运行(不会报错,但是会自动跳过该段代码) Autodesk.AutoCAD.ApplicationServices.Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
求教ActiveX 二次开发AutoCAD的问题
用C#语言基于ActiveX二次开发AutoCAD时,想实现选择CAD界面的一个圆,能返回程序中该圆的原点坐标。希望大神们教教我!
c++ 在AUTOCAD的二次开发中的注意事项,求大神指点!万分感谢
c++ 在AutoCAD开发中的应用 ,是不是最适合的开发工具,怎么进行学习开发,我是一个小白 ,求各位大神指点
关于cad二次开发编辑cuix的问题
网上的资料挺少的。 我需要通过.net编辑cuix文件给AutoCAD2010增加几个toolbarbutton,思路是这样的: 将cuix后缀改为zip,然后解压,修改解压后生成的cui文件,再压缩成zip文件,最后将后缀改为cuix。 以上操作我事先用手动完成查看结果,结果打开cad后所有的图标全都显示不出来,整个页面都乱套了。 请问要怎么可以正确编辑AutoCAD2010以上版本的cuix文件,用C#代码最好?
C# 下 采用AutoCAD .net 对图元进行定位与着色
我只知道图元的坐标,我想通过坐标来对图元进行定位,然后对该图元进行添加背景色,该图元为一个圆。 使用场景:我的CAD工程图纸,用一堆小圆圈表示物体所在位置,当该物体预警时,需要修改状态(着色),通过插件对指定小圆圈进行着色(如绿色或红色)。
“Form1.MyText”不可访问,因为它具有一定的保护级别
这里的MyText是一个textbox的name,之前我用的是InputText,改成MyText还是不行,求帮助是怎么回事?? using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.EditorInput; using WindowsFormsApplication3; [assembly:CommandClass (typeof(modaldialogClassLibrary3 .Class1))] namespace modaldialogClassLibrary3 { public class Class1 { [CommandMethod("modaldialog")] public void modaldialog() { using (Form1 form = new Form1()) { form.ShowInTaskbar = false; Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(form); if(form.DialogResult==System.Windows.Forms.DialogResult.OK) Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\n"+ form.MyText.Text); } } } } ``` ```
“System.IO.FileNotFoundException”
![图片说明](https://img-ask.csdn.net/upload/201711/22/1511314510_565820.png)![图片说明](https://img-ask.csdn.net/upload/201711/22/1511314524_646563.png) c#创建一个MenuItem快捷菜单,添加的引用位置正确,然后在调试的时候出现异常引发的异常:“System.IO.FileNotFoundException”(位于 System.s.Forms中)Window 这是创建代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.Geometry; [assembly:CommandClass(typeof(WindowsFormsApplication4.Form1))] namespace WindowsFormsApplication4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void mi1_Click(object sender, EventArgs e) { Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; doc.SendStringToExecute("Line\n", true, false, true); } private void mi2_Click(object sender, EventArgs e) { Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; doc.SendStringToExecute("Circle\n", true, false, true); } private void ce_Click(object sender, EventArgs e) { ToolStripMenuItem windowMenu = new ToolStripMenuItem(); } private static void Show(Point mousePosition) { throw new NotImplementedException(); } } }
cad2014 C#二次开发,过滤问题
如何做过滤操作 PromptSelectionResult ProSset = null; TypedValue[] filList = new TypedValue[1] { new TypedValue((int)DxfCode.LayerName, name) }; SelectionFilter sfilter = new SelectionFilter(filList); Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; ProSset = ed.SelectAll(sfilter); ProSset Status为e为Error,Value为null 求解决方案
C# cad二次开发,版本问题
。。。各位有没有装过过多个cad版本进行开发,先装了cad2008的再装cad2010再引用dll 的时候只找到了autocad/objectdbx common 17.0 type library,找不到autocad/objectdbx common 18.0 type library了有没有办法解决
VS中编程想在AutoCAD中插入一个块参照,已经导入CAD库中需要的头文件并且找到相关的函数,但是不知道里面的Password是什么?
MFC中已经导入了CAD相关的头文件,通过编程可以在CAD中画直线、写文字,现如今想再插入一个已知的放在C盘中的块参照,找到了相关的函数但是不会用, LPDISPATCH InsertBlock(VARIANT& InsertionPoint, LPCTSTR Name, double Xscale, double Yscale, double Zscale, double Rotation, VARIANT& Password) { LPDISPATCH result; static BYTE parms[] = VTS_VARIANT VTS_BSTR VTS_R8 VTS_R8 VTS_R8 VTS_R8 VTS_VARIANT ; InvokeHelper(0x62a, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms, &InsertionPoint, Name, Xscale, Yscale, Zscale, Rotation, &Password); return result; } InsertPoint是块参照的插入点,Name是块的名称,Xscale是X比例,Rotation是插入块的比例,但是这Password不知道对应的是CAD中什么操作。向大佬请教,谢谢!
AutoCAD 2014 vs2015怎么配置开发环境
![图片说明](https://img-ask.csdn.net/upload/201805/15/1526348722_244592.png)
关于autocad2008字库问题
为什么autocad2008不能一次性安装成功,还需要字库。
CAD二次开发如何与Excel之间通信
AutoCad中利用Ole已经包含了导入Excel表格功能,但我想自己编写一个小软件导入Excel表格,请问如何利用CAD提供的接口去开发?
CAD二次开发我已经获取到视图上所有实体id,怎么对这些实体进行操作
![图片说明](https://img-ask.csdn.net/upload/201805/22/1526972213_452948.png)
AutoCAD2013安装失败的原因,求解!!!!!!!!
我在安装AutoCAD2013时出现了这个问题:提示查看安装日志,然后就是安装时败.我想求解——如何才能安装上AutoCAD (注:我之前装过,但是用起来相当卡,我以为是安装出了问题,所以卸载了,但是再也装不上了......)
vba求各位大神指导:CAD二次开发vba语言完成一个小程序
编制一个程序,绘制如图所示的路径图案。 要求: 1.路径两端中点由用户输入 2.路径宽度用户自定 3.图案不出边界; 4.填充的圆形图案在2层,直径为路径宽度的1/5,颜色为兰色 5.路径边界线绘制在1层,为红色。 6.图下写上一行文字,由用户输入。 软件AutoCAD2007,VBA语言编写代码
c# autocad 将一个DWG里的管线复制到另一个DWG中
c# autocad将一个DWG里的特定图层提取到另一个DWG中
AutoCAD怎样导出矢量图形数据
具体说明如下: 使用AutoCAD绘制的线性地图(类似googlemap的样子),将其中的图形数据读出, 生成指定的矢量图形格式。 然后导出的矢量图形用于二次开发,最后在web页面中显示图形输出。 望详解! [b]问题补充:[/b] 具体说明如下: 使用AutoCAD绘制的线性地图(类似googlemap的样子),将其中的图形数据读出, 生成指定的矢量图形格式。 然后导出的矢量图形用于二次开发,最后在web页面中显示图形输出。 望详解! 主要是用于web的矢量图形格式,理想格式是svg。 目前发现一国外转换工具,但注册费很贵,求开源方案
类似AutoCAD软件提高重绘速度
我正在开发一款类似AutocAD的软件,但是在元素比较多的情况下,元素重绘的速度很慢。 因为是矢量图,一旦鼠标滚动或者放缩,所有的图元必须重新计算新的窗口坐标,并且在新的位置重绘出来。 为了提高速度,我使用了空间索引技术,可以排除一些不在可视区域内的元素,并且当元素很小的时候,可以忽略,不显示,但是即使是这样,元素很多且都需要显示的情况下,重绘的速度还是很慢。 有什么方法可以提高重绘的速度吗? 有谁知道AutoCAD是怎么处理的吗?AutoCAD在元素很多的情况下,依然很流畅。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
前端 | 2. 正则
转载请注明以下: 本文转自清自以敬的博客:https://blog.csdn.net/qq_45791147 文章目录1.转义2.正则表达式初步2.1.匹配字符2.1.1.组成元素2.1.2.基础正则的设计 1.转义 转义的作用: 当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“\”来构建该字符转义...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
Docker 从入门到掉坑
Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器。但是docker本身和虚拟机还是有较为明显的出入的。我大致归纳了一下,可以总结为以下几点: docker自身也有着很多的优点,关于它的优点,可以总结为以下几项: 安装docker 从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Doc...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问