Welcome to the Onshape forum! Ask questions and join in the discussions about everything Onshape, CAD, maker project and design.

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.

Magnitude of value with units

konstantin_shiriazdanovkonstantin_shiriazdanov Posts: 215Member ✭✭✭
How to extract unitless magnitude of value with units if the units are unknown? Or what is internal structure of ValueWithUnits type, is it of map type?

Comments

  • paul_chastellpaul_chastell Posts: 57Onshape Employees
    edited July 13
    I would suggest you divide by the unit you are interested in, and ignore the internal representation. If you have a length and what to know how many meters it is then you can do "var lengthInMeters = length / meter". It doesn't matter what unit 'length' has. Or "length / inch" to get the length in inches. In both cases the result is a unitless value.

    E.g. this custom feature measures the distance between two points, in inches, and logs it to the console

    annotation { "Feature Type Name" : "Distance in Inches" }
    export const inchDistance = defineFeature(function(context is Context, id is Id, definition is map)
        precondition
        {
            annotation { "Name" : "Points", "Filter" : EntityType.VERTEX, "MaxNumberOfPicks" : 2 }
            definition.points is Query;        
        }
        {
            if (size(evaluateQuery(context, definition.points)) == 2)
            {
                var result = evDistance(context, {
                    "side0" : qNthElement(definition.points, 0),
                    "side1" : qNthElement(definition.points, 1)
                });
                println("Distance in inches is: " ~ (result.distance / inch));
            }
        });
    
    
    Paul Chastell / Director of Modeling Development / Onshape Inc.
  • ilya_baranilya_baran Posts: 607Onshape Employees, Developers
    Paul is absolutely right.  But if you're curious about what the representation is, you can look at units.fs in std or do println("" ~ inch);
    Ilya Baran \ Director of FeatureScript \ Onshape Inc
  • konstantin_shiriazdanovkonstantin_shiriazdanov Posts: 215Member ✭✭✭
    ok, thank you Ilya and Paul, I found out that ValueWithUnits is internally a map and "value" field contains magnitude
Sign In or Register to comment.