void Entity::CalculateNumerical(bool forExport) { if(IsPoint()) actPoint = PointGetNum(); if(IsNormal()) actNormal = NormalGetNum(); if(type == DISTANCE || type == DISTANCE_N_COPY) { actDistance = DistanceGetNum(); } if(IsFace()) { actPoint = FaceGetPointNum(); Vector n = FaceGetNormalNum(); actNormal = Quaternion::From(0, n.x, n.y, n.z); } if(forExport) { // Visibility in copied import entities follows source file actVisible = IsVisible(); } else { // Copied entities within a file are always visible actVisible = true; } }
bool TParser::GetToken(void) { *curToken = '\0'; while(expr[pos]==' ') pos++; if(expr[pos]=='\0') { curToken[0] = '\0'; typToken = PARSER_END; return true; } else if(IsDelim()) { curToken[0] = expr[pos++]; curToken[1] = '\0'; switch(*curToken) { case '+': typToken = PARSER_PLUS; return true; case '-': typToken = PARSER_MINUS; return true; case '*': typToken = PARSER_MULTIPLY; return true; case '/': typToken = PARSER_DIVIDE; return true; case '%': typToken = PARSER_PERCENT; return true; case '^': typToken = PARSER_POWER; return true; case '[': case '(': typToken = PARSER_L_BRACKET; return true; case ']': case ')': typToken = PARSER_R_BRACKET; return true; } } else if(IsLetter()) { int i=0; while(IsLetter()) curToken[i++] = expr[pos++]; curToken[i] = '\0'; int len = strlen(curToken); for(i=0; i<len; i++) if(curToken[i]>='A' && curToken[i]<='Z') curToken[i] += 'a' - 'A'; if(!strcmp(curToken, "x")) { typToken = PARSER_X; return true; } else if(!strcmp(curToken, "pi")) { typToken = PARSER_PI; return true; } else if(!strcmp(curToken, "e")) { typToken = PARSER_E; return true; } else if(!strcmp(curToken, "sin")) { typToken = PARSER_SIN; return true; } else if(!strcmp(curToken, "cos")) { typToken = PARSER_COS; return true; } else if(!strcmp(curToken, "tg")) { typToken = PARSER_TG; return true; } else if(!strcmp(curToken, "ctg")) { typToken = PARSER_CTG; return true; } else if(!strcmp(curToken, "arcsin")) { typToken = PARSER_ARCSIN; return true; } else if(!strcmp(curToken, "arccos")) { typToken = PARSER_ARCCOS; return true; } else if(!strcmp(curToken, "arctg")) { typToken = PARSER_ARCTG; return true; } else if(!strcmp(curToken, "arcctg")) { typToken = PARSER_ARCCTG; return true; } else if(!strcmp(curToken, "sh")) { typToken = PARSER_SH; return true; } else if(!strcmp(curToken, "ch")) { typToken = PARSER_CH; return true; } else if(!strcmp(curToken, "th")) { typToken = PARSER_TH; return true; } else if(!strcmp(curToken, "cth")) { typToken = PARSER_CTH; return true; } else if(!strcmp(curToken, "exp")) { typToken = PARSER_EXP; return true; } else if(!strcmp(curToken, "lg")) { typToken = PARSER_LG; return true; } else if(!strcmp(curToken, "ln")) { typToken = PARSER_LN; return true; } else if(!strcmp(curToken, "sqrt")) { typToken = PARSER_SQRT; return true; } else SendError(0); } else if(IsDigit() || IsPoint()) { int i=0; while(IsDigit()) curToken[i++] = expr[pos++]; if(IsPoint()) { curToken[i++] = expr[pos++]; while(IsDigit()) curToken[i++] = expr[pos++]; } curToken[i] = '\0'; typToken = PARSER_NUMBER; return true; } else { curToken[0] = expr[pos++]; curToken[1] = '\0'; SendError(1); } return false; }
const RNBoolean R3Circle:: IsLinear(void) const { // A circle only lies within a line if it is a point return IsPoint(); }
bool TParser::GetToken() { curToken = _T(""); if(pos >= expr.GetLength()) { curToken = _T(""); typToken = PARSER_END; return true; } while(IsSpace()) pos++; if(IsDelim()) { curToken = expr[pos++]; switch(curToken[0]) { case _T('+'): typToken = PARSER_PLUS; return true; case _T('-'): typToken = PARSER_MINUS; return true; case _T('*'): typToken = PARSER_MULTIPLY; return true; case _T('/'): typToken = PARSER_DIVIDE; return true; case _T('%'): typToken = PARSER_PERCENT; return true; case _T('^'): typToken = PARSER_POWER; return true; case _T('['): case _T('('): typToken = PARSER_L_BRACKET; return true; case _T(']'): case _T(')'): typToken = PARSER_R_BRACKET; return true; } } else if(IsComma()) { curToken = expr[pos++]; typToken = PARSER_COMMA; return true; } else if(IsLetter()) { int i=0; curToken = _T(""); while(IsLetter() || IsDigit()) curToken += expr[pos++]; curToken.MakeLower(); if(curToken == _T("pi")) { typToken = PARSER_PI; return true; } else if(curToken == _T("e")) { typToken = PARSER_E; return true; } else if(curToken == _T("sin")) { typToken = PARSER_SIN; return true; } else if(curToken == _T("cos")) { typToken = PARSER_COS; return true; } else if(curToken == _T("tg")) { typToken = PARSER_TG; return true; } else if(curToken == _T("ctg")) { typToken = PARSER_CTG; return true; } else if(curToken == _T("arcsin")) { typToken = PARSER_ARCSIN; return true; } else if(curToken == _T("arccos")) { typToken = PARSER_ARCCOS; return true; } else if(curToken == _T("arctg")) { typToken = PARSER_ARCTG; return true; } else if(curToken == _T("arcctg")) { typToken = PARSER_ARCCTG; return true; } else if(curToken == _T("sh")) { typToken = PARSER_SH; return true; } else if(curToken == _T("ch")) { typToken = PARSER_CH; return true; } else if(curToken == _T("th")) { typToken = PARSER_TH; return true; } else if(curToken == _T("cth")) { typToken = PARSER_CTH; return true; } else if(curToken == _T("exp")) { typToken = PARSER_EXP; return true; } else if(curToken == _T("lg")) { typToken = PARSER_LG; return true; } else if(curToken == _T("ln")) { typToken = PARSER_LN; return true; } else if(curToken == _T("sqrt")) { typToken = PARSER_SQRT; return true; } else if(curToken == _T("abs")) { typToken = PARSER_ABS; return true; } else if(curToken == _T("min")) { typToken = PARSER_MIN; return true; } else if(curToken == _T("max")) { typToken = PARSER_MAX; return true; } else if(curToken == _T("atan2")) { typToken = PARSER_ATAN2; return true; } else if(curToken == _T("if")) { typToken = PARSER_IF; return true; } else if(curToken == _T("left")) { typToken = PARSER_GUIDE; return true; } else if(curToken == _T("right")) { typToken = PARSER_GUIDE; return true; } else if(curToken == _T("top")) { typToken = PARSER_GUIDE; return true; } else if(curToken == _T("bottom")) { typToken = PARSER_GUIDE; return true; } else if(curToken == _T("width")) { typToken = PARSER_GUIDE; return true; } else if(curToken == _T("height")) { typToken = PARSER_GUIDE; return true; } else SendError(0); } else if(IsAdjust()) { int i=0; curToken = _T(""); while((!IsSpace())&&(!IsDelim())) curToken += expr[pos++]; typToken = PARSER_ADJUST; return true; } else if(IsGuide()) { int i=0; curToken = _T(""); while((!IsSpace())&&(!IsDelim())) curToken += expr[pos++]; typToken = PARSER_GUIDE; return true; } else if(IsDigit() || IsPoint()) { int i=0; curToken = _T(""); while(IsDigit()) curToken += expr[pos++]; if(IsPoint()) { curToken += expr[pos++]; while(IsDigit()) curToken += expr[pos++]; } typToken = PARSER_NUMBER; return true; } else { curToken = expr[pos++]; SendError(1); } return false; }