Welcome to the Onshape forum! Ask questions and join in the discussions about everything Onshape.

First time visiting? Here are some places to start:
  1. Looking for a certain topic? Check out the categories filter or use Search (upper right).
  2. Need support? Ask a question to our Community Support category.
  3. Please submit support tickets for bugs but you can request improvements in the Product Feedback category.
  4. Be respectful, on topic and if you see a problem, Flag it.

If you would like to contact our Community Manager personally, feel free to send a private message or an email.

Can points be added to an existing sketch with feature script?

ron_morelandron_moreland Member Posts: 79 ✭✭
edited January 2018 in Community Support
I want to add functionally derived points to a sketch to use as anchors. Can I do this with feature script?

In a way I'm asking to create a custom constraint.

Best Answer


  • ron_morelandron_moreland Member Posts: 79 ✭✭
    That's what I thought. Thanks
  • ron_morelandron_moreland Member Posts: 79 ✭✭
    BTW, Can you now create arbitrary points in 3 space, or do you need to create multiple sketches?
  • konstantin_shiriazdanovkonstantin_shiriazdanov Member Posts: 1,221 ✭✭✭✭✭
    opPoint() creates a point in 3d, or you can create a sketch with a number of points by skPoint(), but all of them will be in one plane.
  • ron_morelandron_moreland Member Posts: 79 ✭✭
    edited January 2018
    I am having trouble with this code:
       var fPoints is array = [];
            var L = 10.0;
            var CL = L;
            var Rule = 1.0 ;
            for (var i = 0; i < definition.numberOfF; i += 1)
                fPoints = append(fPoints,vector(0,CL*inch));
                CL = CL/Rule;
            skPolyline(sketch1, "polyline1", {
                        "points" : fPoints
    I'm getting "Precondition of skPolyline failed (is2dPointVector(value.points))" in the error window.
    Can you see the 
    problem? I suspect I need to declare a vector array, but I don't know how to do that.
  • konstantin_shiriazdanovkonstantin_shiriazdanov Member Posts: 1,221 ✭✭✭✭✭
    you should use following syntax to generate array of 2d point coordinates
    point = vector(0, CL) * inch;
    fPoints = append(fPoints, point);
    but "point" should depend on loop index "i", or you would obtain array of one the same point "vector(0, CL) * inch"
    and one more thing - to add geometry to 2d sketch you need to initialize the sketch first by means of mySk = newSketch() or mySk = newSketchOnPlane() functions and after the geometry added sketch should be solved by skSolve(mySk)

  • ron_morelandron_moreland Member Posts: 79 ✭✭
    Thanks, I just posted this same question as a new post. I'll set it as asked/answered.
  • ron_morelandron_moreland Member Posts: 79 ✭✭
    That worked! Why did the point have to be created outside the append?
  • ilya_baranilya_baran Onshape Employees, Developers, HDM Posts: 1,160
    It didn't -- the key change is that the multiplication by inch is outside the vector -- otherwise you get a vector with one component a number and one component a length.
    Ilya Baran \ VP, Architecture and FeatureScript \ Onshape Inc
  • ron_morelandron_moreland Member Posts: 79 ✭✭
    OH! Number != Length... got it
  • ron_morelandron_moreland Member Posts: 79 ✭✭
    I just posted another question that I stuck on. Do you have time to look at it?
Sign In or Register to comment.