diff --git a/Common/GmshSocket.h b/Common/GmshSocket.h index 2ee9cd6d815c68ad79d33c25eea93ca104c2c07c..b20ea1b44ebe4a03b40d2836f0ef54e3e5fd958b 100644 --- a/Common/GmshSocket.h +++ b/Common/GmshSocket.h @@ -330,9 +330,9 @@ class GmshServer : public GmshSocket{ virtual int NonBlockingWait(double waitint, double timeout, int socket=-1) = 0; // start the client by launching "exe args" (args is supposed to contain // '%s' where the socket name should appear) - int Start(const char *exe, const char *args, const char *sockname, double timeout) + int Start(const std::string &exe, const std::string &args, const std::string &sockname, + double timeout) { - if(!sockname) throw "Invalid (null) socket name"; _sockname = sockname; int tmpsock; if(strstr(_sockname.c_str(), "/") || strstr(_sockname.c_str(), "\\") || @@ -395,9 +395,9 @@ class GmshServer : public GmshSocket{ } } - if((exe && strlen(exe)) || (args && strlen(args))){ + if(exe.size() || args.size()){ char s[1024]; - sprintf(s, args, _sockname.c_str()); + sprintf(s, args.c_str(), _sockname.c_str()); NonBlockingSystemCall(exe, s); // starts the solver } else{ diff --git a/Common/gmshLocalNetworkClient.cpp b/Common/gmshLocalNetworkClient.cpp index 6e918c4451d88bf2502bd588f2dd5c1a44d92c5e..1bf5bd5d060e8cccaf9d27eb3a691b4d1de5d5b7 100644 --- a/Common/gmshLocalNetworkClient.cpp +++ b/Common/gmshLocalNetworkClient.cpp @@ -132,8 +132,7 @@ class onelabGmshServer : public GmshServer{ int sock; try{ - sock = Start(exe.c_str(), args.c_str(), sockname.c_str(), - CTX::instance()->solver.timeout); + sock = Start(exe, args, sockname, CTX::instance()->solver.timeout); } catch(const char *err){ Msg::Error("Abnormal server termination (%s on socket %s)", err, diff --git a/Geo/GModelIO_MSH.cpp b/Geo/GModelIO_MSH.cpp index 9b6ed85290395d99fa45d1ae64cbed7eef083cc1..832ce58c158ced2bb479df2cbdc0ce75021afd2e 100644 --- a/Geo/GModelIO_MSH.cpp +++ b/Geo/GModelIO_MSH.cpp @@ -180,7 +180,7 @@ int GModel::readMSH(const std::string &name) // $Nodes section else if(!strncmp(&str[1], "Nodes", 5)) { - if(!fgets(str, sizeof(str), fp)){ return 0; fclose(fp); } + if(!fgets(str, sizeof(str), fp)){ fclose(fp); return 0; } int numVertices; if(sscanf(str, "%d", &numVertices) != 1){ fclose(fp); return 0; } Msg::Info("%d vertices", numVertices); diff --git a/Geo/SOrientedBoundingBox.cpp b/Geo/SOrientedBoundingBox.cpp index 0a4af41e37ee66626f52cf43468b87d497aecebd..ee651f840f23b8e08cc2ab74fe0c9ac62ac36c43 100644 --- a/Geo/SOrientedBoundingBox.cpp +++ b/Geo/SOrientedBoundingBox.cpp @@ -42,32 +42,8 @@ SOrientedBoundingRectangle::~SOrientedBoundingRectangle() delete axisY; } -SOrientedBoundingBox::SOrientedBoundingBox() -{ - center = SVector3(); - size = SVector3(); - axisX = SVector3(); - axisY = SVector3(); - axisZ = SVector3(); -} - -SOrientedBoundingBox::SOrientedBoundingBox(SVector3 ¢er_, - double sizeX, - double sizeY, - double sizeZ, - const SVector3 &axisX_, - const SVector3 &axisY_, - const SVector3 &axisZ_) +void SOrientedBoundingBox::fillp() { - center = center_; - size = SVector3(sizeX, sizeY, sizeZ); - axisX = axisX_; - axisX.normalize(); - axisY = axisY_; - axisY.normalize(); - axisZ = axisZ_; - axisZ.normalize(); - double dx = 0.5 * size[0]; double dy = 0.5 * size[1]; double dz = 0.5 * size[2]; @@ -105,6 +81,35 @@ SOrientedBoundingBox::SOrientedBoundingBox(SVector3 ¢er_, p8z = center[2] + (axisX[2]*dx) + (axisY[2]*dy) + (axisZ[2]*dz); } +SOrientedBoundingBox::SOrientedBoundingBox() +{ + center = SVector3(); + size = SVector3(); + axisX = SVector3(); + axisY = SVector3(); + axisZ = SVector3(); + fillp(); +} + +SOrientedBoundingBox::SOrientedBoundingBox(SVector3 ¢er_, + double sizeX, + double sizeY, + double sizeZ, + const SVector3 &axisX_, + const SVector3 &axisY_, + const SVector3 &axisZ_) +{ + center = center_; + size = SVector3(sizeX, sizeY, sizeZ); + axisX = axisX_; + axisX.normalize(); + axisY = axisY_; + axisY.normalize(); + axisZ = axisZ_; + axisZ.normalize(); + fillp(); +} + SOrientedBoundingBox::SOrientedBoundingBox(SOrientedBoundingBox* other) { size = other->getSize(); @@ -112,43 +117,7 @@ SOrientedBoundingBox::SOrientedBoundingBox(SOrientedBoundingBox* other) axisY = other->getAxis(1); axisZ = other->getAxis(2); center = other->getCenter(); - - double dx = 0.5*size[0]; - double dy = 0.5*size[1]; - double dz = 0.5*size[2]; - - p1x = center[0] - (axisX[0]*dx) - (axisY[0]*dy) - (axisZ[0]*dz); - p1y = center[1] - (axisX[1]*dx) - (axisY[1]*dy) - (axisZ[1]*dz); - p1z = center[2] - (axisX[2]*dx) - (axisY[2]*dy) - (axisZ[2]*dz); - - p2x = center[0] + (axisX[0]*dx) - (axisY[0]*dy) - (axisZ[0]*dz); - p2y = center[1] + (axisX[1]*dx) - (axisY[1]*dy) - (axisZ[1]*dz); - p2z = center[2] + (axisX[2]*dx) - (axisY[2]*dy) - (axisZ[2]*dz); - - p3x = center[0] - (axisX[0]*dx) + (axisY[0]*dy) - (axisZ[0]*dz); - p3y = center[1] - (axisX[1]*dx) + (axisY[1]*dy) - (axisZ[1]*dz); - p3z = center[2] - (axisX[2]*dx) + (axisY[2]*dy) - (axisZ[2]*dz); - - p4x = center[0] + (axisX[0]*dx) + (axisY[0]*dy) - (axisZ[0]*dz); - p4y = center[1] + (axisX[1]*dx) + (axisY[1]*dy) - (axisZ[1]*dz); - p4z = center[2] + (axisX[2]*dx) + (axisY[2]*dy) - (axisZ[2]*dz); - - p5x = center[0] - (axisX[0]*dx) - (axisY[0]*dy) + (axisZ[0]*dz); - p5y = center[1] - (axisX[1]*dx) - (axisY[1]*dy) + (axisZ[1]*dz); - p5z = center[2] - (axisX[2]*dx) - (axisY[2]*dy) + (axisZ[2]*dz); - - p6x = center[0] + (axisX[0]*dx) - (axisY[0]*dy) + (axisZ[0]*dz); - p6y = center[1] + (axisX[1]*dx) - (axisY[1]*dy) + (axisZ[1]*dz); - p6z = center[2] + (axisX[2]*dx) - (axisY[2]*dy) + (axisZ[2]*dz); - - p7x = center[0] - (axisX[0]*dx) + (axisY[0]*dy) + (axisZ[0]*dz); - p7y = center[1] - (axisX[1]*dx) + (axisY[1]*dy) + (axisZ[1]*dz); - p7z = center[2] - (axisX[2]*dx) + (axisY[2]*dy) + (axisZ[2]*dz); - - p8x = center[0] + (axisX[0]*dx) + (axisY[0]*dy) + (axisZ[0]*dz); - p8y = center[1] + (axisX[1]*dx) + (axisY[1]*dy) + (axisZ[1]*dz); - p8z = center[2] + (axisX[2]*dx) + (axisY[2]*dy) + (axisZ[2]*dz); - + fillp(); } double SOrientedBoundingBox::getMaxSize() @@ -165,9 +134,9 @@ SVector3 SOrientedBoundingBox::getAxis(int axis) { SVector3 ret; switch (axis) { - case 0: ret=axisX; break; - case 1: ret=axisY; break; - case 2: ret=axisZ; break; + case 0: ret = axisX; break; + case 1: ret = axisY; break; + case 2: ret = axisZ; break; } return ret; } diff --git a/Geo/SOrientedBoundingBox.h b/Geo/SOrientedBoundingBox.h index 767dc57fa2b6926080077f8b2cf2ae11b7da034b..884b6905c89c302db7b35964f5eae12d99a4b16f 100644 --- a/Geo/SOrientedBoundingBox.h +++ b/Geo/SOrientedBoundingBox.h @@ -34,6 +34,7 @@ class SOrientedBoundingBox { SVector3 axisX; SVector3 axisY; SVector3 axisZ; + void fillp(); public: double p1x, p1y, p1z; @@ -50,8 +51,8 @@ class SOrientedBoundingBox { // axis system of the box. The axis form the local coordinates // system of the box. All these data are given in the local // coordinates system of the object. - SOrientedBoundingBox(SVector3& center, double sizeX, double sizeY, - double sizeZ, const SVector3 &axisX, + SOrientedBoundingBox(SVector3& center, double sizeX, double sizeY, + double sizeZ, const SVector3 &axisX, const SVector3 &axisY, const SVector3 &axisZ); SOrientedBoundingBox(SOrientedBoundingBox* other); @@ -68,11 +69,11 @@ class SOrientedBoundingBox { // valid values for axis are 0 (X-axis), 1 (Y-axis) or 2 (Z-axis) SVector3 getAxis(int axis); - + static SOrientedBoundingBox* buildOBB(std::vector<SPoint3> vertices); - + bool intersects(SOrientedBoundingBox &obb); - + static double compare(SOrientedBoundingBox &obb1, SOrientedBoundingBox &obb2); };