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.

"Face Curves" in Featurescript?

S1monS1mon Member Posts: 55 PRO
In Solidworks, and countless other CAD tools it's easy to create curves on surfaces based on U-V. They're useful for creating patterns of 3D curves with similar styles, trimming surfaces, or just diagnosing the quality of the surface. Note that these are vaguely similar to the edges created by Onshape's "move boundary" when it's trimming the surface, but those are trying to move things in a offset fashion, not in a U or V direction.

This screenshot shows an arbitrary surface with a 5 x 5 pattern of curves in Solidworks. You can also do it based on position - either a selected point, or percentages. I'd like to have this basic functionality in Onshape. It seems like something which shouldn't be too hard to do with FeatureScript, but I haven't written any yet. While it would be great if someone else would just write this for me, I was hoping for some pointers on the following:
  1. Is it possible and relatively straightforward to create curves in FeatureScript?
  2. Are there any example FeatureScripts which do anything similar?


Comments

  • Evan_ReeseEvan_Reese Member Posts: 589 PRO
    I have no idea, but I'd use this! Mostly just to eval and understand my surfaces, but maybe occasionally to actually use a face curve in a model.
    Evan Reese / Principal and Industrial Designer with Fractal
    Website: fractalmade.com
    Instagram: @evan.reese.designs
  • mahirmahir Member, Developers Posts: 1,053 ✭✭✭✭✭
    Agreed. Something similar to Catia's parallel curve feature would be nice for generating construction curves.
  • S1monS1mon Member Posts: 55 PRO
    So oddly enough there's some FeatureScript documentation which references "opCreateCurvesOnFace". I can't find the documentation for that.

    The enum types here seem to correspond to the functionality that's in Solidworks perhaps because it's what the Parasolid kernel provides. Is Onshape working on the feature I'm trying to create? What is the reason for the asterix in this line: "Specifies type of curve on face. *" ?


  • Jacob_CorderJacob_Corder Member Posts: 29 PRO
    Look up sculptFace.
    This will generate splines in the U V Directions of a face. it does not however, give you the splines relative to an edge or parallel to an edge, I Actually need what you posted.  If i figure anything out, i will definitely share it.
  • S1monS1mon Member Posts: 55 PRO
    @Jacob_Corder Thanks! 

    Also thanks to @maximilian_schommer for creating sculptFace.

    I managed to sift through sculptFace and even though I don't really understand what I did, I was able to copy the bits which created the splines and leave behind all the rest. What is interesting is that it's clearly not extracting the isoparameters, but instead making approximate splines based on sampling the face (or something like that). If the U or V count is too low, the curves don't follow the surface. In any case I have more work to do, but I was able to get something to happen.




  • Jacob_CorderJacob_Corder Member Posts: 29 PRO
    @S1mon
     you are correct. the tolerance in the faces is basically from the U V grid.  I  have found that the curves can be very bad because they are created using opfitspline.

    I need this opCreateCurvesOnFace feature like last month.

    I am working on cracking it but it may be tough. maybe onshape can help. hopefully.

  • Jacob_CorderJacob_Corder Member Posts: 29 PRO
    @S1mon

    Here is what i discovered so far. 

    the feature works, however, i cannot find a way for it to use a guide on the edge to control the U V Parameters instead of using the basic underlying U V directions of the surface.

    FeatureScript 1324;
    import(path : "onshape/std/geometry.fs", version : "1324.0");

    export enum FaceCurveCreationType
    {
        annotation{"Name":"Primary Direction"}
        DIR1_ISO,
        annotation{"Name":"Secondary Direction"}
        DIR2_ISO,
         annotation{"Name":"Primary Direction equal Spaced"}
        DIR1_AUTO_SPACED_ISO,
        annotation{"Name":"Secondary Direction equal Spaced"}
        DIR2_AUTO_SPACED_ISO
    }


    annotation { "Feature Type Name" : "UV ParallelCurves" }
    export const uvParallelCurvesOnFace = defineFeature(function(context is Context, id is Id, definition is map)
        precondition
        {
            annotation { "Name" : "Curve Definition", "Item name" : "Curve Definition", "Item label template" : "#creationType" }
            definition.curveDefinition is array;
            for (var cDef in definition.curveDefinition)
            {
                annotation { "Name" : "Face", "Filter" : EntityType.FACE, "MaxNumberOfPicks" : 1 }
                cDef.face is Query;
                annotation { "Name" : "Curve Creation Type" }
                cDef.creationType is FaceCurveCreationType;
                if(cDef.creationType==FaceCurveCreationType.DIR1_AUTO_SPACED_ISO || cDef.creationType==FaceCurveCreationType.DIR2_AUTO_SPACED_ISO)
                {
                    annotation { "Name" : "Number of Curves" }
                    isInteger(cDef.nCurves, POSITIVE_COUNT_BOUNDS);                
                }
                else
                { 
                    annotation { "Name" : "parameter" }
                    isReal(cDef.param,POSITIVE_REAL_BOUNDS);
                }            
            }         
        }
        {
            
            for(var i =0;i<size(definition.curveDefinition);i+=1)
            {
                if(definition.curveDefinition[i].creationType == FaceCurveCreationType.DIR1_ISO || definition.curveDefinition[i].creationType== FaceCurveCreationType.DIR2_ISO)
                {
                    definition.curveDefinition[i].parameters = [definition.curveDefinition[i].param];               
                    definition.curveDefinition[i].names = ["curve1"];
                }
                else
                {
                    definition.curveDefinition[i].names = makeArray(definition.curveDefinition[i].nCurves, "Name");
                    for(var j =0;j<definition.curveDefinition[i].nCurves;j+=1)
                    {
                        definition.curveDefinition[i].names[j] = "curve"~i~j;
                    }
                }
            }
            try
            {
                @opCreateCurvesOnFace(context, id,definition); 
            }
           catch (error)
           {
               println(error);
           }       
        });

  • maximilian_schommermaximilian_schommer Member Posts: 32 EDU
    So one possibility to get a "parallel to edge" feature, is to sample a given edge, and extract what the UV parameters are of that edge. Then, we need to interpolate the parameters to some other UV bound in order to make the "parallel" edges (which wouldn't really be parallel, since that's not possible with nonlinear curves anyways).

    Another possibility is to use the tangent edges along the edge we want to make parallel lines for, and we move in direction perpendicular to the sampled tangent lines, and then find the UV parameters of that new curve when projected on the surface, and then iterate on that process. It would take a bit more computation since it is an iterative solution, but satisfies the idea of "parallel" a lot more.


  • ilya_baranilya_baran Onshape Employees, Developers, HDM Posts: 995
    Today's release has some useful functionality here (thanks to @elif)https://cad.onshape.com/FsDoc/library.html#opCreateCurvesOnFace-Context-Id-map
    Ilya Baran \ Director, Architecture and FeatureScript \ Onshape Inc
  • S1monS1mon Member Posts: 55 PRO
    edited August 25
    Excellent! I'll have to work on turning this into a useful user-facing featurescript.... Unless someone else at Onshape is planning to do this soon?
  • ilya_baranilya_baran Onshape Employees, Developers, HDM Posts: 995
    I'm not aware of such a project.  This is functionality we needed for some ongoing development work we're doing (you found traces of it), but when we saw the requests here, Elif decided to package it up and release it.
    Ilya Baran \ Director, Architecture and FeatureScript \ Onshape Inc
  • MBartlett21MBartlett21 Member, OS Professional, Developers Posts: 1,930 EDU
    @ilya_baran
    Is the development related to beams by any chance? >:)

    That gives me an idea to improve the length measurement on mine...
    MB - I make FeatureScripts: View FeatureScripts
Sign In or Register to comment.