找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1749|回复: 2

[分享] 很好的arx学习代码(.net版)

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-7-18 15:11:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
http://www.cppblog.com/mzty/archive/2006/06/26/9021.html

  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.Colors;
  7. using Autodesk.AutoCAD.EditorInput;
  8. [assembly: CommandClass(typeof(ClassLibrary.Class))]
  9. namespace ClassLibrary
  10. {
  11.     ///   <summary>
  12.     ///  Summary description for Class.
  13.     ///   </summary>   
  14.     public class Class
  15.     {
  16.         public Class()
  17.         {
  18.             //
  19.             //  TODO: Add constructor logic here
  20.             //
  21.         }
  22.         // This function returns the ObjectId for the BlockTableRecord called "EmployeeBlock",
  23.         // creating it if necessary.  The block contains three entities - circle, text
  24.         // and ellipse.
  25.         public ObjectId CreateEmployeeDefinition()
  26.         {
  27.             ObjectId newBtrId = new ObjectId();  // The return value for this function
  28.             Database db = HostApplicationServices.WorkingDatabase;  // save some space
  29.             Transaction trans = db.TransactionManager.StartTransaction();  // begin the transaction
  30.             Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  31.             try
  32.             {
  33.                 // Now, drill into the database and obtain a reference to the BlockTable
  34.                 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);
  35.                 if ((bt.Has(" EmployeeBlock ")))
  36.                 {
  37.                     newBtrId = bt[" EmployeeBlock "];
  38.                 }
  39.                 else
  40.                 {
  41.                     Point3d center = new Point3d(10, 10, 0);  //  convenient declaration
  42.                     //   Declare and define the entities we want to add:
  43.                     // Circle:
  44.                     Circle circle = new Circle(center, Vector3d.ZAxis, 2);
  45.                     // Text:
  46.                     // MText text = new MText();
  47.                     // text.Contents = "Earnest Shackleton";
  48.                     // text.Location = center;
  49.                     // Attribute Definition
  50.                     AttributeDefinition text = new AttributeDefinition(center, " NoName ", " Name: ", " Enter Name ", db.Textstyle);
  51.                     text.ColorIndex = 2;
  52.                     // Ellipse:
  53.                     Ellipse ellipse = new Ellipse(center, Vector3d.ZAxis, new Vector3d(3, 0, 0), 0.5, 0, 0);
  54.                     // Next, create a layer with the helper function, and assign
  55.                     // the layer to our entities.
  56.                     ObjectId empId = CreateLayer();
  57.                     text.LayerId = empId;
  58.                     circle.LayerId = empId;
  59.                     ellipse.LayerId = empId;
  60.                     // Set the color for each entity irrespective of the layer's color.
  61.                     text.ColorIndex = 2;
  62.                     circle.ColorIndex = 1;
  63.                     ellipse.ColorIndex = 3;
  64.                     // Create a new block definition called EmployeeBlock
  65.                     BlockTableRecord newBtr = new BlockTableRecord();
  66.                     newBtr.Name = " EmployeeBlock ";
  67.                     newBtrId = bt.Add(newBtr);  // Add the block, and set the id as the return value of our function
  68.                     trans.AddNewlyCreatedDBObject(newBtr, true);  // Let the transaction know about any object/entity you add to the database!
  69.                     newBtr.AppendEntity(circle);  // Append our entities
  70.                     newBtr.AppendEntity(text);
  71.                     newBtr.AppendEntity(ellipse);
  72.                     trans.AddNewlyCreatedDBObject(circle, true);  // Again, let the transaction know about our newly added entities.
  73.                     trans.AddNewlyCreatedDBObject(text, true);
  74.                     trans.AddNewlyCreatedDBObject(ellipse, true);
  75.                 }
  76.                 trans.Commit();  // All done, no errors?  Go ahead and commit!
  77.             }
  78.             catch
  79.             {
  80.                 ed.WriteMessage(" Error Creating Employee Block ");
  81.             }
  82.             finally
  83.             {
  84.                 trans.Dispose();
  85.             }
  86.             // CreateDivision();  // Create the Employee Division dictionaries.
  87.             return newBtrId;
  88.         }

  89.         // This function creates a new BlockReference to the "EmployeeBlock" object,
  90.         // and adds it to ModelSpace.
  91.         public ObjectId CreateEmployee(string name, string division, double salary, Point3d pos)
  92.         {
  93.             Database db = HostApplicationServices.WorkingDatabase;
  94.             Transaction trans = db.TransactionManager.StartTransaction();
  95.             try
  96.             {
  97.                 BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForWrite));
  98.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  99.                 // Create the block referenceuse the return from CreateEmployeeDefinition directly!
  100.                 BlockReference br = new BlockReference(pos, CreateEmployeeDefinition());
  101.                 //         btr.AppendEntity(br);  // Add the reference to ModelSpace
  102.                 //         trans.AddNewlyCreatedDBObject(br, true);  // Let the transaction know about it
  103.                 AttributeReference attRef = new AttributeReference();
  104.                 // Iterate the employee block and find the attribute definition
  105.                 BlockTableRecord empBtr = (BlockTableRecord)trans.GetObject(bt[" EmployeeBlock "], OpenMode.ForRead);
  106.                 foreach (ObjectId id in empBtr)
  107.                 {
  108.                     Entity ent = (Entity)trans.GetObject(id, OpenMode.ForRead, false);
  109.                     // Use it to open the current object!  
  110.                     if (ent is AttributeDefinition)   // We use .NET's RTTI to establish type.
  111.                     {
  112.                         // Set the properties from the attribute definition on our attribute reference
  113.                         AttributeDefinition attDef = ((AttributeDefinition)(ent));
  114.                         attRef.SetPropertiesFrom(attDef);
  115.                         attRef.Position = new Point3d(attDef.Position.X + br.Position.X, attDef.Position.Y + br.Position.Y, attDef.Position.Z + br.Position.Z);
  116.                         attRef.Height = attDef.Height;
  117.                         attRef.Rotation = attDef.Rotation;
  118.                         attRef.Tag = attDef.Tag;
  119.                         attRef.TextString = name;
  120.                     }
  121.                 }
  122.                 // Add the reference to ModelSpace
  123.                 btr.AppendEntity(br);
  124.                 // Add the attribute reference to the block reference
  125.                 br.AttributeCollection.AppendAttribute(attRef);
  126.                 // let the transaction know
  127.                 trans.AddNewlyCreatedDBObject(attRef, true);
  128.                 trans.AddNewlyCreatedDBObject(br, true);
  129.                 // Create the custom per-employee data
  130.                 Xrecord xRec = new Xrecord();
  131.                 // We want to add 'Name', 'Salary' and 'Division' information.  Here is how:
  132.                 xRec.Data = new ResultBuffer(
  133.                    new TypedValue((int)DxfCode.Text, name),
  134.                    new TypedValue((int)DxfCode.Real, salary),
  135.                    new TypedValue((int)DxfCode.Text, division));
  136.                 // Next, we need to add this data to the 'Extension Dictionary' of the employee.
  137.                 br.CreateExtensionDictionary();
  138.                 DBDictionary brExtDict = (DBDictionary)trans.GetObject(br.ExtensionDictionary, OpenMode.ForWrite, false);
  139.                 brExtDict.SetAt(" EmployeeData ", xRec);  // Set our XRecord in the dictionary at 'EmployeeData'.
  140.                 trans.AddNewlyCreatedDBObject(xRec, true);
  141.                 trans.Commit();
  142.                 return br.ObjectId;
  143.             }
  144.             finally
  145.             {
  146.                 trans.Dispose();
  147.             }
  148.         }
  149.         // This function returns the objectId for the "EmployeeLayer", creating it if necessary.
  150.         public ObjectId CreateLayer()
  151.         {
  152.             ObjectId layerId;
  153.             Database db = HostApplicationServices.WorkingDatabase;
  154.             Transaction trans = db.TransactionManager.StartTransaction();
  155.             // Get the layer table first
  156.             LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);
  157.             // Check if EmployeeLayer exists
  158.             if (lt.Has(" EmployeeLayer "))
  159.             {
  160.                 layerId = lt[" EmployeeLayer "];
  161.             }
  162.             else
  163.             {
  164.                 // If not, create the layer here.
  165.                 LayerTableRecord ltr = new LayerTableRecord();
  166.                 ltr.Name = " EmployeeLayer ";  //  Set the layer name
  167.                 ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, 2);
  168.                 layerId = lt.Add(ltr);
  169.                 trans.AddNewlyCreatedDBObject(ltr, true);
  170.             }
  171.             trans.Commit();
  172.             trans.Dispose();
  173.             return layerId;
  174.         }
  175.         public ObjectId CreateDivision(string division, string manager)
  176.         {
  177.             Database db = HostApplicationServices.WorkingDatabase;
  178.             Transaction trans = db.TransactionManager.StartTransaction();
  179.             try
  180.             {
  181.                 // First, get the NOD
  182.                 DBDictionary NOD = (DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForWrite);
  183.                 // Define a corporate level dictionary
  184.                 DBDictionary acmeDict;
  185.                 try
  186.                 {
  187.                     // Just throw if it doesn't existdo nothing else
  188.                     acmeDict = (DBDictionary)trans.GetObject(NOD.GetAt(" ACME_DIVISION "), OpenMode.ForRead);
  189.                 }
  190.                 catch
  191.                 {
  192.                     // Doesn't exist, so create one, and set it in the NOD?
  193.                     acmeDict = new DBDictionary();
  194.                     NOD.SetAt(" ACME_DIVISION ", acmeDict);
  195.                     trans.AddNewlyCreatedDBObject(acmeDict, true);
  196.                 }
  197.                 // Now get the division we want from acmeDict
  198.                 DBDictionary divDict;
  199.                 try
  200.                 {
  201.                     divDict = (DBDictionary)trans.GetObject(acmeDict.GetAt(division), OpenMode.ForWrite);
  202.                 }
  203.                 catch
  204.                 {
  205.                     divDict = new DBDictionary();
  206.                     // Division doesn't exist, create one
  207.                     acmeDict.UpgradeOpen();
  208.                     acmeDict.SetAt(division, divDict);
  209.                     trans.AddNewlyCreatedDBObject(divDict, true);
  210.                 }
  211.                 // Now get the manager info from the division
  212.                 // We need to add the name of the division supervisor.  We'll do this with another XRecord.
  213.                 Xrecord mgrXRec;
  214.                 try
  215.                 {
  216.                     mgrXRec = (Xrecord)trans.GetObject(divDict.GetAt(" Department Manager "), OpenMode.ForWrite);
  217.                 }
  218.                 catch
  219.                 {
  220.                     mgrXRec = new Xrecord();
  221.                     mgrXRec.Data = new ResultBuffer(new TypedValue((int)DxfCode.Text, manager));
  222.                     divDict.SetAt(" Department Manager ", mgrXRec);
  223.                     trans.AddNewlyCreatedDBObject(mgrXRec, true);
  224.                 }
  225.                 trans.Commit();
  226.                 // Return the department manager XRecord
  227.                 return mgrXRec.ObjectId;
  228.             }
  229.             finally
  230.             {
  231.                 trans.Dispose();
  232.             }
  233.         }
  234.         [CommandMethod(" EMPLOYEECOUNT ")]
  235.         public void EmployeeCount()
  236.         {
  237.             Database db = HostApplicationServices.WorkingDatabase;
  238.             Transaction trans = db.TransactionManager.StartTransaction();   // Start the transaction.
  239.             int nEmployeeCount = 0;
  240.             try
  241.             {
  242.                 // First, get at the BlockTable, and the ModelSpace BlockTableRecord
  243.                 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
  244.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead);
  245.                 // Now, we need to be able to print to the commandline.  Here is an object which will help us:
  246.                 Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  247.                 // Now, here is the fun part.  This is where we iterate through ModelSpace:
  248.                 foreach (ObjectId id in btr)
  249.                 {
  250.                     Entity ent = (Entity)trans.GetObject(id, OpenMode.ForRead, false);   // Use it to open the current object!
  251.                     if (ent.GetType() == typeof(BlockReference))  // We use .NET's RTTI to establish type.
  252.                     {
  253.                         nEmployeeCount += 1;
  254.                     }
  255.                 }
  256.                 ed.WriteMessage(" Employees Found:  " + nEmployeeCount.ToString());
  257.                 trans.Commit();
  258.             }
  259.             finally
  260.             {
  261.                 trans.Dispose();
  262.             }
  263.         }
  264.         // We want a command which will go through and list all the relevant employee data.
  265.         public static void ListEmployee(ObjectId employeeId, ref   string[] saEmployeeList)
  266.         {
  267.             int nEmployeeDataCount = 0;
  268.             Database db = HostApplicationServices.WorkingDatabase;
  269.             Transaction trans = db.TransactionManager.StartTransaction();  // Start the transaction
  270.             try
  271.             {
  272.                 Entity ent = (Entity)trans.GetObject(employeeId, OpenMode.ForRead, false);  // Use it to open the current object!
  273.                 if (ent.GetType() == typeof(BlockReference))  // We use .NET's RTTI to establish type.
  274.                 {
  275.                     // Not all BlockReferences will have our employee data, so we must make sure we can handle failure
  276.                     bool bHasOurDict = true;
  277.                     Xrecord EmployeeXRec = null;
  278.                     try
  279.                     {
  280.                         BlockReference br = (BlockReference)ent;
  281.                         DBDictionary extDict = (DBDictionary)trans.GetObject(br.ExtensionDictionary, OpenMode.ForRead, false);
  282.                         EmployeeXRec = (Xrecord)trans.GetObject(extDict.GetAt(" EmployeeData "), OpenMode.ForRead, false);
  283.                     }
  284.                     catch
  285.                     {
  286.                         bHasOurDict = false;  // Something bad happenedour dictionary and/or XRecord is not accessible
  287.                     }
  288.                     if (bHasOurDict)  // If obtaining the Extension Dictionary, and our XRecord is successful
  289.                     {
  290.                         //  allocate memory for the list
  291.                         saEmployeeList = new String[4];
  292.                         TypedValue resBuf = EmployeeXRec.Data.AsArray()[0];
  293.                         saEmployeeList.SetValue(string.Format(" {0}\n ", resBuf.Value), nEmployeeDataCount);
  294.                         nEmployeeDataCount += 1;
  295.                         resBuf = EmployeeXRec.Data.AsArray()[1];
  296.                         saEmployeeList.SetValue(string.Format(" {0}\n ", resBuf.Value), nEmployeeDataCount);
  297.                         nEmployeeDataCount += 1;
  298.                         resBuf = EmployeeXRec.Data.AsArray()[2];
  299.                         string str = (string)resBuf.Value;
  300.                         saEmployeeList.SetValue(string.Format(" {0}\n ", resBuf.Value), nEmployeeDataCount);
  301.                         nEmployeeDataCount += 1;
  302.                         DBDictionary NOD = (DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead, false);
  303.                         DBDictionary acmeDict = (DBDictionary)trans.GetObject(NOD.GetAt(" ACME_DIVISION "), OpenMode.ForRead);
  304.                         DBDictionary salesDict = (DBDictionary)trans.GetObject(acmeDict.GetAt((string)EmployeeXRec.Data.AsArray()[2].Value), OpenMode.ForRead);
  305.                         Xrecord salesXRec = (Xrecord)trans.GetObject(salesDict.GetAt(" Department Manager "), OpenMode.ForRead);
  306.                         resBuf = salesXRec.Data.AsArray()[0];
  307.                         saEmployeeList.SetValue(string.Format(" {0}\n ", resBuf.Value), nEmployeeDataCount);
  308.                         nEmployeeDataCount += 1;
  309.                     }
  310.                 }
  311.                 trans.Commit();
  312.             }
  313.             finally
  314.             {
  315.                 trans.Dispose();
  316.             }
  317.         }

  318.         [CommandMethod(" PRINTOUTEMPLOYEE ")]
  319.         public static void PrintoutEmployee()
  320.         {
  321.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  322.             Database db = HostApplicationServices.WorkingDatabase;
  323.             Transaction trans = db.TransactionManager.StartTransaction();
  324.             try
  325.             {
  326.                 BlockTable bt = (BlockTable)trans.GetObject(HostApplicationServices.WorkingDatabase.BlockTableId, OpenMode.ForRead);
  327.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead);
  328.                 foreach (ObjectId id in btr)
  329.                 {
  330.                     Entity ent = (Entity)trans.GetObject(id, OpenMode.ForRead, false);
  331.                     if (ent is BlockReference)
  332.                     {
  333.                         string[] saEmployeeList = null;
  334.                         ListEmployee(id, ref  saEmployeeList);
  335.                         if ((saEmployeeList.Length == 4))
  336.                         {
  337.                             ed.WriteMessage(" Employee Name: {0} ", saEmployeeList[0]);
  338.                             ed.WriteMessage(" Employee Salary: {0} ", saEmployeeList[1]);
  339.                             ed.WriteMessage(" Employee Division: {0} ", saEmployeeList[2]);
  340.                             ed.WriteMessage(" Division Manager: {0} ", saEmployeeList[3]);
  341.                         }
  342.                     }
  343.                 }
  344.             }
  345.             finally
  346.             {
  347.             }
  348.         }
  349.         [CommandMethod(" CREATE ")]
  350.         public void CreateEmployee()
  351.         {
  352.             Database db = HostApplicationServices.WorkingDatabase;
  353.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  354.             Transaction trans = db.TransactionManager.StartTransaction();
  355.             try
  356.             {
  357.                 string empName = " Earnest Shackleton ";
  358.                 string divName = " Sales ";
  359.                 double salary = new double();
  360.                 salary = 10000;
  361.                 Point3d position = new Point3d(0, 0, 0);
  362.                 bool gotPosition = new bool();
  363.                 // boolean to check if a point has been entered
  364.                 gotPosition = false;
  365.                 // Prompts for each employee detail
  366.                 PromptStringOptions prName = new PromptStringOptions(" Enter Employee Name < " + empName + " > ");
  367.                 PromptStringOptions prDiv = new PromptStringOptions(" Enter Employee Division < " + divName + " > ");
  368.                 PromptDoubleOptions prSal = new PromptDoubleOptions(" Enter Employee Salary < " + salary + " > ");
  369.                 PromptPointOptions prPos = new PromptPointOptions(" Enter Employee Position or ");
  370.                 // Add keywords when prompting for position
  371.                 prPos.Keywords.Add(" Name ");
  372.                 prPos.Keywords.Add(" Division ");
  373.                 prPos.Keywords.Add(" Salary ");
  374.                 // Set conditions for prompting
  375.                 prPos.AllowNone = false;  // Do not allow null values
  376.                 // prompt results
  377.                 PromptResult prNameRes;
  378.                 PromptResult prDivRes;
  379.                 PromptDoubleResult prSalRes;
  380.                 PromptPointResult prPosRes;
  381.                 // Loop to get employee details. Exit the loop when positon is entered
  382.                 while (!gotPosition)
  383.                 {
  384.                     // Prompt for position
  385.                     prPosRes = ed.GetPoint(prPos);
  386.                     // Got a point
  387.                     if (prPosRes.Status == PromptStatus.OK)
  388.                     {
  389.                         gotPosition = true;
  390.                         position = prPosRes.Value;
  391.                     }
  392.                     else if (prPosRes.Status == PromptStatus.Keyword)  // Got a keyword
  393.                     {
  394.                         // Name keyword entered
  395.                         if (prPosRes.StringResult == " Name ")
  396.                         {
  397.                             // Get employee name
  398.                             prName.AllowSpaces = true;
  399.                             prNameRes = ed.GetString(prName);
  400.                             if (prNameRes.Status != PromptStatus.OK)
  401.                             {
  402.                                 return;
  403.                             }
  404.                             // we got the employee name successfully
  405.                             if (prNameRes.StringResult != "")
  406.                             {
  407.                                 empName = prNameRes.StringResult;
  408.                             }
  409.                         }
  410.                         // Division keyword entered
  411.                         if (prPosRes.StringResult == " Division ")
  412.                         {
  413.                             // Get employee division
  414.                             prDiv.AllowSpaces = true;
  415.                             prDivRes = ed.GetString(prDiv);
  416.                             if (prDivRes.Status != PromptStatus.OK)
  417.                             {
  418.                                 return;
  419.                             }
  420.                             if (prDivRes.StringResult != "")
  421.                             {
  422.                                 divName = prDivRes.StringResult;
  423.                             }
  424.                         }    //  Division
  425.                         //  Salary keyword entered
  426.                         if (prPosRes.StringResult == " Salary ")
  427.                         {
  428.                             // Get employee salary
  429.                             prSal.AllowNegative = false;
  430.                             prSal.AllowNone = true;
  431.                             prSal.AllowZero = false;
  432.                             prSalRes = ed.GetDouble(prSal);
  433.                             if (prSalRes.Status != PromptStatus.OK & prSalRes.Status != PromptStatus.None)
  434.                             {
  435.                                 return;
  436.                             }
  437.                             if (prSalRes.Status != PromptStatus.None)
  438.                             {
  439.                                 salary = prSalRes.Value;
  440.                             }
  441.                         }    //  Salary
  442.                     }
  443.                     else
  444.                     {
  445.                         //  Error in getting a point
  446.                         ed.WriteMessage(" ***Error in getting a point, exiting!!*** " + " \r\n ");
  447.                         return;
  448.                     }     //  If got a point
  449.                 }
  450.                 // Create the Employee
  451.                 CreateEmployee(empName, divName, salary, position);
  452.                 string manager = "";
  453.                 // Now create the division
  454.                 // Pass an empty string for manager to check if it already exists
  455.                 Xrecord depMgrXRec;
  456.                 ObjectId xRecId;
  457.                 xRecId = CreateDivision(divName, manager);
  458.                 // Open the department manager XRecord
  459.                 depMgrXRec = (Xrecord)trans.GetObject(xRecId, OpenMode.ForRead);
  460.                 TypedValue[] typedVal = depMgrXRec.Data.AsArray();
  461.                 foreach (TypedValue val in typedVal)
  462.                 {
  463.                     string str;
  464.                     str = (string)val.Value;
  465.                     if (str == "")
  466.                     {
  467.                         // Manager was not set, now set it
  468.                         //  Prompt for  manager name first
  469.                         ed.WriteMessage(" \r\n ");
  470.                         PromptStringOptions prManagerName = new PromptStringOptions(" No manager set for the division! Enter Manager Name ");
  471.                         prManagerName.AllowSpaces = true;
  472.                         PromptResult prManagerNameRes = ed.GetString(prManagerName);
  473.                         if (prManagerNameRes.Status != PromptStatus.OK)
  474.                         {
  475.                             return;
  476.                         }
  477.                         // Set a manager name
  478.                         depMgrXRec.Data = new ResultBuffer(new TypedValue((int)DxfCode.Text, prManagerNameRes.StringResult));
  479.                     }
  480.                 }
  481.                 trans.Commit();
  482.             }
  483.             finally
  484.             {
  485.                 trans.Dispose();
  486.             }
  487.         }
  488.         [CommandMethod(" LISTEMPLOYEES ")]
  489.         public void List()
  490.         {
  491.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  492.             try
  493.             {
  494.                 PromptSelectionOptions Opts = new PromptSelectionOptions();
  495.                 TypedValue[] filList = new TypedValue[1];
  496.                 // Build a filter list so that only block references are selected
  497.                 filList[0] = new TypedValue((int)DxfCode.Start, " INSERT ");
  498.                 SelectionFilter filter = new SelectionFilter(filList);
  499.                 PromptSelectionResult res = ed.GetSelection(Opts, filter);
  500.                 // Do nothing if selection is unsuccessful
  501.                 if (res.Status != PromptStatus.OK)
  502.                     return;
  503.                 Autodesk.AutoCAD.EditorInput.SelectionSet SS = res.Value;
  504.                 ObjectId[] idArray;
  505.                 idArray = SS.GetObjectIds();
  506.                 string[] saEmployeeList = new string[4];
  507.                 // collect all employee details in saEmployeeList array
  508.                 foreach (ObjectId employeeId in idArray)
  509.                 {
  510.                     ListEmployee(employeeId, ref  saEmployeeList);
  511.                     // Print employee details to the command line
  512.                     foreach (string employeeDetail in saEmployeeList)
  513.                     {
  514.                         ed.WriteMessage(employeeDetail);
  515.                     }
  516.                     // separator
  517.                     ed.WriteMessage(" ---------------------- " + " \r\n ");
  518.                 }
  519.             }
  520.             finally
  521.             {
  522.             }
  523.         }
  524.         [CommandMethod(" Test ")]
  525.         public void Test()
  526.         {
  527.             CreateDivision(" Sales ", " Randolph P. Brokwell ");
  528.         }
  529.     }
  530. }

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 3913个

财富等级: 富可敌国

发表于 2014-7-18 21:50:59 | 显示全部楼层
本帖最后由 dnbcgrass 于 2014-7-18 21:52 编辑

谢谢分享!
[CommandMethod(" EMPLOYEECOUNT ")]
是不是应该改为
[CommandMethod("EMPLOYEECOUNT")]
类似的是否要改?

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-3-20 11:20:17 | 显示全部楼层
额,全是英文注释,但是非常感谢了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 22:33 , Processed in 0.182589 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表