qq1254582201 发表于 2022-5-23 17:16:09

【转载】C# 沿路径阵列实例


            public void CreateAssocArrayPath()
            {
                Database db =
                  Application.DocumentManager.MdiActiveDocument.Database;
                Transaction tr =
                  db.TransactionManager.StartTransaction();
                using (tr)
                {
                  BlockTable bt =
                      (BlockTable)tr.GetObject(
                        db.BlockTableId, OpenMode.ForRead
                      );
                  BlockTableRecord btr =
                      (BlockTableRecord)tr.GetObject(
                        bt,
                        OpenMode.ForWrite
                      );
                  // Add profile entities: a Circle and a Line
                  Circle cir =
                      new Circle(
                        new Point3d(-10, 0, 0),
                        new Vector3d(0, 0, 1),
                        1.0
                      );
                  cir.ColorIndex = 3; // Green
                  btr.AppendEntity(cir);
                  tr.AddNewlyCreatedDBObject(cir, true);
                  Line ln =
                      new Line(
                        new Point3d(-11, -1, 0),
                        new Point3d(-9, 1, 0)
                      );
                  ln.ColorIndex = 3; // Green
                  btr.AppendEntity(ln);
                  tr.AddNewlyCreatedDBObject(ln, true);
                  // Add path entity: a Spline, in this case
                  double fitTol = 0.0;
                  int order = 4;
                  // An array of doubles to define the points
                  // in our spline
                  double[] ptAr =
                      new double[]{
            -6.8447, 0.9430,0,
            -5.1409, -3.0562, 0,
            -2.4095, 2.1049,0,
            3.4590, -3.9479, 0,
            7.1370, 6.3472,0
                      };
                  // We'll add the points to a collection
                  Point3dCollection pts = new Point3dCollection();
                  for (int i = 0, j = 0; i < ptAr.Length / 3; i++)
                  {
                        pts.Add(new Point3d(ptAr, ptAr, ptAr));
                  }
                  // Create the spline path and add it to the database
                  Spline sp = new Spline(pts, order, fitTol);
                  btr.AppendEntity(sp);
                  tr.AddNewlyCreatedDBObject(sp, true);
                  // Offset the Circle, Line and Spline by a fixed amount
                  Matrix3d offset =
                      Matrix3d.Displacement(new Vector3d(60, 10, 0));
                  cir.TransformBy(offset);
                  ln.TransformBy(offset);
                  sp.TransformBy(offset);
                  ObjectIdCollection srcEnts = new ObjectIdCollection();
                  srcEnts.Add(cir.ObjectId);
                  srcEnts.Add(ln.ObjectId);
                  // Take the base point as the center of our Circle
                  VertexRef basePt = new VertexRef(cir.Center);
                  // Set some variables to define parameters for our path
                  int itemCount = 6;
                  double itemSpacing =
                      sp.GetDistanceAtParameter(sp.EndParam) / itemCount;
                  double rowSpacing = 0.0;
                  double levelSpacing = 0.0;
                  int rowCount = 0;
                  int levelCount = 0;
                  double rowElevation = 0.0;
                  // Create the parameters for our associative path array
                  //为关联路径数组创建参数
                  AssocArrayPathParameters pars =
                      new AssocArrayPathParameters(
                        itemSpacing,
                        rowSpacing,
                        levelSpacing,
                        itemCount,
                        rowCount,
                        levelCount,
                        rowElevation
                      );
                  pars.Method =
                      AssocArrayPathParameters.MethodType.Measure;
                  pars.Path = new EdgeRef(sp);
                  // Create the associative array itself
                  AssocArray array =
                      AssocArray.CreateArray(
                        srcEnts,
                        basePt,
                        pars
                      );
                  // Evaluate the array
                  AssocManager.EvaluateTopLevelNetwork(db, null, 0);
                  tr.Commit();
                }
            }

页: [1]
查看完整版本: 【转载】C# 沿路径阵列实例