Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
c# addCurve
#1
the addCurve Method in c# only takes a Mat type which is not a list but only a single position fro what i can see. in c# how would you pass it a list of points?
#2
This code should show an example to convert an array of doubles to a Mat file that you can use for RoboDK.AddCurve()

    // Create the list of points as an array of array of doubles
    // The size is 4 points set as XYZijk. XYZ is the position and ijk is the tool Z axis (ijk is optional)
    const int np = 4;
    double[,] points_xyzijk = new double[np, 6] {{0,0,0, 0,0,1}, { 500, 0, 0, 0, 0, 1 }, { 500, 500, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 1 } };

    // Convert a double array of arrays to a Mat object:
    Mat points_mat = new Mat(6, np);
    for (int c=0; c<np; c++)
    {
        for (int r=0; r<6; r++)
        {
            points_mat[r,c] = points_xyzijk[c,r];
        }
    }

    // Load the mat file in RoboDK
    RoboDK.Item object_curve = RDK.AddCurve(points_mat);

    // Rename the curve object
    object_curve.setName("Imported Curve");


More information here:
https://robodk.com/doc/en/CsAPI/api/Robo...ctionType_
#3
perfect thanks that worked, its not the most intuitive way to create an object. here is the code as i edited in case its helps someone else out. i removed a loop and directly indexed the double[] for speed and clarity

Code:
public static Mat PointListToMat(Point[] pts, Vector ToolVec = null)
       {
           Vector tv = ToolVec;
           if(ToolVec == null) tv = Vector.ZAxis();

           // Create the list of points as an array of array of double
           int np = pts.Length;
   
           double[] xyzijk = new double[6];

           // Convert a double array of arrays to a Mat object:
           Mat points_mat = new Mat(6, np);

           for (int c = 0; c < np; c++)
           {
               points_mat[0, c] = pts[c].X;
               points_mat[1, c] = pts[c].Y;
               points_mat[2, c] = pts[c].Z;
               points_mat[3, c] = tv.X;
               points_mat[4, c] = tv.Y;
               points_mat[5, c] = tv.Z;
               
           }

           return points_mat;
       }
  




Users browsing this thread:
2 Guest(s)