/* $Header: $ */ /* $NoKeywords: $ */ Legal Stuff: Copyright (c) 1993-2012 Robert McNeel & Associates. All Rights Reserved. Rhinoceros is a registered trademark of Robert McNeel & Associates. THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED. ==================================================================== Answers to frequently asked questions. ==================================================================== Support: If you have a question concerning the openNURBS Toolkit that is not answered in faq.txt or covered in the examples, then please post your question on the support newsgroup at . If you are at a location that does not permit access to , then you can use the web version of the newsgroup at You can search archived newsgroup messages at ==================================================================== Versions of 3DM files. Version 1 3DM files: The openNURBS toolkit will read version 1 files. Rhino 1 and other applications using the old Rhino I/O toolkit create version 1 files. Version 2 3DM files: The openNURBS toolkit will read and write version 2 files. Rhino 2 and applications using an openNURBS toolkit released on or after December 2000 create version 2 files. (Rhino 1 and the old Rhino I/O toolkit will not read version 2 files.) Version 3 3DM files: The openNURBS toolkit will read and write version 3 files. Rhino 3 and applications using an openNURBS toolkit released on or after October 2002 create version 3 files. (Rhino 1 and Rhino 2 will not read version 2 files.) Version 4 3DM files: The openNURBS toolkit will read and write version 4 files. Rhino 4 and applications using an openNURBS toolkit released on or after September 2006 create version 4 files. (Rhino 1, Rhino 2, and Rhino 3 will not read version 4 files.) Version 5 3DM files: The openNURBS toolkit will read and write version 5 files. Rhino 5 and applications using an openNURBS toolkit released on or after September 2009 create version 5 files. (Rhino 1, Rhino 2, Rhino 3 and Rhino 4 will not read version 5 files.) ==================================================================== Supported compilers: Question: Can I use my brand X C++ compiler? Answer: The C++ openNURBS toolkit has been tested with Microsoft Visual Studio 2010 (VC 10.0 SP1) (Windows 7 Professional SP1) To build opennurbs and the examples with Visual Studio 2010 SP1, use the solution build_opennurbs_vs2010.sln. gcc version 4.2.1 (Apple Build 5658) To build opennurbs and the examples with gcc use the makefile. Apple Xcode 4.5 (4G182) (OSX 10.8.2) To build opennurbs and the examples with Xcode 4.5, use the workspace build_opennurbs_xcode.workspace. The openNURBS C++ source code is clean and fairly simple. You should be able to use any good C++ compiler that has 32-bit integers, 32-bit or 64-bit pointers, and wchar_t support. OpenNURBS uses UTF-16 to store text information in 3DM files and provides tools for converting UTF-16 strings to UTF-8 and UTF-32 strings. The ON_wString has wchar_t characters. Excellent compilers and make utilities are available from The Free Software Foundation . You have the option of using these tools free of charge. If you are using a good quality C++ compiler and run into some toolkit code that causes problems, please let us know and we'll attempt to change the code to accommodate the compiler. ==================================================================== Microsoft Visual C++ 6.0 Users: You are on your own. Support for this compiler is no longer provided. ==================================================================== Microsoft Visual Studio 2003 users: You are on your own. Support for this compiler is no longer provided. ==================================================================== Microsoft Visual Studio 2005 users: You are on your own. Support for this compiler is no longer provided. ==================================================================== Microsoft Visual Studio 2010 users: This is the current platform for opennurbs development. ==================================================================== The Open GL example: Past versions of opennurbs have included a crude version of an Open GL example. The code for this example is still included in the current version, but we no longer provide support for using OpenGL with opennurbs. Nothing has changed in opennurbs to with respect to using OpenGL; we simply do not have the resources to provide quality OpenGL support on the wide variety of platforms where opennurbs is used. ==================================================================== Vertex ordering in ON_Mesh faces: All faces in a ON_Mesh are stored with vertices listed in counter-clockwise order. In particular, for quads the vertices are ordered as v3-----v2 | | v0-----v1 The quads may be non-planar. The definition of void ON_GL( const ON_Mesh& ) in opennurbs_gl.cpp demonstrates how to go through an ON_Mesh and render all the quads as two triangles. ==================================================================== Orientation of ON_Brep faces: The "UV" orientation of surfaces in a Brep is arbitrary. If the BOOL ON_BrepFace::m_bRev member is FALSE, then the face's orientation agrees with the surface's natural Du X Dv orientation. When the member is TRUE, the face's orientation is opposite the surface's natural Du X Dv orientation. If your application cannot handle ON_BrepFaces that have a TRUE m_bRev flag, then call ON_Brep::FlipReversedSurfaces(). See the comments in ON_Brep::FlipReversedSurfaces() and ON_Brep::SwapFaceParameters() for details. ==================================================================== Trimming loop order and nesting: The ON_BrepLoop::m_type member records the type of boundary (inner, outer, etc.). A ON_BrepFace has exactly one outer loop and it is the first loop referenced in the ON_BrepFace::m_li[] array. The inner loops all define "holes" in the ON_BrepFace. All of the inner holes lie inside of the outer loop. A ON_BrepFace is always path connected. In particular, inner loops are not "nested". ==================================================================== Surfaces in Rhino are read as ON_Breps Internally, Rhino stores all surfaces as some type of b-rep and the openNURBS toolkit reads these objects as b-reps. To see if an entire ON_Brep is really just a surface, use BOOL ON_Brep::IsSurface(). If ON_Brep::IsSurface() returns TRUE, then the b-rep geometry is the same as the surface ON_Brep::m_S[0]. To see of a particular face in a b-rep is really just a surface, use BOOL ON_Brep::FaceIsSurface( face_index ). If ON_Brep::FaceIsSurface( face_index ) returns TRUE, then the face's geometry is the same as the surface ON_Brep::m_S[face.m_si]. ==================================================================== For details about Rhino, please visit the Rhino web site at . If you have questions or comments about Rhino that do not directly pertain to Rhino toolkits, please use the Rhino discussion list. To subscribe or learn more about the Rhino discussion list, please visit . ====================================================================