<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic [.net api]  &amp;quot; LinearArray&amp;quot; and &amp;quot;RadialArray&amp;quot;  method in .NET Forum</title>
    <link>https://forums.autodesk.com/t5/net-forum/net-api-quot-lineararray-quot-and-quot-radialarray-quot-method/m-p/9778491#M18372</link>
    <description>&lt;P&gt;Is there an "LinearArray" and "RadialArray"&amp;nbsp; method for AS? Like &lt;SPAN&gt;Revit API:&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="general"&gt;static LinearArray Create(Document aDoc, View dBView, ElementId id, int count, XYZ translationToAnchorMember, ArrayAnchorMember anchorMember);
static RadialArray Create(Document aDoc, View dBView, ElementId id, int count, Line axis, double angle, ArrayAnchorMember anchorMember);&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 01 Oct 2020 10:45:04 GMT</pubDate>
    <dc:creator>sapch</dc:creator>
    <dc:date>2020-10-01T10:45:04Z</dc:date>
    <item>
      <title>[.net api]  " LinearArray" and "RadialArray"  method</title>
      <link>https://forums.autodesk.com/t5/net-forum/net-api-quot-lineararray-quot-and-quot-radialarray-quot-method/m-p/9778491#M18372</link>
      <description>&lt;P&gt;Is there an "LinearArray" and "RadialArray"&amp;nbsp; method for AS? Like &lt;SPAN&gt;Revit API:&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="general"&gt;static LinearArray Create(Document aDoc, View dBView, ElementId id, int count, XYZ translationToAnchorMember, ArrayAnchorMember anchorMember);
static RadialArray Create(Document aDoc, View dBView, ElementId id, int count, Line axis, double angle, ArrayAnchorMember anchorMember);&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 01 Oct 2020 10:45:04 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/net-api-quot-lineararray-quot-and-quot-radialarray-quot-method/m-p/9778491#M18372</guid>
      <dc:creator>sapch</dc:creator>
      <dc:date>2020-10-01T10:45:04Z</dc:date>
    </item>
    <item>
      <title>Re: [.net api]  " LinearArray" and "RadialArray"  method</title>
      <link>https://forums.autodesk.com/t5/net-forum/net-api-quot-lineararray-quot-and-quot-radialarray-quot-method/m-p/9784479#M18373</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/5076487"&gt;@sapch&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;...&amp;nbsp; method for &lt;EM&gt;&lt;FONT color="#FF0000"&gt;&lt;STRONG&gt;AS&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/EM&gt;? ...&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;What is "AS", are you posting in wrong forum (this is for .NET API for plain AutoCAD, but questions on AutoCAD verticals may appear from time to time)?&lt;/P&gt;</description>
      <pubDate>Mon, 05 Oct 2020 13:56:16 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/net-api-quot-lineararray-quot-and-quot-radialarray-quot-method/m-p/9784479#M18373</guid>
      <dc:creator>norman.yuan</dc:creator>
      <dc:date>2020-10-05T13:56:16Z</dc:date>
    </item>
    <item>
      <title>Re: [.net api]  " LinearArray" and "RadialArray"  method</title>
      <link>https://forums.autodesk.com/t5/net-forum/net-api-quot-lineararray-quot-and-quot-radialarray-quot-method/m-p/9784528#M18374</link>
      <description>&lt;P&gt;Try this sample:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="csharp"&gt;using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
 
// This line is not mandatory, but improves loading performances
[assembly: CommandClass(typeof(ArrayClassic.MyCommands))]
 
namespace ArrayClassic
{
  public class MyCommands
  {
    /////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Использование: Создание Прямоугольного Ассоциативного Массива
    /////////////////////////////////////////////////////////////////////////////////////////////////////////
    [CommandMethod("CreateAssocArrayRect")]
    public void CreateAssocArrayRect()
    {
      Document doc = Application.DocumentManager.MdiActiveDocument;
      Database db = doc.Database;
      Editor ed = doc.Editor;
      int nRows = 5;
      int nColumns = 5;
 
      double dRowOffset = 1;
      double dColumnOffset = 1;
 
 
      using (Transaction Tx = db.TransactionManager.StartTransaction())
      {
 
        // Создаем исходный примитив - здесь простой круг (Circle)
        Circle circle = new Circle(new Point3d(2, 2, 0), new Vector3d(0, 0, 1), 0.5);
        circle.ColorIndex = 1;
        ObjectIdCollection sourceEntities = new ObjectIdCollection();
 
        // Исходный примитив должен быть в базе
        AcHelper.PostToDatabase(circle);
 
        sourceEntities.Add(circle.ObjectId);
 
        // Базовая точка массива в  VertexRef
        VertexRef basePoint = new VertexRef(new Point3d(2, 2, 0));
 
        // Параметры прямоугольного массива
        double columnSpacing = dRowOffset;
        double rowSpacing = dColumnOffset;
        double levelSpacing = dColumnOffset;
        int columnCount = 5;
        int rowCount = 5;
        int levelCount = 1;
        double rowElevation = 0;
        double axesAngle = 0;
 
        Matrix3d curUCSMatrix = ed.CurrentUserCoordinateSystem;
        CoordinateSystem3d curUCS = curUCSMatrix.CoordinateSystem3d;
        Vector2d acVec2dAng = new Vector2d(curUCS.Xaxis.X, curUCS.Xaxis.Y);
        axesAngle += acVec2dAng.Angle;
 
        AssocArrayRectangularParameters parameters = new AssocArrayRectangularParameters(columnSpacing,
            rowSpacing,
            levelSpacing,
            columnCount,
            rowCount,
            levelCount,
            rowElevation,
            axesAngle);
 
        parameters.AxesAngle = acVec2dAng.Angle;
        parameters.XAxisDirection = curUCS.Xaxis;
        parameters.YAxisDirection = curUCS.Yaxis;
 
        // Как показано ниже, параметры могут быть связаны с выражениями, включающими переменные
        AcHelper.AddOrModifVariable("RowCount", rowCount.ToString());
        AcHelper.AddOrModifVariable("RowSpacing", rowSpacing.ToString());
 
        parameters.SetRowCount(rowCount, "RowCount", "");
        parameters.SetRowSpacing(rowSpacing, "RowSpacing", "");
 
        // Создаем массив. Возвращается AssocArray помещенный в базу
        AssocArray array = Autodesk.AutoCAD.DatabaseServices.AssocArray.CreateArray(sourceEntities,
            basePoint,
            parameters);
 
        // Если нужно переместить массив, то имея его свойство EntityId
        // можно применить трансформацию как показано ниже
        Entity arrayEnt = Tx.GetObject(array.EntityId, OpenMode.ForWrite) as Entity;
 
        arrayEnt.TransformBy(Matrix3d.Displacement(new Vector3d(5, 5, 5)));
 
        // Заставляем обновится все связи
        AssocManager.EvaluateTopLevelNetwork(db, null, 0);
 
        // Так как массив уже создан, то исходный круг можно удалить.
        // Он уже содержится в массиве (фактически в анонимном блоке)
        circle.Erase(true);
 
        Tx.Commit();
      }
    }
 
  }
 
  public class AcHelper
  {
    /////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Helper method: Добавление примитива в пространство модели указанной базы данных
    //
    /////////////////////////////////////////////////////////////////////////////////////////////////////////
    public static ObjectId PostToDatabase(Database db, Entity entity)
    {
      using (Transaction Tx = db.TransactionManager.StartTransaction())
      {
        BlockTable bt = Tx.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
 
        BlockTableRecord model = Tx.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
 
        ObjectId newId = model.AppendEntity(entity);
 
        Tx.AddNewlyCreatedDBObject(entity, true);
 
        Tx.Commit();
 
        return newId;
      }
    }
    /////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Helper method: Добавление примитива в пространство модели текущей базы данных
    //
    /////////////////////////////////////////////////////////////////////////////////////////////////////////
    public static ObjectId PostToDatabase(Entity entity)
    {
      Database db = Application.DocumentManager.MdiActiveDocument.Database;
      return PostToDatabase(db, entity);
    }
 
    /////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Добавление новой переменной в ассоциативную сеть или модификация существующей
    //
    /////////////////////////////////////////////////////////////////////////////////////////////////////////
    public static ObjectId AddOrModifVariable(string varName, string varExpression)
    {
      Document doc = Application.DocumentManager.MdiActiveDocument;
      Database db = doc.Database;
 
      ObjectId varid = ObjectId.Null;
 
      using (Transaction Tx = db.TransactionManager.StartTransaction())
      {
        ObjectId networkId = AssocNetwork.GetInstanceFromObject(db.CurrentSpaceId, true, true, "ACAD_ASSOCNETWORK");
        AssocNetwork network = Tx.GetObject(networkId, OpenMode.ForWrite) as AssocNetwork;
 
        ObjectIdCollection actionIds = network.GetActions;
 
        for (int i = 0; i &amp;lt; actionIds.Count; ++i)
        {
          try
          {
            AssocVariable var1 = Tx.GetObject(actionIds[i], OpenMode.ForWrite) as AssocVariable;
 
            if (var1 != null)
            {
              if (var1.Name == varName)
              {
                String errMsg = "";
                var1.SetExpression(varExpression, "", true, true, ref errMsg, false);
 
                ResultBuffer rb = new ResultBuffer();
                errMsg = var1.EvaluateExpression(ref rb);
                var1.Value = rb;
 
                Tx.Commit();
 
                return var1.ObjectId;
              }
            }
          }
          catch
          {
 
          }
        }
 
        AssocVariable var = new AssocVariable();
        varid = network.Database.AddDBObject(var);
        network.AddAction(var.ObjectId, true);
        Tx.AddNewlyCreatedDBObject(var, true);
        Tx.Commit();
      }
 
      using (Transaction Tx = db.TransactionManager.StartTransaction())
      {
        AssocVariable var = (AssocVariable)Tx.GetObject(varid, OpenMode.ForWrite);
        var.SetName(varName, true);
        var.Value = new ResultBuffer(new TypedValue(1001, 5));
        String errMsg = "";
        var.SetExpression(varExpression, "", true, true, ref errMsg, false);
        ResultBuffer rb = new ResultBuffer();
        errMsg = var.EvaluateExpression(ref rb);
        var.Value = rb;
        Tx.Commit();
      }
 
      return varid;
    }
 
  }
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IFRAME src="https://screencast.autodesk.com/Embed/Timeline/424d100a-b313-43e2-9d0c-19c6f569507b" width="696" height="685" frameborder="0" allowfullscreen="allowfullscreen" webkitallowfullscreen="webkitallowfullscreen"&gt;&lt;/IFRAME&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 05 Oct 2020 14:21:23 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/net-api-quot-lineararray-quot-and-quot-radialarray-quot-method/m-p/9784528#M18374</guid>
      <dc:creator>Alexander.Rivilis</dc:creator>
      <dc:date>2020-10-05T14:21:23Z</dc:date>
    </item>
  </channel>
</rss>

