Esempio n. 1
0
void Hexa::split(initializer_list<int> n) {
  int n1 = 1; int n2 = 1; int n3 = 1; 
  if (n.size() >= 3) {n1 = *(n.begin()); n2 = *(n.begin()+1); n3 = *(n.begin()+2); }
  else if (n.size() == 2) {n1 = *(n.begin()); n2 = *(n.begin()+1);}
  else if (n.size() == 1) {n1 = *(n.begin());}
  else { return; }

  Vec3 dx1, dx2, dx3, dx4, dy1, dy2, dz, dx, dy, dxa, dxb; 
  vector<int_8 > kk, ll(8,-1);
  for (auto v :node) {
    kk.push_back(v->id); 
  }

  dx1 = edge(0)/double(n1); 
  dx2 = edge(2)/double(n1); 
  dx3 = edge(4)/double(n1); 
  dx4 = edge(6)/double(n1); 
  dy1 = edge(3)/double(n2); 
  dy2 = edge(7)/double(n2); 
  dz  = edge(8)/double(n3); 
  
  int_8 ind[n1+1][n2+1][n3+1];
  for (auto k = 0; k < n3+1 ; ++k) {
    for (auto j = 0; j < n2+1 ; ++j) {
      for (auto i = 0; i < n1+1 ; ++i) {
	ind[i][j][k] = -1; 
	if (i == 0 && j == 0 && k == 0) {
	  ind[i][j][k] = kk[0]; 
	} else if (i == 0 && j == n2 && k == 0) {
	  ind[i][j][k] = kk[3]; 
	} else if (i == n1 && j == n2 && k == 0) {
	  ind[i][j][k] = kk[2]; 
	} else if (i == n1 && j == 0 && k == 0) {
	  ind[i][j][k] = kk[1];
	} else if (i == 0 && j == 0 && k == n3) {
	  ind[i][j][k] = kk[4]; 
	} else if (i == 0 && j == n2 && k == n3) {
	  ind[i][j][k] = kk[7]; 
	} else if (i == n1 && j == n2 && k == n3) {
	  ind[i][j][k] = kk[6]; 
	} else if (i == n1 && j == 0 && k == n3) {
	  ind[i][j][k] = kk[5];  
	} else {
	  dy   = dy1 + (dy2 - dy1)*double(k)/double(n3); 
	  dxa  = dx1 + (dx3 - dx1)*double(k)/double(n3); 
	  dxb  = dx2 + (dx4 - dx2)*double(k)/double(n3); 
	  dx = dxa + (dxb - dxa)*double(j)/double(n2); 
	  grid->addVertex(*(node.at(0)) + double(i)*dx + double(j)*dy +double(k)*dz);
	  (*grid->vbegin())->grid = grid; 
	  ind[i][j][k] = (grid->listVertex.size())-1; 
	}
      }
    }
  }

  for (auto k = 0; k < n3; ++k) {
    for (auto j = 0; j < n2; ++j) {
      for (auto i = 0; i < n1; ++i) {
	ll[0] = ind[i][j][k]; 
	ll[1] = ind[i+1][j][k]; 
	ll[2] = ind[i+1][j+1][k]; 
	ll[3] = ind[i][j+1][k]; 
	ll[4] = ind[i][j][k+1]; 
	ll[5] = ind[i+1][j][k+1]; 
	ll[6] = ind[i+1][j+1][k+1]; 
	ll[7] = ind[i][j+1][k+1]; 
	if (i == 0 && j == 0 && k == 0) {
	  int_4 icnt = 0; 
	  for (auto v = node.begin(); v !=node.end(); ++v) {
	    (*v) = grid->listVertex.at(ll[icnt]); ++icnt; 
	  }
	  initNodeList(*(grid->listCell.begin() + id));
	} else {	
	  grid->addCell(ll);
	}
      }
    }
  }
  
}
Esempio n. 2
0
nodeList* calculateConnectedNodes(nodeInfo node) {
    nodeList *nodes, *currentNode;
    int currentNodeIsResolved = 0;
    const int meshSize = 3;
    
    currentNode = nodes = initNodeList();
    
    if (node.id == INT_MAX) {
        //This node is the printing server.
        //Only connect it to node zero.
        currentNode->node->id = 0;
        currentNodeIsResolved = 1;
    } else {
        if (node.id == 0) {
            //This is node zero. Connect it to printing server.
            currentNode->node->id = INT_MAX;
            currentNodeIsResolved = 1;
        }
        if (node.id%meshSize != meshSize - 1) {
            //This node is not on the right border. Connect it to it's neighbor on the right.
            if (currentNodeIsResolved) {
                currentNode->next = initNodeList();
                currentNode = currentNode->next;
            } else {
                currentNodeIsResolved = 1;
            }
            currentNode->node->id = node.id + 1;
        }
        if (node.id%meshSize != 0) {
            //This node is not on the left border. Connect it to it's neighbor on the left.
            if (currentNodeIsResolved) {
                currentNode->next = initNodeList();
                currentNode = currentNode->next;
            } else {
                currentNodeIsResolved = 1;
            }
            currentNode->node->id = node.id - 1;
        }
        if (node.id+meshSize < meshSize*meshSize) {
            //This node has a neighbor below him. Connect the neighbor!
            if (currentNodeIsResolved) {
                currentNode->next = initNodeList();
                currentNode = currentNode->next;
            } else {
                currentNodeIsResolved = 1;
            }
            currentNode->node->id = node.id + meshSize;
        }
        if (node.id-meshSize >= 0) {
            //This node has a neighbor above him. Connect the neighbor!
            if (currentNodeIsResolved) {
                currentNode->next = initNodeList();
                currentNode = currentNode->next;
            } else {
                currentNodeIsResolved = 1;
            }
            currentNode->node->id = node.id - meshSize;
        }
    }
    
    return nodes;
}
Esempio n. 3
0
void Map::init() {
	initNodeList();
}
Esempio n. 4
0
void RocNetDlg::initValues() {
  iONode rnini = wDigInt.getrocnet(m_Props);

  // General
  m_IID->SetValue( wxString( wDigInt.getiid( m_Props ), wxConvUTF8 ) );
  m_RNID->SetValue( wRocNet.getid( rnini ) );
  m_Device->SetValue( wxString( wDigInt.getdevice( m_Props ), wxConvUTF8 ) );
  if( m_Devices != NULL ) {
    iOStrTok tok = StrTokOp.inst(m_Devices, ',');
    while( StrTokOp.hasMoreTokens(tok) ) {
      m_Device->Append( wxString( StrTokOp.nextToken(tok), wxConvUTF8 ) );
    }
    StrTokOp.base.del(tok);
  }

  if( wDigInt.getbps( m_Props ) == 9600 )
    m_BPS->SetSelection(0);
  else if( wDigInt.getbps( m_Props ) == 38400 )
    m_BPS->SetSelection(2);
  else if( wDigInt.getbps( m_Props ) == 57600 )
    m_BPS->SetSelection(3);
  else if( wDigInt.getbps( m_Props ) == 115200 )
    m_BPS->SetSelection(4);
  else if( wDigInt.getbps( m_Props ) == 125000 )
    m_BPS->SetSelection(5);
  else
    m_BPS->SetSelection(1); // default 19200

  if( StrOp.equals( wDigInt.sublib_tcp, wDigInt.getsublib(m_Props) )) {
    m_Sublib->SetSelection(2);
    m_BPS->Enable(false);
    m_Device->Enable(false);
    m_Address->Enable(true);
    m_Port->Enable(true);
  }
  else  if( StrOp.equals( wDigInt.sublib_serial, wDigInt.getsublib(m_Props) )) {
    // Serial
    m_Sublib->SetSelection(1);
    m_BPS->Enable(true);
    m_Device->Enable(true);
    m_Address->Enable(false);
    m_Port->Enable(false);
  }
  else {
    m_Sublib->SetSelection(0);
    m_BPS->Enable(false);
    m_Device->Enable(false);
    m_Address->Enable(true);
    m_Port->Enable(true);
  }

  m_CRC->SetValue( wRocNet.iscrc(rnini) ? true:false);
  m_Sack->SetValue( wRocNet.issack(rnini) ? true:false);
  m_ShutdownAll->SetValue( wRocNet.isshutdownall(rnini) ? true:false);
  m_Watchdog->SetValue( wRocNet.iswd(rnini) ? true:false);
  m_Address->SetValue( wxString( wRocNet.getaddr( rnini ), wxConvUTF8 ) );
  m_Port->SetValue( wRocNet.getport( rnini ) );
  m_LocoBus->SetValue( wRocNet.getlcbus( rnini ) );
  m_WatchNodes->SetValue( wRocNet.iswatchnodes(rnini) ? true:false);

  initNodeList();
}