Exemple #1
0
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;
}      
Exemple #3
0
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;
}