Hi,
I’m just getting my head around JS and Rhino.Compute in general. I am trying to create a hidden line drawing using Rhino.Compute.
The code for the API calls is here (it uses compute.rhino3d.js
as a template):
var HiddenLineDrawing = {
Parameters: {
new : function(multiple=false) {
let url="/rhino/geometry/hiddenlinedrawingparameters/new";
if(multiple) url = url + "?multiple=true"
let args = RhinoCompute.zipArgs(multiple);
var promise = RhinoCompute.computeFetch(url, args);
return promise;
},
addGeometry : function(self, geometry, tag=null, multiple=false) {
let url="/rhino/geometry/hiddenlinedrawingparameters/addgeometry-hiddenlinedrawingparameters_geometrybase_object";
if(multiple) url = url + "?multiple=true"
let args = RhinoCompute.zipArgs(multiple, self, geometry, tag);
var promise = RhinoCompute.computeFetch(url, args);
return promise;
},
setViewport : function(self, viewport, multiple=false) {
let url="/rhino/geometry/hiddenlinedrawingparameters/setviewport-hiddenlinedrawingparameters_viewportinfo";
if(multiple) url = url + "?multiple=true"
let args = RhinoCompute.zipArgs(multiple, self, viewport);
var promise = RhinoCompute.computeFetch(url, args);
return promise;
}
},
compute : function(hldp, multipleThreads=false, multiple=false) {
let url="/rhino/geometry/hiddenlinedrawing/compute";
if(multiple) url = url + "?multiple=true"
let args = RhinoCompute.zipArgs(multiple, hldp, multipleThreads);
var promise = RhinoCompute.computeFetch(url, args);
return promise;
},
getSegments : function(hld, multiple=false) {
let url="/rhino/geometry/hiddenlinedrawing/getsegments";
if(multiple) url = url + "?multiple=true"
let args = RhinoCompute.zipArgs(multiple, hld);
var promise = RhinoCompute.computeFetch(url, args);
return promise;
}
}
The code for using these is here:
// Initialize RhinoCompute
RhinoCompute.authToken = RhinoCompute.getAuthToken();
// Create HiddenLineDrawingParameters
var hldp = HiddenLineDrawing.Parameters.new()
var res;
// Create Viewport
var vp = new _rhino3dm.ViewportInfo();
res = vp.setCameraDirection([1, 0, 0]);
res = vp.setCameraLocation([-10000, 0, 0]);
res = HiddenLineDrawing.Parameters.setViewport(hldp, vp);
// Add some geometry
HiddenLineDrawing.Parameters.addGeometry(hldp, some_mesh, null);
// Compute HiddenLineDrawing
let hld = HiddenLineDrawing.compute(hldp);
This generates a 500 server error with the message:
details: "Nancy.RequestExecutionException: Oh noes! ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: No Viewport defined in parameters
As far as I understand, I’m successfully adding a ViewportInfo
object to the HiddenLineDrawingParameters
and then passing that to the HiddenLineDrawing
computing…
Any tips / comments about what is going wrong? Much thanks!
Tom