#include #include using namespace std; #include #include #include #include "octree.h" #include "expression.h" #include "space_interval.h" #include "interval.h" #include "vector.h" #include "trimesh.h" #include "derivative_table.h" //Added for testing tool path generation #include "array_2d.h" #include "tool_path.h" #ifdef WIN32 #include #include "gui.h" #include "guicon.h" #endif clock_t start_time; clock_t end_time; void start_clock() { start_time = clock(); } void end_clock() { end_time = clock(); float run_time = (float)(end_time - start_time)/(float)CLOCKS_PER_SEC; cout << run_time << " seconds." << endl; } #ifdef WIN32 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow) { #else int main(int argc, char* argv[]) { #endif interval_t interval1, result; string infix, postfix; #ifdef WIN32 RedirectIOToConsole(); #endif // Define the evaluation interval for the expression interval1.set_real_interval(-1, 1); space_interval_t si(interval1, interval1, interval1); // Convert an infix string (for a circle) to a postfix string //infix = "X**2 + Y**2 + Z**2 < 0.5"; //infix = "sqrt(y**2) + sqrt(x**2)"; //infix = "(X**2 + Y**2 + Z**2 < 0.5) & (X**2 + Y**2 + Z**2 > 0.3) & (Z < 0.25 )"; infix = "(((((((0 + (X-0)/(0.75 + 0.5*cos(-1.57079632679 + (1.57079632679--1.57079632679)*(Z--0.5)/(0.5--0.5))))-0)**2 + ((0 + (Y-0)/(0.75 + 0.5*cos(-1.57079632679 + (1.57079632679--1.57079632679)*(Z--0.5)/(0.5--0.5))))-0)**2 <= 0.5**2) & (Z >= -0.5) & (Z <= 0.5)) | (((0.35 - sqrt(((Z-0)-0)**2 + ((0 + ((X--0.6)-0)/0.75)-0)**2))**2 + ((0 + ((Y-0)-0)/3)-0)**2) <= 0.05**2) | ((((0.55 - sqrt((X-1.05)**2 + (Z--0.1)**2))**2 + (Y-0)**2) <= 0.1**2)) & (((X >= -1.5) & (X <= 0.9) & (Y >= -1.5) & (Y <= 1.5) & (Z >= 0) & (Z <= 1.5)))) & ~(((((0 + (X-0)/(0.75 + 0.5*cos(-1.57079632679 + (1.57079632679--1.57079632679)*(Z--0.5)/(0.5--0.5))))-0)**2 + ((0 + (Y-0)/(0.75 + 0.5*cos(-1.57079632679 + (1.57079632679--1.57079632679)*(Z--0.5)/(0.5--0.5))))-0)**2 <= 0.4**2) & (Z >= -0.4) & (Z <= 0.6)))) & ~(((((0.55 - sqrt((X-1.05)**2 + (Z--0.1)**2))**2 + (Y-0)**2) <= 0.075**2)) & (((X >= -1.5) & (X <= 0.9) & (Y >= -1.5) & (Y <= 1.5) & (Z >= 0) & (Z <= 1.5))))) & ~(((X >= 0) & (X <= 1.5) & (Y >= -1.5) & (Y <= 0) & (Z >= -1.5) & (Z <= 1.5)))"; //infix = "(((((((0 + (X-0)/(0.75 + 0.5*cos(-1.57079632679 + (1.57079632679--1.57079632679)*(Z--0.5)/(0.5--0.5))))-0)**2 + ((0 + (Y-0)/(0.75 + 0.5*cos(-1.57079632679 + (1.57079632679--1.57079632679)*(Z--0.5)/(0.5--0.5))))-0)**2 <= 0.5**2)"; //infix = "(((X >= -10) & (X <= 10) & (Y >= -10) & (Y <= 10) & (Z >= -10) & (Z <= 10))) & ~(((X >= 1) & (X <= 2.27) & (Y >= 1) & (Y <= 2.2) & (Z >= -10) & (Z <= 10))) | ((((X-1.68)--0.18) >= -0.025) & (((X-1.68)--0.18) <= 0.025) & (((Y-1.7)-0.1085) >= -0.008) & (((Y-1.7)-0.1085) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.18) >= -0.025) & (((X-1.68)--0.18) <= 0.025) & (((Y-1.7)-0.0775) >= -0.008) & (((Y-1.7)-0.0775) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.18) >= -0.025) & (((X-1.68)--0.18) <= 0.025) & (((Y-1.7)-0.0465) >= -0.008) & (((Y-1.7)-0.0465) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.18) >= -0.025) & (((X-1.68)--0.18) <= 0.025) & (((Y-1.7)-0.0155) >= -0.008) & (((Y-1.7)-0.0155) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.18) >= -0.025) & (((X-1.68)--0.18) <= 0.025) & (((Y-1.7)--0.0155) >= -0.008) & (((Y-1.7)--0.0155) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.18) >= -0.025) & (((X-1.68)--0.18) <= 0.025) & (((Y-1.7)--0.0465) >= -0.008) & (((Y-1.7)--0.0465) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.18) >= -0.025) & (((X-1.68)--0.18) <= 0.025) & (((Y-1.7)--0.0775) >= -0.008) & (((Y-1.7)--0.0775) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.18) >= -0.025) & (((X-1.68)--0.18) <= 0.025) & (((Y-1.7)--0.1085) >= -0.008) & (((Y-1.7)--0.1085) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.1085) >= -0.008) & (((X-1.68)--0.1085) <= 0.008) & (((Y-1.7)--0.18) >= -0.025) & (((Y-1.7)--0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.0775) >= -0.008) & (((X-1.68)--0.0775) <= 0.008) & (((Y-1.7)--0.18) >= -0.025) & (((Y-1.7)--0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.0465) >= -0.008) & (((X-1.68)--0.0465) <= 0.008) & (((Y-1.7)--0.18) >= -0.025) & (((Y-1.7)--0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.0155) >= -0.008) & (((X-1.68)--0.0155) <= 0.008) & (((Y-1.7)--0.18) >= -0.025) & (((Y-1.7)--0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.0155) >= -0.008) & (((X-1.68)-0.0155) <= 0.008) & (((Y-1.7)--0.18) >= -0.025) & (((Y-1.7)--0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.0465) >= -0.008) & (((X-1.68)-0.0465) <= 0.008) & (((Y-1.7)--0.18) >= -0.025) & (((Y-1.7)--0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.0775) >= -0.008) & (((X-1.68)-0.0775) <= 0.008) & (((Y-1.7)--0.18) >= -0.025) & (((Y-1.7)--0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.1085) >= -0.008) & (((X-1.68)-0.1085) <= 0.008) & (((Y-1.7)--0.18) >= -0.025) & (((Y-1.7)--0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.18) >= -0.025) & (((X-1.68)-0.18) <= 0.025) & (((Y-1.7)--0.1085) >= -0.008) & (((Y-1.7)--0.1085) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.18) >= -0.025) & (((X-1.68)-0.18) <= 0.025) & (((Y-1.7)--0.0775) >= -0.008) & (((Y-1.7)--0.0775) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.18) >= -0.025) & (((X-1.68)-0.18) <= 0.025) & (((Y-1.7)--0.0465) >= -0.008) & (((Y-1.7)--0.0465) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.18) >= -0.025) & (((X-1.68)-0.18) <= 0.025) & (((Y-1.7)--0.0155) >= -0.008) & (((Y-1.7)--0.0155) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.18) >= -0.025) & (((X-1.68)-0.18) <= 0.025) & (((Y-1.7)-0.0155) >= -0.008) & (((Y-1.7)-0.0155) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.18) >= -0.025) & (((X-1.68)-0.18) <= 0.025) & (((Y-1.7)-0.0465) >= -0.008) & (((Y-1.7)-0.0465) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.18) >= -0.025) & (((X-1.68)-0.18) <= 0.025) & (((Y-1.7)-0.0775) >= -0.008) & (((Y-1.7)-0.0775) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.18) >= -0.025) & (((X-1.68)-0.18) <= 0.025) & (((Y-1.7)-0.1085) >= -0.008) & (((Y-1.7)-0.1085) <= 0.008) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.1085) >= -0.008) & (((X-1.68)-0.1085) <= 0.008) & (((Y-1.7)-0.18) >= -0.025) & (((Y-1.7)-0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.0775) >= -0.008) & (((X-1.68)-0.0775) <= 0.008) & (((Y-1.7)-0.18) >= -0.025) & (((Y-1.7)-0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.0465) >= -0.008) & (((X-1.68)-0.0465) <= 0.008) & (((Y-1.7)-0.18) >= -0.025) & (((Y-1.7)-0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)-0.0155) >= -0.008) & (((X-1.68)-0.0155) <= 0.008) & (((Y-1.7)-0.18) >= -0.025) & (((Y-1.7)-0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.0155) >= -0.008) & (((X-1.68)--0.0155) <= 0.008) & (((Y-1.7)-0.18) >= -0.025) & (((Y-1.7)-0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.0465) >= -0.008) & (((X-1.68)--0.0465) <= 0.008) & (((Y-1.7)-0.18) >= -0.025) & (((Y-1.7)-0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.0775) >= -0.008) & (((X-1.68)--0.0775) <= 0.008) & (((Y-1.7)-0.18) >= -0.025) & (((Y-1.7)-0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.68)--0.1085) >= -0.008) & (((X-1.68)--0.1085) <= 0.008) & (((Y-1.7)-0.18) >= -0.025) & (((Y-1.7)-0.18) <= 0.025) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 1.432) & (X <= 1.508) & (Y >= 1.7385) & (Y <= 1.7545) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.432) & (X <= 1.448) & (Y >= 1.6765) & (Y <= 1.7545) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.432) & (X <= 1.508) & (Y >= 1.6765) & (Y <= 1.6925) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.492) & (X <= 1.568) & (Y >= 1.7075) & (Y <= 1.7235) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.552) & (X <= 1.568) & (Y >= 1.6455) & (Y <= 1.7235) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.492) & (X <= 1.568) & (Y >= 1.6455) & (Y <= 1.6615) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.672) & (X <= 1.868) & (Y >= 1.6145) & (Y <= 1.6305) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.672) & (X <= 1.688) & (Y >= 1.6145) & (Y <= 1.6615) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.492) & (X <= 1.688) & (Y >= 1.6455) & (Y <= 1.6615) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.672) & (X <= 1.868) & (Y >= 1.7075) & (Y <= 1.7235) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.672) & (X <= 1.688) & (Y >= 1.7075) & (Y <= 1.7545) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.492) & (X <= 1.688) & (Y >= 1.7385) & (Y <= 1.7545) & (Z >= -0.005) & (Z <= -0.005)) | (((-(Y-1.5315)--0.053) >= -0.016) & ((-(Y-1.5315)--0.053) <= 0.016) & (((X-1.36)-0) >= -0.077) & (((X-1.36)-0) <= 0.077) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((-(Y-1.5315)-0) >= -0.016) & ((-(Y-1.5315)-0) <= 0.016) & (((X-1.36)-0) >= -0.077) & (((X-1.36)-0) <= 0.077) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((-(Y-1.5315)-0.053) >= -0.016) & ((-(Y-1.5315)-0.053) <= 0.016) & (((X-1.36)-0) >= -0.077) & (((X-1.36)-0) <= 0.077) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 1.352) & (X <= 1.508) & (Y >= 1.6145) & (Y <= 1.6305) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.352) & (X <= 1.368) & (Y >= 1.5765) & (Y <= 1.6305) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.352) & (X <= 1.508) & (Y >= 1.4705) & (Y <= 1.4865) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.492) & (X <= 1.508) & (Y >= 1.4705) & (Y <= 1.5995) & (Z >= -0.005) & (Z <= -0.005)) | (((-(Y-1.7465)--0.06) >= -0.032) & ((-(Y-1.7465)--0.06) <= 0.032) & (((X-1.36)-0) >= -0.034) & (((X-1.36)-0) <= 0.034) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((-(Y-1.7465)-0.06) >= -0.032) & ((-(Y-1.7465)-0.06) <= 0.032) & (((X-1.36)-0) >= -0.034) & (((X-1.36)-0) <= 0.034) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 1.352) & (X <= 1.368) & (Y >= 1.7935) & (Y <= 1.8165) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.352) & (X <= 1.6725) & (Y >= 1.8005) & (Y <= 1.8165) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.6565) & (X <= 1.6725) & (Y >= 1.8005) & (Y <= 1.888) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.352) & (X <= 1.508) & (Y >= 1.6455) & (Y <= 1.6615) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.352) & (X <= 1.368) & (Y >= 1.6455) & (Y <= 1.6995) & (Z >= -0.005) & (Z <= -0.005)) | (((-(X-1.92)--0.1) >= -0.021) & ((-(X-1.92)--0.1) <= 0.021) & ((-(Y-1.195)--0.1) >= -0.041) & ((-(Y-1.195)--0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((-(X-1.92)-0) >= -0.021) & ((-(X-1.92)-0) <= 0.021) & ((-(Y-1.195)--0.1) >= -0.041) & ((-(Y-1.195)--0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((-(X-1.92)-0.1) >= -0.021) & ((-(X-1.92)-0.1) <= 0.021) & ((-(Y-1.195)--0.1) >= -0.041) & ((-(Y-1.195)--0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((-(X-1.92)-0.05) >= -0.021) & ((-(X-1.92)-0.05) <= 0.021) & ((-(Y-1.195)-0.1) >= -0.041) & ((-(Y-1.195)-0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((-(X-1.92)--0.05) >= -0.021) & ((-(X-1.92)--0.05) <= 0.021) & ((-(Y-1.195)-0.1) >= -0.041) & ((-(Y-1.195)-0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((-(X-1.92)--0.262) >= -0.071) & ((-(X-1.92)--0.262) <= 0.071) & ((-(Y-1.195)-0) >= -0.041) & ((-(Y-1.195)-0) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((-(X-1.92)-0.262) >= -0.071) & ((-(X-1.92)-0.262) <= 0.071) & ((-(Y-1.195)-0) >= -0.041) & ((-(Y-1.195)-0) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 2.012) & (X <= 2.028) & (Y >= 1.287) & (Y <= 1.383) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.7805) & (X <= 2.028) & (Y >= 1.367) & (Y <= 1.383) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.7805) & (X <= 1.7965) & (Y >= 1.367) & (Y <= 1.528) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.812) & (X <= 1.828) & (Y >= 1.287) & (Y <= 1.333) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.7495) & (X <= 1.828) & (Y >= 1.317) & (Y <= 1.333) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.7495) & (X <= 1.7655) & (Y >= 1.317) & (Y <= 1.528) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.862) & (X <= 1.878) & (Y >= 1.017) & (Y <= 1.103) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.017) & (X <= 1.878) & (Y >= 1.017) & (Y <= 1.033) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.017) & (X <= 1.033) & (Y >= 1.017) & (Y <= 1.7895) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.017) & (X <= 1.368) & (Y >= 1.7735) & (Y <= 1.7895) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.352) & (X <= 1.368) & (Y >= 1.7735) & (Y <= 1.8095) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.962) & (X <= 1.978) & (Y >= 1.087) & (Y <= 1.203) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.962) & (X <= 2.078) & (Y >= 1.187) & (Y <= 1.203) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 2.062) & (X <= 2.078) & (Y >= 1.187) & (Y <= 1.423) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.852) & (X <= 2.078) & (Y >= 1.407) & (Y <= 1.423) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.852) & (X <= 1.868) & (Y >= 1.407) & (Y <= 1.5995) & (Z >= -0.005) & (Z <= -0.005)) | (((--(Y-1.9)-0.05) >= -0.021) & ((--(Y-1.9)-0.05) <= 0.021) & ((-(X-2.11)-0.1) >= -0.041) & ((-(X-2.11)-0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((--(Y-1.9)--0.05) >= -0.021) & ((--(Y-1.9)--0.05) <= 0.021) & ((-(X-2.11)-0.1) >= -0.041) & ((-(X-2.11)-0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((--(Y-1.9)-0) >= -0.021) & ((--(Y-1.9)-0) <= 0.021) & ((-(X-2.11)--0.1) >= -0.041) & ((-(X-2.11)--0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((--(Y-1.9)--0.212) >= -0.071) & ((--(Y-1.9)--0.212) <= 0.071) & ((-(X-2.11)-0) >= -0.041) & ((-(X-2.11)-0) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((--(Y-1.9)-0.212) >= -0.071) & ((--(Y-1.9)-0.212) <= 0.071) & ((-(X-2.11)-0) >= -0.041) & ((-(X-2.11)-0) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 1.922) & (X <= 2.018) & (Y >= 1.942) & (Y <= 1.958) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.922) & (X <= 1.938) & (Y >= 1.7075) & (Y <= 1.958) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.852) & (X <= 1.938) & (Y >= 1.7075) & (Y <= 1.7235) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 2.062) & (X <= 2.248) & (Y >= 1.287) & (Y <= 1.303) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 2.232) & (X <= 2.248) & (Y >= 1.287) & (Y <= 1.908) & (Z >= -0.005) & (Z <= -0.005)) | ((((X-2.16)--0.0375) >= -0.015) & (((X-2.16)--0.0375) <= 0.015) & (((Y-1.41)--0.045) >= -0.02) & (((Y-1.41)--0.045) <= 0.02) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-2.16)-0.0375) >= -0.015) & (((X-2.16)-0.0375) <= 0.015) & (((Y-1.41)--0.045) >= -0.02) & (((Y-1.41)--0.045) <= 0.02) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-2.16)-0) >= -0.015) & (((X-2.16)-0) <= 0.015) & (((Y-1.41)-0.045) >= -0.02) & (((Y-1.41)-0.045) <= 0.02) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 2.002) & (X <= 2.2055) & (Y >= 1.842) & (Y <= 1.858) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 2.1895) & (X <= 2.2055) & (Y >= 1.357) & (Y <= 1.858) & (Z >= -0.005) & (Z <= -0.005)) | ((((X-2.02)--0.06) >= -0.032) & (((X-2.02)--0.06) <= 0.032) & (((Y-1.54)-0) >= -0.034) & (((Y-1.54)-0) <= 0.034) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-2.02)-0.06) >= -0.032) & (((X-2.02)-0.06) <= 0.032) & (((Y-1.54)-0) >= -0.034) & (((Y-1.54)-0) <= 0.034) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 1.852) & (X <= 1.973) & (Y >= 1.6145) & (Y <= 1.6305) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.957) & (X <= 1.973) & (Y >= 1.532) & (Y <= 1.6305) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.957) & (X <= 1.973) & (Y >= 1.452) & (Y <= 1.548) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.957) & (X <= 2.1305) & (Y >= 1.452) & (Y <= 1.468) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 2.1145) & (X <= 2.1305) & (Y >= 1.357) & (Y <= 1.468) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.852) & (X <= 2.028) & (Y >= 1.7075) & (Y <= 1.7235) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 2.012) & (X <= 2.028) & (Y >= 1.532) & (Y <= 1.7235) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 2.012) & (X <= 2.083) & (Y >= 1.532) & (Y <= 1.548) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 2.067) & (X <= 2.168) & (Y >= 1.532) & (Y <= 1.548) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 2.152) & (X <= 2.168) & (Y >= 1.447) & (Y <= 1.548) & (Z >= -0.005) & (Z <= -0.005)) | ((((X-1.35)--0.075) >= -0.021) & (((X-1.35)--0.075) <= 0.021) & (((Y-2.04)--0.1) >= -0.041) & (((Y-2.04)--0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.35)-0.025) >= -0.021) & (((X-1.35)-0.025) <= 0.021) & (((Y-2.04)--0.1) >= -0.041) & (((Y-2.04)--0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.35)-0.075) >= -0.021) & (((X-1.35)-0.075) <= 0.021) & (((Y-2.04)-0.1) >= -0.041) & (((Y-2.04)-0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.35)--0.025) >= -0.021) & (((X-1.35)--0.025) <= 0.021) & (((Y-2.04)-0.1) >= -0.041) & (((Y-2.04)-0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.35)--0.237) >= -0.071) & (((X-1.35)--0.237) <= 0.071) & (((Y-2.04)-0) >= -0.041) & (((Y-2.04)-0) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.35)-0.237) >= -0.071) & (((X-1.35)-0.237) <= 0.071) & (((Y-2.04)-0) >= -0.041) & (((Y-2.04)-0) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 1.5945) & (X <= 1.6105) & (Y >= 1.872) & (Y <= 1.948) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.467) & (X <= 1.6105) & (Y >= 1.932) & (Y <= 1.948) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.467) & (X <= 1.483) & (Y >= 1.862) & (Y <= 1.948) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.217) & (X <= 1.483) & (Y >= 1.862) & (Y <= 1.878) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.217) & (X <= 1.233) & (Y >= 1.862) & (Y <= 2.068) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.217) & (X <= 1.433) & (Y >= 2.052) & (Y <= 2.068) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.417) & (X <= 1.433) & (Y >= 2.052) & (Y <= 2.148) & (Z >= -0.005) & (Z <= -0.005)) | (((-(X-1.31)--0.025) >= -0.021) & ((-(X-1.31)--0.025) <= 0.021) & ((-(Y-1.195)--0.1) >= -0.041) & ((-(Y-1.195)--0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((-(X-1.31)-0.025) >= -0.021) & ((-(X-1.31)-0.025) <= 0.021) & ((-(Y-1.195)-0.1) >= -0.041) & ((-(Y-1.195)-0.1) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((-(X-1.31)--0.187) >= -0.071) & ((-(X-1.31)--0.187) <= 0.071) & ((-(Y-1.195)-0) >= -0.041) & ((-(Y-1.195)-0) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | (((-(X-1.31)-0.187) >= -0.071) & ((-(X-1.31)-0.187) <= 0.071) & ((-(Y-1.195)-0) >= -0.041) & ((-(Y-1.195)-0) <= 0.041) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 1.912) & (X <= 1.928) & (Y >= 1.187) & (Y <= 1.303) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.762) & (X <= 1.928) & (Y >= 1.187) & (Y <= 1.203) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.762) & (X <= 1.778) & (Y >= 1.187) & (Y <= 1.273) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.327) & (X <= 1.778) & (Y >= 1.257) & (Y <= 1.273) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.327) & (X <= 1.343) & (Y >= 1.257) & (Y <= 1.303) & (Z >= -0.005) & (Z <= -0.005)) | ((((X-1.15)--0.06) >= -0.032) & (((X-1.15)--0.06) <= 0.032) & (((Y-1.365)-0) >= -0.034) & (((Y-1.365)-0) <= 0.034) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.15)-0.06) >= -0.032) & (((X-1.15)-0.06) <= 0.032) & (((Y-1.365)-0) >= -0.034) & (((Y-1.365)-0) <= 0.034) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 1.197) & (X <= 1.6105) & (Y >= 1.357) & (Y <= 1.373) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.5945) & (X <= 1.6105) & (Y >= 1.357) & (Y <= 1.528) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.087) & (X <= 1.103) & (Y >= 1.257) & (Y <= 1.373) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.087) & (X <= 1.243) & (Y >= 1.257) & (Y <= 1.273) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.227) & (X <= 1.243) & (Y >= 1.087) & (Y <= 1.273) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.227) & (X <= 1.293) & (Y >= 1.087) & (Y <= 1.103) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.142) & (X <= 1.343) & (Y >= 1.287) & (Y <= 1.303) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.142) & (X <= 1.158) & (Y >= 1.287) & (Y <= 1.5395) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.142) & (X <= 1.368) & (Y >= 1.5235) & (Y <= 1.5395) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.142) & (X <= 1.368) & (Y >= 1.5235) & (Y <= 1.5395) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.142) & (X <= 1.158) & (Y >= 1.5235) & (Y <= 1.7545) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.142) & (X <= 1.508) & (Y >= 1.7385) & (Y <= 1.7545) & (Z >= -0.005) & (Z <= -0.005)) | ((((X-1.15)--0.06) >= -0.032) & (((X-1.15)--0.06) <= 0.032) & (((Y-1.455)-0) >= -0.034) & (((Y-1.455)-0) <= 0.034) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.15)-0.06) >= -0.032) & (((X-1.15)-0.06) <= 0.032) & (((Y-1.455)-0) >= -0.034) & (((Y-1.455)-0) <= 0.034) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 1.087) & (X <= 1.103) & (Y >= 1.357) & (Y <= 1.463) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.197) & (X <= 1.5795) & (Y >= 1.422) & (Y <= 1.438) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.5635) & (X <= 1.5795) & (Y >= 1.422) & (Y <= 1.528) & (Z >= -0.005) & (Z <= -0.005)) | ((((X-1.83)--0.06) >= -0.032) & (((X-1.83)--0.06) <= 0.032) & (((Y-2.03)-0) >= -0.034) & (((Y-2.03)-0) <= 0.034) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.83)-0.06) >= -0.032) & (((X-1.83)-0.06) <= 0.032) & (((Y-2.03)-0) >= -0.034) & (((Y-2.03)-0) <= 0.034) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 1.367) & (X <= 1.783) & (Y >= 1.962) & (Y <= 1.978) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.767) & (X <= 1.783) & (Y >= 1.962) & (Y <= 2.038) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.877) & (X <= 1.893) & (Y >= 1.932) & (Y <= 2.038) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.6255) & (X <= 1.893) & (Y >= 1.932) & (Y <= 1.948) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.6255) & (X <= 1.6415) & (Y >= 1.872) & (Y <= 1.948) & (Z >= -0.005) & (Z <= -0.005)) | ((((X-1.83)--0.07) >= -0.02) & (((X-1.83)--0.07) <= 0.02) & (((Y-2.12)-0) >= -0.024) & (((Y-2.12)-0) <= 0.024) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((((X-1.83)-0.07) >= -0.02) & (((X-1.83)-0.07) <= 0.02) & (((Y-2.12)-0) >= -0.024) & (((Y-2.12)-0) <= 0.024) & (((Z--0.005)-0) >= 0) & (((Z--0.005)-0) <= 0)) | ((X >= 1.467) & (X <= 1.768) & (Y >= 2.112) & (Y <= 2.128) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.467) & (X <= 1.483) & (Y >= 2.012) & (Y <= 2.128) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.267) & (X <= 1.483) & (Y >= 2.012) & (Y <= 2.028) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.267) & (X <= 1.283) & (Y >= 1.932) & (Y <= 2.028) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.752) & (X <= 1.768) & (Y >= 2.112) & (Y <= 2.178) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.752) & (X <= 2.018) & (Y >= 2.162) & (Y <= 2.178) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 2.002) & (X <= 2.018) & (Y >= 1.942) & (Y <= 2.178) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.877) & (X <= 1.908) & (Y >= 2.022) & (Y <= 2.038) & (Z >= -0.005) & (Z <= -0.005)) | ((X >= 1.892) & (X <= 1.908) & (Y >= 2.022) & (Y <= 2.128) & (Z >= -0.005) & (Z <= -0.005)) | ((((X-1.11)-0)**2 + ((Y-1.89)-0)**2) <= 0.02**2) | (((((X-1.11)--0.06)-0)**2 + (((Y-1.89)-0.06)-0)**2) <= 0.02**2) | ((((X-1.11)--0.06) >= -0.02) & (((X-1.11)--0.06) <= 0.02) & (((Y-1.89)-0) >= -0.02) & (((Y-1.89)-0) <= 0.02)) | ((((X-1.11)--0.06) >= -0.02) & (((X-1.11)--0.06) <= 0.02) & (((Y-1.89)--0.06) >= -0.02) & (((Y-1.89)--0.06) <= 0.02)) | ((((X-1.11)-0) >= -0.02) & (((X-1.11)-0) <= 0.02) & (((Y-1.89)--0.06) >= -0.02) & (((Y-1.89)--0.06) <= 0.02)) | ((((X-1.11)-0.06) >= -0.02) & (((X-1.11)-0.06) <= 0.02) & (((Y-1.89)--0.06) >= -0.02) & (((Y-1.89)--0.06) <= 0.02)) | ((((X-1.11)-0.06) >= -0.02) & (((X-1.11)-0.06) <= 0.02) & (((Y-1.89)-0) >= -0.02) & (((Y-1.89)-0) <= 0.02)) | ((((X-1.11)-0.06) >= -0.02) & (((X-1.11)-0.06) <= 0.02) & (((Y-1.89)-0.06) >= -0.02) & (((Y-1.89)-0.06) <= 0.02)) | ((((X-1.11)-0) >= -0.02) & (((X-1.11)-0) <= 0.02) & (((Y-1.89)-0.06) >= -0.02) & (((Y-1.89)-0.06) <= 0.02))"; //infix = "(X >= 0) & (Y <= 0) ~ (X <= .2)"; //cout << "Infix = \n" << infix << endl; cout << "Converting Infix to Postfix... "; start_clock(); postfix = convert_infix_to_postfix(infix); end_clock(); // Display infix and postfix string //cout << "Infix: '" << infix << "'\n"; //cout << "Postfix: '" << postfix << "'\n"; // Construct an expression object from the postfix strin // This is stored as an abstract syntax tree cout << "Creating Abstract Syntax Tree... "; start_clock(); expression_t ex(postfix); end_clock(); ex.mark_clause_numbers(); ex.create_clause_table(); // Display expression cout << ex << endl; // Decompose expression into clauses and display each: for (int a=0; a < ex.clause_table->num_clauses; a++) { cout << "Clause: " << a << ": " << *ex.clause_table->clauses[a] << endl; } // should be able to print a clause table! derivative_table_t dt; dt.create(ex); cout << dt; vector_t v; v.set(1.0, 0.0, 0.0); cout << "Normal at " << v << " is " << dt.evaluate_normal(v, 0) << endl; v.set(0.0, 1.0, 0.0); cout << "Normal at " << v << " is " << dt.evaluate_normal(v, 0) << endl; v.set(0.5, 0.5, 0.5); cout << "Normal at " << v << " is " << dt.evaluate_normal(v, 0) << endl; // Construct an octree evaluation context object from the // expression and evaluation interval cout << "Constructing Octree... "; start_clock(); octree_t octree(ex, si); end_clock(); // Evaluate and prune the expression on the orctree to // a specified recursion depth cout << "Evaluating Expression on Octree... "; start_clock(); octree.eval(6); end_clock(); //TESTING OF TOOL_PATH generation /*array_2d results(60,60); octree.eval_on_grid(si, results.width, results.height, 1, &results[0]); cout << "Computing tool6path..." << endl; tool_path test = compute_tool_path(results, 1.5, .75); cout << test << endl; cout << "Tool path computed." << endl;*/ /* // Pull out the stored expression value in the octree region // containing a specified point (True, False, or Mixed) //x = 0.1f; y = 0.0f; z = 0.0f; result = octree.get_value_at_point(x, y, z); cout << "Result of get_value at (" << x << "," << y << "," << z << ") is " << result << "\n"; // Force evaluation of the expression at a specific point, // using the pruned subexpression stored inside that point's // octree region int val = octree.eval_at_point(0.1f, 0.0f, 0.0f); cout << "Result of eval_at_point at (" << x << "," << y << "," << z << ") is " << val << "\n"; // Evaluate the expression on a rectangular grid. // (This is more efficient than the single point evaluator // for large grids.) //char * results = new char[1600]; //octree.eval_on_grid(si, 40, 40, 1, results); // Show the results of the grid evaluation //int index = 0, i, j; //for (j=0; j<40; j++) { // for (i=0; i<40;i++) { // cout << (int)results[index] << " "; // index++; // } // cout << "\n"; //} // Run eval at point over grid to test float xp, yp; for(xp = -1;xp < 1; xp+=0.05) { for (yp = -1;yp<1; yp+=0.05) { cout << octree.eval_at_point(xp, yp, 0) << " "; } cout << "\n"; } */ cout << "Triangulating Object... "; start_clock(); trimesh_t trimesh; trimesh.populate(&octree, &si, 150, 150, 150); end_clock(); cout << "Refining Triangulation... "; start_clock(); trimesh.refine(); end_clock(); cout << "Marking triangles needing further refinement... "; start_clock(); trimesh.mark_triangles_spanning_surfaces(); end_clock(); cout << "moving verticies toward corners and edges..."; start_clock(); trimesh.move_veticies_onto_edges_and_corners_using_normals(); end_clock(); cout << "recalculating normals..."; start_clock(); trimesh.recalculate_normals(); end_clock(); cout << "writing STL file...\n"; trimesh.write_stl("teapot.stl"); //cout << trimesh; #ifdef WIN32 cout << "showing graphics...\n"; show_graphics_window(hInstance, trimesh); #endif return(0); }