Skip to content
Snippets Groups Projects
compute.rhino3d.js 173 KiB
Newer Older
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
var RhinoCompute = {
    version: "0.5.1",

    url: "https://compute.rhino3d.com/",

    authToken: null,

    getAuthToken: function(useLocalStorage=true) {
        var auth = null;
        if( useLocalStorage )
            auth = localStorage["compute_auth"];
        if (auth == null) {
            auth = window.prompt("Rhino Accounts auth token\nVisit https://www.rhino3d.com/compute/login");
            if (auth != null && auth.length>20) {
                auth = "Bearer " + auth;
                localStorage.setItem("compute_auth", auth);
            }
        }
        return auth;
    },

    computeFetch: function(endpoint, arglist) {
        return fetch(RhinoCompute.url+endpoint, {
                "method":"POST",
                "body": JSON.stringify(arglist),
                "headers": {
                    "Authorization": RhinoCompute.authToken,
                    "User-Agent": `compute.rhino3d.js/${RhinoCompute.version}`
                },
        }).then(r=>r.json());
    },

    zipArgs: function(multiple, ...args) {
        if(!multiple)
            return args;

        if(args.length==1)
            return args[0].map(function(_,i) { return [args[0][i]]; });
        if(args.length==2)
            return args[0].map(function(_,i) {
                return [args[0][i],args[1][i]]; }
            );
        if(args.length==3)
            return args[0].map(function(_,i) {
                return [args[0][i],args[1][i],args[2][i]]; }
            );
        if(args.length==4)
            return args[0].map(function(_,i) {
                return [args[0][i],args[1][i],args[2][i],args[3][i]]; }
            );
        if(args.length==5)
            return args[0].map(function(_,i) {
                return [args[0][i],args[1][i],args[2][i],args[3][i],args[4][i]]; }
            );
        if(args.length==6)
            return args[0].map(function(_,i) {
                return [args[0][i],args[1][i],args[2][i],args[3][i],args[4][i],args[5][i]]; }
            );
        if(args.length==7)
            return args[0].map(function(_,i) {
                return [args[0][i],args[1][i],args[2][i],args[3][i],args[4][i],args[5][i],args[6][i]]; }
            );
        return args[0].map(function(_,i) {
            return [args[0][i],args[1][i],args[2][i],args[3][i],args[4][i],args[5][i],args[6][i],args[7][i]]; }
        );
    },

    Extrusion : {
        getWireframe : function(extrusion, multiple=false) {
            let url="rhino/geometry/extrusion/getwireframe-extrusion";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, extrusion);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },
    },

    BezierCurve : {
        createCubicBeziers : function(sourceCurve, distanceTolerance, kinkTolerance, multiple=false) {
            let url="rhino/geometry/beziercurve/createcubicbeziers-curve_double_double";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, sourceCurve, distanceTolerance, kinkTolerance);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        createBeziers : function(sourceCurve, multiple=false) {
            let url="rhino/geometry/beziercurve/createbeziers-curve";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, sourceCurve);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },
    },

    Brep : {
        changeSeam : function(face, direction, parameter, tolerance, multiple=false) {
            let url="rhino/geometry/brep/changeseam-brepface_int_double_double";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, face, direction, parameter, tolerance);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        copyTrimCurves : function(trimSource, surfaceSource, tolerance, multiple=false) {
            let url="rhino/geometry/brep/copytrimcurves-brepface_surface_double";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, trimSource, surfaceSource, tolerance);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        createBaseballSphere : function(center, radius, tolerance, multiple=false) {
            let url="rhino/geometry/brep/createbaseballsphere-point3d_double_double";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, center, radius, tolerance);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        createDevelopableLoft : function(crv0, crv1, reverse0, reverse1, density, multiple=false) {
            let url="rhino/geometry/brep/createdevelopableloft-curve_curve_bool_bool_int";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, crv0, crv1, reverse0, reverse1, density);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        createDevelopableLoft1 : function(rail0, rail1, fixedRulings, multiple=false) {
            let url="rhino/geometry/brep/createdevelopableloft-nurbscurve_nurbscurve_point2darray";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, rail0, rail1, fixedRulings);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        createPlanarBreps : function(inputLoops, multiple=false) {
            let url="rhino/geometry/brep/createplanarbreps-curvearray";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, inputLoops);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        createPlanarBreps1 : function(inputLoops, tolerance, multiple=false) {
            let url="rhino/geometry/brep/createplanarbreps-curvearray_double";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, inputLoops, tolerance);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        createPlanarBreps2 : function(inputLoop, multiple=false) {
            let url="rhino/geometry/brep/createplanarbreps-curve";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, inputLoop);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        createPlanarBreps3 : function(inputLoop, tolerance, multiple=false) {
            let url="rhino/geometry/brep/createplanarbreps-curve_double";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, inputLoop, tolerance);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        createTrimmedSurface : function(trimSource, surfaceSource, multiple=false) {
            let url="rhino/geometry/brep/createtrimmedsurface-brepface_surface";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, trimSource, surfaceSource);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        createTrimmedSurface1 : function(trimSource, surfaceSource, tolerance, multiple=false) {
            let url="rhino/geometry/brep/createtrimmedsurface-brepface_surface_double";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, trimSource, surfaceSource, tolerance);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        createFromCornerPoints : function(corner1, corner2, corner3, tolerance, multiple=false) {
            let url="rhino/geometry/brep/createfromcornerpoints-point3d_point3d_point3d_double";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, corner1, corner2, corner3, tolerance);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

        createFromCornerPoints1 : function(corner1, corner2, corner3, corner4, tolerance, multiple=false) {
            let url="rhino/geometry/brep/createfromcornerpoints-point3d_point3d_point3d_point3d_double";
            if(multiple) url = url + "?multiple=true"
            let args = RhinoCompute.zipArgs(multiple, corner1, corner2, corner3, corner4, tolerance);
            var promise = RhinoCompute.computeFetch(url, args);
            return promise;
        },

Loading
Loading full blame...