use of maspack.geometry.NURBSSurface in project artisynth_core by artisynth.
the class NURBSViewer method addNURBS.
public void addNURBS(File file) throws IOException {
WavefrontReader wfr = new WavefrontReader(file);
wfr.parse();
Vector4d[] allControlPnts = wfr.getHomogeneousPoints();
for (WavefrontReader.Curve curve : wfr.getCurveList()) {
NURBSCurve3d curveCopy = new NURBSCurve3d();
try {
curveCopy.set(curve, allControlPnts);
} catch (IllegalArgumentException e) {
throw new IOException(e.getMessage());
}
addNURBS(curveCopy);
}
for (WavefrontReader.Surface surf : wfr.getSurfaceList()) {
NURBSSurface surfCopy = new NURBSSurface();
try {
surfCopy.set(surf, allControlPnts);
} catch (IllegalArgumentException e) {
throw new IOException(e.getMessage());
}
addNURBS(surfCopy);
}
}
use of maspack.geometry.NURBSSurface in project artisynth_core by artisynth.
the class NURBSViewer method addNURBSWithMesh.
public void addNURBSWithMesh(NURBSObject nurbs) {
addNURBS(nurbs);
if (nurbs instanceof NURBSSurface) {
NURBSMesh mesh = new NURBSMesh();
mesh.set((NURBSSurface) nurbs, /* triangular= */
true);
// mesh.setRenderEdges (true);
Color gold = new Color(0.93f, 0.8f, 0.063f);
RenderProps.setFaceColor(mesh, gold);
meshTable.put(nurbs, mesh);
System.out.println("mesh.numVerts=" + mesh.numVertices());
viewer.addRenderable(mesh);
}
}
use of maspack.geometry.NURBSSurface in project artisynth_core by artisynth.
the class NURBSViewer method main.
public static void main(String[] args) {
StringHolder fileName = new StringHolder();
IntHolder width = new IntHolder(400);
IntHolder height = new IntHolder(400);
ArgParser parser = new ArgParser("java maspack.geometry.NURBSViewer");
parser.addOption("-width %d #width (pixels)", width);
parser.addOption("-height %d #height (pixels)", height);
parser.addOption("-drawAxes %v #draw coordinate axes", drawAxes);
parser.addOption("-file %s #wavefront file name", fileName);
parser.addOption("-sphere %v #create a NURBS sphere", addSphere);
parser.addOption("-circle %v #create a NURBS circle", addCircle);
parser.addOption("-mesh %v #create a mesh for surfaces", addMesh);
parser.addOption("-collider %v #create a colliding object for meshes", collider);
parser.addOption("-axisLength %f #coordinate axis length", axisLength);
parser.addOption("-GLVersion %d{2,3} " + "#version of openGL for graphics", glVersion);
parser.matchAllArgs(args);
NURBSViewer viewFrame = null;
try {
GLVersion glv = (glVersion.value == 3 ? GLVersion.GL3 : GLVersion.GL2);
viewFrame = new NURBSViewer(width.value, height.value, glv);
GLViewer viewer = viewFrame.getViewer();
if (fileName.value != null) {
viewFrame.addNURBS(new File(fileName.value));
}
if (addSphere.value) {
NURBSSurface sphere = new NURBSSurface();
sphere.setSphere(0, 0, 0, 10);
if (addMesh.value) {
viewFrame.addNURBSWithMesh(sphere);
} else {
viewFrame.addNURBS(sphere);
}
}
if (addCircle.value) {
NURBSCurve3d circle = new NURBSCurve3d();
circle.setCircle(0, 0, 10);
viewFrame.addNURBS(circle);
}
viewer.autoFitPerspective();
if (drawAxes.value) {
if (axisLength.value > 0) {
viewer.setAxisLength(axisLength.value);
} else {
viewer.setAxisLength(GLViewer.AUTO_FIT);
}
}
if (collider.value) {
viewFrame.addCollidable();
}
} catch (Exception e) {
e.printStackTrace();
}
viewFrame.setVisible(true);
}
Aggregations