void ArrayMesh::vertex_set_coordinates( VertexHandle vert,
                                          const Vector3D& coordinates,
                                           MsqError &err )
{
  size_t i = (size_t)vert;
  assert( i < vertexCount+oneBasedArrays );
  if (mDimension == 3) 
    coordinates.get_coordinates(coordArray+3*i);
  else if (mDimension == 2) {
    coordArray[2*i] = coordinates[0];
    coordArray[2*i+1] = coordinates[1];
  }
  else
    MSQ_SETERR(err)(MsqError::INVALID_STATE);
}
Example #2
0
void CircleDomain::position_from_length( const double from_here[3],
                                         double length,
                                         double result_point[3],
                                         MsqError& )
{
  Vector3D b = Vector3D(from_here) - mGeom.center();
  Vector3D vy = mGeom.normal() * b;
  Vector3D vx = vy * mGeom.normal();
  double angle = length / mGeom.radius();
  double x = std::cos( angle );
  double y = std::sin( angle );
  vy *= y/vy.length();
  vx *= x/vx.length();
  Vector3D result = vx + vy;
  result *= mGeom.radius();
  result += mGeom.center();
  result.get_coordinates( result_point );
}