Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
66a8685816
77 files changed
+2112
-1117
No files matched your search
@@ -85,15 +85,60 @@ IF(MSVC)
|
|||||||
ADD_DEFINITIONS(-D_WIN64)
|
ADD_DEFINITIONS(-D_WIN64)
|
||||||
ELSE()
|
ELSE()
|
||||||
OPTION(USE_MSVC_SSE "Use MSVC /arch:sse option" ON)
|
OPTION(USE_MSVC_SSE "Use MSVC /arch:sse option" ON)
|
||||||
|
option(USE_MSVC_SSE2 "Compile your program with SSE2 instructions" ON)
|
||||||
|
|
||||||
IF (USE_MSVC_SSE)
|
IF (USE_MSVC_SSE)
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
IF (USE_MSVC_SSE2)
|
||||||
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
option(USE_MSVC_AVX "Compile your program with AVX instructions" OFF)
|
||||||
|
|
||||||
|
IF(USE_MSVC_AVX)
|
||||||
|
add_definitions(/arch:AVX)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
OPTION(USE_MSVC_FAST_FLOATINGPOINT "Use MSVC /fp:fast option" ON)
|
OPTION(USE_MSVC_FAST_FLOATINGPOINT "Use MSVC /fp:fast option" ON)
|
||||||
IF (USE_MSVC_FAST_FLOATINGPOINT)
|
IF (USE_MSVC_FAST_FLOATINGPOINT)
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
OPTION(USE_MSVC_STRING_POOLING "Use MSVC /GF string pooling option" ON)
|
||||||
|
IF (USE_MSVC_STRING_POOLING)
|
||||||
|
SET(CMAKE_C_FLAGS "/GF ${CMAKE_C_FLAGS}")
|
||||||
|
SET(CMAKE_CXX_FLAGS "/GF ${CMAKE_CXX_FLAGS}")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
OPTION(USE_MSVC_FUNCTION_LEVEL_LINKING "Use MSVC /Gy function level linking option" ON)
|
||||||
|
IF(USE_MSVC_FUNCTION_LEVEL_LINKING)
|
||||||
|
SET(CMAKE_C_FLAGS "/Gy ${CMAKE_C_FLAGS}")
|
||||||
|
SET(CMAKE_CXX_FLAGS "/Gy ${CMAKE_CXX_FLAGS}")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:REF")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /OPT:REF")
|
||||||
|
ENDIF(USE_MSVC_FUNCTION_LEVEL_LINKING)
|
||||||
|
|
||||||
|
OPTION(USE_MSVC_EXEPTIONS "Use MSVC C++ exceptions option" OFF)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
OPTION(USE_MSVC_COMDAT_FOLDING "Use MSVC /OPT:ICF COMDAT folding option" ON)
|
||||||
|
|
||||||
|
IF(USE_MSVC_COMDAT_FOLDING)
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:ICF")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /OPT:ICF")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
OPTION(USE_MSVC_DISABLE_RTTI "Use MSVC /GR- disabled RTTI flags option" ON)
|
||||||
|
IF(USE_MSVC_DISABLE_RTTI)
|
||||||
|
STRING(REGEX REPLACE "/GR" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Disable RTTI
|
||||||
|
SET(CMAKE_C_FLAGS "/GR- ${CMAKE_C_FLAGS}")
|
||||||
|
SET(CMAKE_CXX_FLAGS "/GR- ${CMAKE_CXX_FLAGS}")
|
||||||
|
ENDIF(USE_MSVC_DISABLE_RTTI)
|
||||||
|
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244 /wd4267")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244 /wd4267")
|
||||||
ENDIF(MSVC)
|
ENDIF(MSVC)
|
||||||
|
|
||||||
|
|||||||
@@ -1368,6 +1368,10 @@ typedef struct bInvalidHandle {
|
|||||||
double m_jointTorque[6];
|
double m_jointTorque[6];
|
||||||
double m_jointDamping;
|
double m_jointDamping;
|
||||||
double m_jointFriction;
|
double m_jointFriction;
|
||||||
|
double m_jointLowerLimit;
|
||||||
|
double m_jointUpperLimit;
|
||||||
|
double m_jointMaxForce;
|
||||||
|
double m_jointMaxVelocity;
|
||||||
char *m_linkName;
|
char *m_linkName;
|
||||||
char *m_jointName;
|
char *m_jointName;
|
||||||
btCollisionObjectDoubleData *m_linkCollider;
|
btCollisionObjectDoubleData *m_linkCollider;
|
||||||
@@ -1395,6 +1399,10 @@ typedef struct bInvalidHandle {
|
|||||||
int m_posVarCount;
|
int m_posVarCount;
|
||||||
float m_jointDamping;
|
float m_jointDamping;
|
||||||
float m_jointFriction;
|
float m_jointFriction;
|
||||||
|
float m_jointLowerLimit;
|
||||||
|
float m_jointUpperLimit;
|
||||||
|
float m_jointMaxForce;
|
||||||
|
float m_jointMaxVelocity;
|
||||||
char *m_linkName;
|
char *m_linkName;
|
||||||
char *m_jointName;
|
char *m_jointName;
|
||||||
btCollisionObjectFloatData *m_linkCollider;
|
btCollisionObjectFloatData *m_linkCollider;
|
||||||
|
|||||||
@@ -20,12 +20,13 @@
|
|||||||
#include "bDNA.h"
|
#include "bDNA.h"
|
||||||
#include "bBlenderFile.h"
|
#include "bBlenderFile.h"
|
||||||
#include "btBulletFile.h"
|
#include "btBulletFile.h"
|
||||||
|
#include "LinearMath/btSerializer.h"
|
||||||
#include "bCommon.h"
|
#include "bCommon.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
bool isBulletFile = false;
|
bool isBulletFile = true;
|
||||||
|
|
||||||
using namespace bParse;
|
using namespace bParse;
|
||||||
typedef std::string bString;
|
typedef std::string bString;
|
||||||
@@ -216,10 +217,12 @@ int main(int argc,char** argv)
|
|||||||
using namespace bParse;
|
using namespace bParse;
|
||||||
dump = fopen("dump.py", "w");
|
dump = fopen("dump.py", "w");
|
||||||
|
|
||||||
|
|
||||||
if (!dump) return 0;
|
if (!dump) return 0;
|
||||||
fprintf(dump, "%s\n", data);
|
fprintf(dump, "%s\n", data);
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
char* filename = "../../../../data/r2d2_multibody.bullet";
|
char* filename = "../../../../data/r2d2_multibody.bullet";
|
||||||
|
|
||||||
if (argc==2)
|
if (argc==2)
|
||||||
@@ -269,9 +272,12 @@ int main(int argc,char** argv)
|
|||||||
bBlenderFile f(memBuf,len);
|
bBlenderFile f(memBuf,len);
|
||||||
swap = (f.getFlags() & FD_ENDIAN_SWAP)!=0;
|
swap = (f.getFlags() & FD_ENDIAN_SWAP)!=0;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
isBulletFile = true;
|
||||||
|
bool swap = false;
|
||||||
|
char* memBuf = sBulletDNAstr;
|
||||||
|
int len = sBulletDNAlen;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
char *blenderData = memBuf;
|
char *blenderData = memBuf;
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
|
import sys
|
||||||
|
sys.path.append(".")
|
||||||
import dump
|
import dump
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
header = """/* Copyright (C) 2011 Erwin Coumans & Charlie C
|
header = """/* Copyright (C) 2011 Erwin Coumans & Charlie C
|
||||||
*
|
*
|
||||||
* This software is provided 'as-is', without any express or implied
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
|||||||
@@ -23,15 +23,29 @@ SET (INC_FILES
|
|||||||
SET(SRC makesdna.cpp)
|
SET(SRC makesdna.cpp)
|
||||||
ADD_EXECUTABLE(makesdna ${SRC} ${INC_FILES})
|
ADD_EXECUTABLE(makesdna ${SRC} ${INC_FILES})
|
||||||
|
|
||||||
|
IF (CMAKE_CL_64)
|
||||||
|
# Output BulletDNA.c
|
||||||
|
ADD_CUSTOM_COMMAND(
|
||||||
|
OUTPUT ${BULLET_PHYSICS_SOURCE_DIR}/src/LinearMath/btSerializer64.cpp
|
||||||
|
COMMAND ${CMAKE_CFG_INTDIR}/makesdna ${BULLET_PHYSICS_SOURCE_DIR}/src/LinearMath/btSerializer64.cpp ${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/CommonSerialize/
|
||||||
|
DEPENDS makesdna
|
||||||
|
)
|
||||||
|
SET(SRC ${BULLET_PHYSICS_SOURCE_DIR}/src/LinearMath/btSerializer64.cpp)
|
||||||
|
|
||||||
|
ELSE()
|
||||||
# Output BulletDNA.c
|
# Output BulletDNA.c
|
||||||
ADD_CUSTOM_COMMAND(
|
ADD_CUSTOM_COMMAND(
|
||||||
OUTPUT ${BULLET_PHYSICS_SOURCE_DIR}/src/LinearMath/btSerializer.cpp
|
OUTPUT ${BULLET_PHYSICS_SOURCE_DIR}/src/LinearMath/btSerializer.cpp
|
||||||
COMMAND ${CMAKE_CFG_INTDIR}/makesdna ${BULLET_PHYSICS_SOURCE_DIR}/src/LinearMath/btSerializer.cpp ${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/CommonSerialize/
|
COMMAND ${CMAKE_CFG_INTDIR}/makesdna ${BULLET_PHYSICS_SOURCE_DIR}/src/LinearMath/btSerializer.cpp ${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/CommonSerialize/
|
||||||
DEPENDS makesdna
|
DEPENDS makesdna
|
||||||
)
|
)
|
||||||
|
SET(SRC ${BULLET_PHYSICS_SOURCE_DIR}/src/LinearMath/btSerializer.cpp)
|
||||||
|
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
# Build bf_dna library
|
# Build bf_dna library
|
||||||
SET(SRC ${BULLET_PHYSICS_SOURCE_DIR}/src/LinearMath/btSerializer.cpp)
|
|
||||||
|
|
||||||
ADD_LIBRARY(BulletDNA ${SRC} ${INC_FILES})
|
ADD_LIBRARY(BulletDNA ${SRC} ${INC_FILES})
|
||||||
|
|
||||||
MESSAGE(STATUS "Configuring makesdna")
|
MESSAGE(STATUS "Configuring makesdna")
|
||||||
+11
-4
@@ -71,9 +71,9 @@
|
|||||||
</visual>
|
</visual>
|
||||||
<collision>
|
<collision>
|
||||||
<geometry>
|
<geometry>
|
||||||
<box size=".03 .03 .02"/>
|
<box size=".03 .01 .02"/>
|
||||||
</geometry>
|
</geometry>
|
||||||
<origin rpy="0.0 0 0" xyz="0.105 0.00495 0"/>
|
<origin rpy="0.0 0.0 0" xyz="0.105 -0.005 0"/>
|
||||||
</collision>
|
</collision>
|
||||||
<inertial>
|
<inertial>
|
||||||
<mass value="0.1"/>
|
<mass value="0.1"/>
|
||||||
@@ -130,10 +130,17 @@
|
|||||||
</visual>
|
</visual>
|
||||||
<collision>
|
<collision>
|
||||||
<geometry>
|
<geometry>
|
||||||
<box size=".03 .03 .02"/>
|
<box size=".03 .01 .02"/>
|
||||||
</geometry>
|
</geometry>
|
||||||
<origin rpy="-3.1415 0 0" xyz="0.105 0.00495 0"/>
|
<origin rpy="-3.1415 0 0" xyz="0.105 0.015 0"/>
|
||||||
</collision>
|
</collision>
|
||||||
|
<collision>
|
||||||
|
<geometry>
|
||||||
|
<box size=".01 .02 .02"/>
|
||||||
|
</geometry>
|
||||||
|
<origin rpy="-3.1415 0 -0.5" xyz="0.095 0.005 0"/>
|
||||||
|
</collision>
|
||||||
|
|
||||||
<inertial>
|
<inertial>
|
||||||
<mass value="0.1"/>
|
<mass value="0.1"/>
|
||||||
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
|
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
|
||||||
|
|||||||
Binary file not shown.
@@ -495,10 +495,10 @@ static void saveCurrentSettings(int currentEntry,const char* startFileName)
|
|||||||
{
|
{
|
||||||
fprintf(f,"--enable_experimental_opencl\n");
|
fprintf(f,"--enable_experimental_opencl\n");
|
||||||
}
|
}
|
||||||
if (sUseOpenGL2 )
|
// if (sUseOpenGL2 )
|
||||||
{
|
// {
|
||||||
fprintf(f,"--opengl2\n");
|
// fprintf(f,"--opengl2\n");
|
||||||
}
|
// }
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
@@ -1237,8 +1237,8 @@ void OpenGLExampleBrowser::update(float deltaTime)
|
|||||||
if (renderGrid)
|
if (renderGrid)
|
||||||
{
|
{
|
||||||
BT_PROFILE("Draw Grid");
|
BT_PROFILE("Draw Grid");
|
||||||
glPolygonOffset(3.0, 3);
|
//glPolygonOffset(3.0, 3);
|
||||||
glEnable(GL_POLYGON_OFFSET_FILL);
|
//glEnable(GL_POLYGON_OFFSET_FILL);
|
||||||
s_app->drawGrid(dg);
|
s_app->drawGrid(dg);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,8 +10,6 @@
|
|||||||
|
|
||||||
#include "../OpenGLWindow/SimpleCamera.h"
|
#include "../OpenGLWindow/SimpleCamera.h"
|
||||||
#include "../OpenGLWindow/GLInstanceGraphicsShape.h"
|
#include "../OpenGLWindow/GLInstanceGraphicsShape.h"
|
||||||
//backwards compatibility
|
|
||||||
#include "GL_ShapeDrawer.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define BT_LINE_BATCH_SIZE 512
|
#define BT_LINE_BATCH_SIZE 512
|
||||||
@@ -147,7 +145,6 @@ struct OpenGLGuiHelperInternalData
|
|||||||
{
|
{
|
||||||
struct CommonGraphicsApp* m_glApp;
|
struct CommonGraphicsApp* m_glApp;
|
||||||
class MyDebugDrawer* m_debugDraw;
|
class MyDebugDrawer* m_debugDraw;
|
||||||
GL_ShapeDrawer* m_gl2ShapeDrawer;
|
|
||||||
bool m_vrMode;
|
bool m_vrMode;
|
||||||
int m_vrSkipShadowPass;
|
int m_vrSkipShadowPass;
|
||||||
|
|
||||||
@@ -178,19 +175,13 @@ OpenGLGuiHelper::OpenGLGuiHelper(CommonGraphicsApp* glApp, bool useOpenGL2)
|
|||||||
m_data->m_glApp = glApp;
|
m_data->m_glApp = glApp;
|
||||||
m_data->m_debugDraw = 0;
|
m_data->m_debugDraw = 0;
|
||||||
|
|
||||||
m_data->m_gl2ShapeDrawer = 0;
|
|
||||||
|
|
||||||
if (useOpenGL2)
|
|
||||||
{
|
|
||||||
m_data->m_gl2ShapeDrawer = new GL_ShapeDrawer();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenGLGuiHelper::~OpenGLGuiHelper()
|
OpenGLGuiHelper::~OpenGLGuiHelper()
|
||||||
{
|
{
|
||||||
delete m_data->m_debugDraw;
|
delete m_data->m_debugDraw;
|
||||||
delete m_data->m_gl2ShapeDrawer;
|
|
||||||
delete m_data;
|
delete m_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -337,13 +328,7 @@ void OpenGLGuiHelper::render(const btDiscreteDynamicsWorld* rbWorld)
|
|||||||
m_data->m_glApp->m_renderer->renderScene();
|
m_data->m_glApp->m_renderer->renderScene();
|
||||||
}
|
}
|
||||||
|
|
||||||
//backwards compatible OpenGL2 rendering
|
|
||||||
|
|
||||||
if (m_data->m_gl2ShapeDrawer && rbWorld)
|
|
||||||
{
|
|
||||||
m_data->m_gl2ShapeDrawer->enableTexture(true);
|
|
||||||
m_data->m_gl2ShapeDrawer->drawScene(rbWorld,true, m_data->m_glApp->getUpAxis());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
void OpenGLGuiHelper::createPhysicsDebugDrawer(btDiscreteDynamicsWorld* rbWorld)
|
void OpenGLGuiHelper::createPhysicsDebugDrawer(btDiscreteDynamicsWorld* rbWorld)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "OpenGLExampleBrowser.h"
|
#include "OpenGLExampleBrowser.h"
|
||||||
|
|
||||||
#include "Bullet3Common/b3CommandLineArgs.h"
|
#include "Bullet3Common/b3CommandLineArgs.h"
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ static bool parseVector3(btVector3& vec3, const std::string& vector_str, MJCFErr
|
|||||||
}
|
}
|
||||||
if (rgba.size() < 3)
|
if (rgba.size() < 3)
|
||||||
{
|
{
|
||||||
logger->reportWarning("Couldn't parse vector3");
|
logger->reportWarning( ("Couldn't parse vector3 '" + vector_str + "'").c_str() );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (lastThree) {
|
if (lastThree) {
|
||||||
@@ -113,7 +113,8 @@ static bool parseVector6(btVector3& v0, btVector3& v1, const std::string& vector
|
|||||||
}
|
}
|
||||||
if (values.size() < 6)
|
if (values.size() < 6)
|
||||||
{
|
{
|
||||||
logger->reportWarning("Couldn't parse 6 floats");
|
logger->reportWarning( ("Couldn't parse 6 floats '" + vector_str + "'").c_str() );
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
v0.setValue(values[0],values[1],values[2]);
|
v0.setValue(values[0],values[1],values[2]);
|
||||||
@@ -143,6 +144,7 @@ struct BulletMJCFImporterInternalData
|
|||||||
//<compiler angle="radian" meshdir="mesh/" texturedir="texture/"/>
|
//<compiler angle="radian" meshdir="mesh/" texturedir="texture/"/>
|
||||||
std::string m_meshDir;
|
std::string m_meshDir;
|
||||||
std::string m_textureDir;
|
std::string m_textureDir;
|
||||||
|
std::string m_angleUnits;
|
||||||
|
|
||||||
|
|
||||||
int m_activeModel;
|
int m_activeModel;
|
||||||
@@ -173,9 +175,17 @@ struct BulletMJCFImporterInternalData
|
|||||||
|
|
||||||
std::string sourceFileLocation(TiXmlElement* e)
|
std::string sourceFileLocation(TiXmlElement* e)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
|
//no C++11 snprintf etc
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
snprintf(buf, sizeof(buf), "%s:%i", m_sourceFileName.c_str(), e->Row());
|
snprintf(buf, sizeof(buf), "%s:%i", m_sourceFileName.c_str(), e->Row());
|
||||||
return buf;
|
return buf;
|
||||||
|
#else
|
||||||
|
char row[1024];
|
||||||
|
sprintf(row,"%d",e->Row());
|
||||||
|
std::string str = m_sourceFileName.c_str() + std::string(":") + std::string(row);
|
||||||
|
return str;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
const UrdfLink* getLink(int modelIndex, int linkIndex) const
|
const UrdfLink* getLink(int modelIndex, int linkIndex) const
|
||||||
@@ -205,6 +215,8 @@ struct BulletMJCFImporterInternalData
|
|||||||
{
|
{
|
||||||
m_textureDir = textureDirStr;
|
m_textureDir = textureDirStr;
|
||||||
}
|
}
|
||||||
|
const char* angle = root_xml->Attribute("angle");
|
||||||
|
m_angleUnits = angle ? angle : "degree"; // degrees by default, http://www.mujoco.org/book/modeling.html#compiler
|
||||||
#if 0
|
#if 0
|
||||||
for (TiXmlElement* child_xml = root_xml->FirstChildElement() ; child_xml ; child_xml = child_xml->NextSiblingElement())
|
for (TiXmlElement* child_xml = root_xml->FirstChildElement() ; child_xml ; child_xml = child_xml->NextSiblingElement())
|
||||||
{
|
{
|
||||||
@@ -337,8 +349,7 @@ struct BulletMJCFImporterInternalData
|
|||||||
}
|
}
|
||||||
if (!handled)
|
if (!handled)
|
||||||
{
|
{
|
||||||
logger->reportWarning("Unhandled root element");
|
logger->reportWarning( (sourceFileLocation(rootxml) + ": unhandled root element '" + n + "'").c_str() );
|
||||||
logger->reportWarning(n.c_str());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -346,6 +357,7 @@ struct BulletMJCFImporterInternalData
|
|||||||
|
|
||||||
bool parseJoint(TiXmlElement* link_xml, int modelIndex, int parentLinkIndex, int linkIndex, MJCFErrorLogger* logger, const btTransform& parentToLinkTrans, btTransform& jointTransOut)
|
bool parseJoint(TiXmlElement* link_xml, int modelIndex, int parentLinkIndex, int linkIndex, MJCFErrorLogger* logger, const btTransform& parentToLinkTrans, btTransform& jointTransOut)
|
||||||
{
|
{
|
||||||
|
bool jointHandled = false;
|
||||||
const char* jType = link_xml->Attribute("type");
|
const char* jType = link_xml->Attribute("type");
|
||||||
const char* limitedStr = link_xml->Attribute("limited");
|
const char* limitedStr = link_xml->Attribute("limited");
|
||||||
const char* axisStr = link_xml->Attribute("axis");
|
const char* axisStr = link_xml->Attribute("axis");
|
||||||
@@ -375,79 +387,25 @@ struct BulletMJCFImporterInternalData
|
|||||||
jointTrans.setRotation(orn);
|
jointTrans.setRotation(orn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
btVector3 jointAxis(1,0,0);
|
|
||||||
|
|
||||||
|
btVector3 jointAxis(1,0,0);
|
||||||
if (axisStr)
|
if (axisStr)
|
||||||
{
|
{
|
||||||
std::string ax = axisStr;
|
std::string ax = axisStr;
|
||||||
parseVector3(jointAxis,ax,logger);
|
parseVector3(jointAxis,ax,logger);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
logger->reportWarning("joint without axis attribute");
|
logger->reportWarning( (sourceFileLocation(link_xml) + ": joint without axis attribute").c_str() );
|
||||||
}
|
}
|
||||||
bool isLimited = false;
|
|
||||||
double range[2] = {1,0};
|
|
||||||
|
|
||||||
|
double range[2] = {1,0};
|
||||||
std::string lim = m_defaultJointLimited;
|
std::string lim = m_defaultJointLimited;
|
||||||
if (limitedStr)
|
if (limitedStr)
|
||||||
{
|
{
|
||||||
lim = limitedStr;
|
lim = limitedStr;
|
||||||
}
|
}
|
||||||
if (lim=="true")
|
bool isLimited = lim=="true";
|
||||||
{
|
|
||||||
isLimited = true;
|
|
||||||
//parse the 'range' field
|
|
||||||
btArray<std::string> pieces;
|
|
||||||
btArray<float> sizes;
|
|
||||||
btAlignedObjectArray<std::string> strArray;
|
|
||||||
urdfIsAnyOf(" ", strArray);
|
|
||||||
urdfStringSplit(pieces, rangeStr, strArray);
|
|
||||||
for (int i = 0; i < pieces.size(); ++i)
|
|
||||||
{
|
|
||||||
if (!pieces[i].empty())
|
|
||||||
{
|
|
||||||
sizes.push_back(urdfLexicalCast<double>(pieces[i].c_str()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (sizes.size()==2)
|
|
||||||
{
|
|
||||||
// TODO angle units are in "<compiler angle="degree" inertiafromgeom="true"/>
|
|
||||||
range[0] = sizes[0] * B3_PI / 180;
|
|
||||||
range[1] = sizes[1] * B3_PI / 180;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
logger->reportWarning("Expected range[2] in joint with limits");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO armature : real, "0" Armature inertia (or rotor inertia) of all
|
|
||||||
// degrees of freedom created by this joint. These are constants added to the
|
|
||||||
// diagonal of the inertia matrix in generalized coordinates. They make the
|
|
||||||
// simulation more stable, and often increase physical realism. This is because
|
|
||||||
// when a motor is attached to the system with a transmission that amplifies
|
|
||||||
// the motor force by c, the inertia of the rotor (i.e. the moving part of the
|
|
||||||
// motor) is amplified by c*c. The same holds for gears in the early stages of
|
|
||||||
// planetary gear boxes. These extra inertias often dominate the inertias of
|
|
||||||
// the robot parts that are represented explicitly in the model, and the
|
|
||||||
// armature attribute is the way to model them.
|
|
||||||
|
|
||||||
// TODO damping : real, "0" Damping applied to all degrees of
|
|
||||||
// freedom created by this joint. Unlike friction loss
|
|
||||||
// which is computed by the constraint solver, damping is
|
|
||||||
// simply a force linear in velocity. It is included in
|
|
||||||
// the passive forces. Despite this simplicity, larger
|
|
||||||
// damping values can make numerical integrators unstable,
|
|
||||||
// which is why our Euler integrator handles damping
|
|
||||||
// implicitly. See Integration in the Computation chapter.
|
|
||||||
|
|
||||||
bool jointHandled = false;
|
|
||||||
const UrdfLink* linkPtr = getLink(modelIndex,linkIndex);
|
|
||||||
|
|
||||||
btTransform parentLinkToJointTransform;
|
|
||||||
parentLinkToJointTransform.setIdentity();
|
|
||||||
parentLinkToJointTransform = parentToLinkTrans*jointTrans;
|
|
||||||
|
|
||||||
jointTransOut = jointTrans;
|
|
||||||
UrdfJointTypes ejtype;
|
UrdfJointTypes ejtype;
|
||||||
if (jType)
|
if (jType)
|
||||||
{
|
{
|
||||||
@@ -475,9 +433,67 @@ struct BulletMJCFImporterInternalData
|
|||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
logger->reportWarning("Expected 'type' attribute for joint");
|
logger->reportWarning( (sourceFileLocation(link_xml) + ": expected 'type' attribute for joint").c_str() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isLimited)
|
||||||
|
{
|
||||||
|
//parse the 'range' field
|
||||||
|
btArray<std::string> pieces;
|
||||||
|
btArray<float> limits;
|
||||||
|
btAlignedObjectArray<std::string> strArray;
|
||||||
|
urdfIsAnyOf(" ", strArray);
|
||||||
|
urdfStringSplit(pieces, rangeStr, strArray);
|
||||||
|
for (int i = 0; i < pieces.size(); ++i)
|
||||||
|
{
|
||||||
|
if (!pieces[i].empty())
|
||||||
|
{
|
||||||
|
limits.push_back(urdfLexicalCast<double>(pieces[i].c_str()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (limits.size()==2)
|
||||||
|
{
|
||||||
|
range[0] = limits[0];
|
||||||
|
range[1] = limits[1];
|
||||||
|
if (m_angleUnits=="degree" && ejtype==URDFRevoluteJoint)
|
||||||
|
{
|
||||||
|
range[0] = limits[0] * B3_PI / 180;
|
||||||
|
range[1] = limits[1] * B3_PI / 180;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger->reportWarning( (sourceFileLocation(link_xml) + ": cannot parse 'range' attribute (units='" + m_angleUnits + "'')").c_str() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO armature : real, "0" Armature inertia (or rotor inertia) of all
|
||||||
|
// degrees of freedom created by this joint. These are constants added to the
|
||||||
|
// diagonal of the inertia matrix in generalized coordinates. They make the
|
||||||
|
// simulation more stable, and often increase physical realism. This is because
|
||||||
|
// when a motor is attached to the system with a transmission that amplifies
|
||||||
|
// the motor force by c, the inertia of the rotor (i.e. the moving part of the
|
||||||
|
// motor) is amplified by c*c. The same holds for gears in the early stages of
|
||||||
|
// planetary gear boxes. These extra inertias often dominate the inertias of
|
||||||
|
// the robot parts that are represented explicitly in the model, and the
|
||||||
|
// armature attribute is the way to model them.
|
||||||
|
|
||||||
|
// TODO damping : real, "0" Damping applied to all degrees of
|
||||||
|
// freedom created by this joint. Unlike friction loss
|
||||||
|
// which is computed by the constraint solver, damping is
|
||||||
|
// simply a force linear in velocity. It is included in
|
||||||
|
// the passive forces. Despite this simplicity, larger
|
||||||
|
// damping values can make numerical integrators unstable,
|
||||||
|
// which is why our Euler integrator handles damping
|
||||||
|
// implicitly. See Integration in the Computation chapter.
|
||||||
|
|
||||||
|
const UrdfLink* linkPtr = getLink(modelIndex,linkIndex);
|
||||||
|
|
||||||
|
btTransform parentLinkToJointTransform;
|
||||||
|
parentLinkToJointTransform.setIdentity();
|
||||||
|
parentLinkToJointTransform = parentToLinkTrans*jointTrans;
|
||||||
|
jointTransOut = jointTrans;
|
||||||
|
|
||||||
if (jointHandled)
|
if (jointHandled)
|
||||||
{
|
{
|
||||||
UrdfJoint* jointPtr = new UrdfJoint();
|
UrdfJoint* jointPtr = new UrdfJoint();
|
||||||
@@ -520,6 +536,7 @@ struct BulletMJCFImporterInternalData
|
|||||||
UrdfLink** linkPtrPtr = m_models[modelIndex]->m_links.getAtIndex(linkIndex);
|
UrdfLink** linkPtrPtr = m_models[modelIndex]->m_links.getAtIndex(linkIndex);
|
||||||
if (linkPtrPtr==0)
|
if (linkPtrPtr==0)
|
||||||
{
|
{
|
||||||
|
// XXX: should it be assert?
|
||||||
logger->reportWarning("Invalide linkindex");
|
logger->reportWarning("Invalide linkindex");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -613,7 +630,7 @@ struct BulletMJCFImporterInternalData
|
|||||||
geom.m_sphereRadius = urdfLexicalCast<double>(sz);
|
geom.m_sphereRadius = urdfLexicalCast<double>(sz);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
logger->reportWarning("Expected size field (scalar) in sphere geom");
|
logger->reportWarning( (sourceFileLocation(link_xml) + ": no size field (scalar) in sphere geom").c_str() );
|
||||||
}
|
}
|
||||||
handledGeomType = true;
|
handledGeomType = true;
|
||||||
}
|
}
|
||||||
@@ -637,18 +654,18 @@ struct BulletMJCFImporterInternalData
|
|||||||
}
|
}
|
||||||
|
|
||||||
geom.m_capsuleRadius = 0;
|
geom.m_capsuleRadius = 0;
|
||||||
geom.m_capsuleHalfHeight = 0.f;
|
geom.m_capsuleHeight = 0.f;
|
||||||
|
|
||||||
if (sizes.size()>0)
|
if (sizes.size()>0)
|
||||||
{
|
{
|
||||||
geom.m_capsuleRadius = sizes[0];
|
geom.m_capsuleRadius = sizes[0];
|
||||||
if (sizes.size()>1)
|
if (sizes.size()>1)
|
||||||
{
|
{
|
||||||
geom.m_capsuleHalfHeight = sizes[1];
|
geom.m_capsuleHeight = 2*sizes[1];
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
logger->reportWarning("couldn't convert 'size' attribute of capsule geom");
|
logger->reportWarning( (sourceFileLocation(link_xml) + ": couldn't convert 'size' attribute of capsule geom").c_str() );
|
||||||
}
|
}
|
||||||
const char* fromtoStr = link_xml->Attribute("fromto");
|
const char* fromtoStr = link_xml->Attribute("fromto");
|
||||||
geom.m_hasFromTo = false;
|
geom.m_hasFromTo = false;
|
||||||
@@ -664,7 +681,7 @@ struct BulletMJCFImporterInternalData
|
|||||||
{
|
{
|
||||||
if (sizes.size()<2)
|
if (sizes.size()<2)
|
||||||
{
|
{
|
||||||
logger->reportWarning("capsule without fromto attribute requires 2 sizes (radius and halfheight)");
|
logger->reportWarning( (sourceFileLocation(link_xml) + ": capsule without fromto attribute requires 2 sizes (radius and halfheight)").c_str() );
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
handledGeomType = true;
|
handledGeomType = true;
|
||||||
@@ -725,13 +742,11 @@ struct BulletMJCFImporterInternalData
|
|||||||
|
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
char warn[1024];
|
logger->reportWarning( (sourceFileLocation(link_xml) + ": unhandled geom type '" + geomType + "'").c_str() );
|
||||||
sprintf(warn,"Unknown/unhandled geom type: %s", geomType.c_str());
|
|
||||||
logger->reportWarning(warn);
|
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
logger->reportWarning("geom requires type");
|
logger->reportWarning( (sourceFileLocation(link_xml) + ": geom requires type").c_str() );
|
||||||
}
|
}
|
||||||
|
|
||||||
return handledGeomType;
|
return handledGeomType;
|
||||||
@@ -1013,10 +1028,7 @@ struct BulletMJCFImporterInternalData
|
|||||||
}
|
}
|
||||||
if (!handled)
|
if (!handled)
|
||||||
{
|
{
|
||||||
char warn[1024];
|
logger->reportWarning( (sourceFileLocation(xml) + ": unknown field '" + n + "'").c_str() );
|
||||||
std::string n = xml->Value();
|
|
||||||
sprintf(warn,"Unknown/unhandled field: %s", n.c_str());
|
|
||||||
logger->reportWarning(warn);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1395,12 +1407,14 @@ void BulletMJCFImporter::getLinkChildIndices(int urdfLinkIndex, btAlignedObjectA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BulletMJCFImporter::getJointInfo(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction) const
|
bool BulletMJCFImporter::getJointInfo2(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction, btScalar& jointMaxForce, btScalar& jointMaxVelocity) const
|
||||||
{
|
{
|
||||||
jointLowerLimit = 0.f;
|
jointLowerLimit = 0.f;
|
||||||
jointUpperLimit = 0.f;
|
jointUpperLimit = 0.f;
|
||||||
jointDamping = 0.f;
|
jointDamping = 0.f;
|
||||||
jointFriction = 0.f;
|
jointFriction = 0.f;
|
||||||
|
jointMaxForce = 0;
|
||||||
|
jointMaxVelocity = 0;
|
||||||
|
|
||||||
const UrdfLink* link = m_data->getLink(m_data->m_activeModel,urdfLinkIndex);
|
const UrdfLink* link = m_data->getLink(m_data->m_activeModel,urdfLinkIndex);
|
||||||
if (link)
|
if (link)
|
||||||
@@ -1418,6 +1432,8 @@ bool BulletMJCFImporter::getJointInfo(int urdfLinkIndex, btTransform& parent2joi
|
|||||||
jointUpperLimit = pj->m_upperLimit;
|
jointUpperLimit = pj->m_upperLimit;
|
||||||
jointDamping = pj->m_jointDamping;
|
jointDamping = pj->m_jointDamping;
|
||||||
jointFriction = pj->m_jointFriction;
|
jointFriction = pj->m_jointFriction;
|
||||||
|
jointMaxForce = pj->m_effortLimit;
|
||||||
|
jointMaxVelocity = pj->m_velocityLimit;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else
|
} else
|
||||||
@@ -1430,6 +1446,14 @@ bool BulletMJCFImporter::getJointInfo(int urdfLinkIndex, btTransform& parent2joi
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool BulletMJCFImporter::getJointInfo(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction) const
|
||||||
|
{
|
||||||
|
//backwards compatibility for custom file importers
|
||||||
|
btScalar jointMaxForce = 0;
|
||||||
|
btScalar jointMaxVelocity = 0;
|
||||||
|
return getJointInfo2(urdfLinkIndex, parent2joint, linkTransformInWorld, jointAxisInJointSpace, jointType, jointLowerLimit, jointUpperLimit, jointDamping, jointFriction,jointMaxForce, jointMaxVelocity);
|
||||||
|
}
|
||||||
|
|
||||||
bool BulletMJCFImporter::getRootTransformInWorld(btTransform& rootTransformInWorld) const
|
bool BulletMJCFImporter::getRootTransformInWorld(btTransform& rootTransformInWorld) const
|
||||||
{
|
{
|
||||||
rootTransformInWorld.setIdentity();
|
rootTransformInWorld.setIdentity();
|
||||||
@@ -1662,7 +1686,7 @@ class btCompoundShape* BulletMJCFImporter::convertLinkCollisionShapes(int linkIn
|
|||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
btCapsuleShapeZ* cap = new btCapsuleShapeZ(col->m_geometry.m_capsuleRadius,
|
btCapsuleShapeZ* cap = new btCapsuleShapeZ(col->m_geometry.m_capsuleRadius,
|
||||||
2.*col->m_geometry.m_capsuleHalfHeight);
|
col->m_geometry.m_capsuleHeight);
|
||||||
childShape = cap;
|
childShape = cap;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ public:
|
|||||||
virtual void getLinkChildIndices(int urdfLinkIndex, btAlignedObjectArray<int>& childLinkIndices) const;
|
virtual void getLinkChildIndices(int urdfLinkIndex, btAlignedObjectArray<int>& childLinkIndices) const;
|
||||||
|
|
||||||
virtual bool getJointInfo(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction) const;
|
virtual bool getJointInfo(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction) const;
|
||||||
|
virtual bool getJointInfo2(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction, btScalar& jointMaxForce, btScalar& jointMaxVelocity) const;
|
||||||
|
|
||||||
virtual bool getRootTransformInWorld(btTransform& rootTransformInWorld) const;
|
virtual bool getRootTransformInWorld(btTransform& rootTransformInWorld) const;
|
||||||
|
|
||||||
|
|||||||
@@ -365,12 +365,14 @@ void BulletURDFImporter::getMassAndInertia(int linkIndex, btScalar& mass,btVect
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BulletURDFImporter::getJointInfo(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction) const
|
bool BulletURDFImporter::getJointInfo2(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction, btScalar& jointMaxForce, btScalar& jointMaxVelocity) const
|
||||||
{
|
{
|
||||||
jointLowerLimit = 0.f;
|
jointLowerLimit = 0.f;
|
||||||
jointUpperLimit = 0.f;
|
jointUpperLimit = 0.f;
|
||||||
jointDamping = 0.f;
|
jointDamping = 0.f;
|
||||||
jointFriction = 0.f;
|
jointFriction = 0.f;
|
||||||
|
jointMaxForce = 0.f;
|
||||||
|
jointMaxVelocity = 0.f;
|
||||||
|
|
||||||
UrdfLink* const* linkPtr = m_data->m_urdfParser.getModel().m_links.getAtIndex(urdfLinkIndex);
|
UrdfLink* const* linkPtr = m_data->m_urdfParser.getModel().m_links.getAtIndex(urdfLinkIndex);
|
||||||
btAssert(linkPtr);
|
btAssert(linkPtr);
|
||||||
@@ -389,7 +391,8 @@ bool BulletURDFImporter::getJointInfo(int urdfLinkIndex, btTransform& parent2joi
|
|||||||
jointUpperLimit = pj->m_upperLimit;
|
jointUpperLimit = pj->m_upperLimit;
|
||||||
jointDamping = pj->m_jointDamping;
|
jointDamping = pj->m_jointDamping;
|
||||||
jointFriction = pj->m_jointFriction;
|
jointFriction = pj->m_jointFriction;
|
||||||
|
jointMaxForce = pj->m_effortLimit;
|
||||||
|
jointMaxVelocity = pj->m_velocityLimit;
|
||||||
return true;
|
return true;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
@@ -400,6 +403,14 @@ bool BulletURDFImporter::getJointInfo(int urdfLinkIndex, btTransform& parent2joi
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
bool BulletURDFImporter::getJointInfo(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction) const
|
||||||
|
{
|
||||||
|
btScalar jointMaxForce;
|
||||||
|
btScalar jointMaxVelocity;
|
||||||
|
return getJointInfo2(urdfLinkIndex, parent2joint, linkTransformInWorld, jointAxisInJointSpace, jointType, jointLowerLimit, jointUpperLimit, jointDamping, jointFriction,jointMaxForce,jointMaxVelocity);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BulletURDFImporter::getRootTransformInWorld(btTransform& rootTransformInWorld) const
|
bool BulletURDFImporter::getRootTransformInWorld(btTransform& rootTransformInWorld) const
|
||||||
@@ -558,7 +569,7 @@ btCollisionShape* convertURDFToCollisionShape(const UrdfCollision* collision, co
|
|||||||
case URDF_GEOM_CAPSULE:
|
case URDF_GEOM_CAPSULE:
|
||||||
{
|
{
|
||||||
btScalar radius = collision->m_geometry.m_capsuleRadius;
|
btScalar radius = collision->m_geometry.m_capsuleRadius;
|
||||||
btScalar height = btScalar(2.f)*collision->m_geometry.m_capsuleHalfHeight;
|
btScalar height = collision->m_geometry.m_capsuleHeight;
|
||||||
btCapsuleShapeZ* capsuleShape = new btCapsuleShapeZ(radius,height);
|
btCapsuleShapeZ* capsuleShape = new btCapsuleShapeZ(radius,height);
|
||||||
shape = capsuleShape;
|
shape = capsuleShape;
|
||||||
shape ->setMargin(gUrdfDefaultCollisionMargin);
|
shape ->setMargin(gUrdfDefaultCollisionMargin);
|
||||||
@@ -568,7 +579,7 @@ btCollisionShape* convertURDFToCollisionShape(const UrdfCollision* collision, co
|
|||||||
case URDF_GEOM_CYLINDER:
|
case URDF_GEOM_CYLINDER:
|
||||||
{
|
{
|
||||||
btScalar cylRadius = collision->m_geometry.m_capsuleRadius;
|
btScalar cylRadius = collision->m_geometry.m_capsuleRadius;
|
||||||
btScalar cylLength = collision->m_geometry.m_capsuleHalfHeight;
|
btScalar cylLength = collision->m_geometry.m_capsuleHeight;
|
||||||
|
|
||||||
btAlignedObjectArray<btVector3> vertices;
|
btAlignedObjectArray<btVector3> vertices;
|
||||||
//int numVerts = sizeof(barrel_vertices)/(9*sizeof(float));
|
//int numVerts = sizeof(barrel_vertices)/(9*sizeof(float));
|
||||||
@@ -791,7 +802,7 @@ static void convertURDFToVisualShapeInternal(const UrdfVisual* visual, const cha
|
|||||||
{
|
{
|
||||||
|
|
||||||
btScalar cylRadius = visual->m_geometry.m_capsuleRadius;
|
btScalar cylRadius = visual->m_geometry.m_capsuleRadius;
|
||||||
btScalar cylLength = visual->m_geometry.m_capsuleHalfHeight;
|
btScalar cylLength = visual->m_geometry.m_capsuleHeight;
|
||||||
|
|
||||||
btVector3 vert(cylRadius*btSin(SIMD_2_PI*(float(i) / numSteps)), cylRadius*btCos(SIMD_2_PI*(float(i) / numSteps)), cylLength / 2.);
|
btVector3 vert(cylRadius*btSin(SIMD_2_PI*(float(i) / numSteps)), cylRadius*btCos(SIMD_2_PI*(float(i) / numSteps)), cylLength / 2.);
|
||||||
vertices.push_back(vert);
|
vertices.push_back(vert);
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ public:
|
|||||||
virtual void getMassAndInertia(int linkIndex, btScalar& mass,btVector3& localInertiaDiagonal, btTransform& inertialFrame) const;
|
virtual void getMassAndInertia(int linkIndex, btScalar& mass,btVector3& localInertiaDiagonal, btTransform& inertialFrame) const;
|
||||||
|
|
||||||
virtual bool getJointInfo(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction) const;
|
virtual bool getJointInfo(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction) const;
|
||||||
|
virtual bool getJointInfo2(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction, btScalar& jointMaxForce, btScalar& jointMaxVelocity) const;
|
||||||
|
|
||||||
virtual bool getRootTransformInWorld(btTransform& rootTransformInWorld) const;
|
virtual bool getRootTransformInWorld(btTransform& rootTransformInWorld) const;
|
||||||
|
|
||||||
|
|||||||
@@ -232,9 +232,11 @@ void ConvertURDF2BulletInternal(
|
|||||||
btScalar jointUpperLimit;
|
btScalar jointUpperLimit;
|
||||||
btScalar jointDamping;
|
btScalar jointDamping;
|
||||||
btScalar jointFriction;
|
btScalar jointFriction;
|
||||||
|
btScalar jointMaxForce;
|
||||||
|
btScalar jointMaxVelocity;
|
||||||
|
|
||||||
|
|
||||||
bool hasParentJoint = u2b.getJointInfo(urdfLinkIndex, parent2joint, linkTransformInWorldSpace, jointAxisInJointSpace, jointType,jointLowerLimit,jointUpperLimit, jointDamping, jointFriction);
|
bool hasParentJoint = u2b.getJointInfo2(urdfLinkIndex, parent2joint, linkTransformInWorldSpace, jointAxisInJointSpace, jointType,jointLowerLimit,jointUpperLimit, jointDamping, jointFriction,jointMaxForce,jointMaxVelocity);
|
||||||
std::string linkName = u2b.getLinkName(urdfLinkIndex);
|
std::string linkName = u2b.getLinkName(urdfLinkIndex);
|
||||||
|
|
||||||
if (flags & CUF_USE_SDF)
|
if (flags & CUF_USE_SDF)
|
||||||
@@ -344,6 +346,17 @@ void ConvertURDF2BulletInternal(
|
|||||||
btQuaternion parentRotToThis = offsetInB.getRotation() * offsetInA.inverse().getRotation();
|
btQuaternion parentRotToThis = offsetInB.getRotation() * offsetInA.inverse().getRotation();
|
||||||
|
|
||||||
bool disableParentCollision = true;
|
bool disableParentCollision = true;
|
||||||
|
|
||||||
|
if (createMultiBody && cache.m_bulletMultiBody)
|
||||||
|
{
|
||||||
|
cache.m_bulletMultiBody->getLink(mbLinkIndex).m_jointDamping = jointDamping;
|
||||||
|
cache.m_bulletMultiBody->getLink(mbLinkIndex).m_jointFriction = jointFriction;
|
||||||
|
cache.m_bulletMultiBody->getLink(mbLinkIndex).m_jointLowerLimit = jointLowerLimit;
|
||||||
|
cache.m_bulletMultiBody->getLink(mbLinkIndex).m_jointUpperLimit = jointUpperLimit;
|
||||||
|
cache.m_bulletMultiBody->getLink(mbLinkIndex).m_jointMaxForce = jointMaxForce;
|
||||||
|
cache.m_bulletMultiBody->getLink(mbLinkIndex).m_jointMaxVelocity = jointMaxVelocity;
|
||||||
|
}
|
||||||
|
|
||||||
switch (jointType)
|
switch (jointType)
|
||||||
{
|
{
|
||||||
case URDFFixedJoint:
|
case URDFFixedJoint:
|
||||||
@@ -374,8 +387,6 @@ void ConvertURDF2BulletInternal(
|
|||||||
parentRotToThis, quatRotate(offsetInB.getRotation(),jointAxisInJointSpace), offsetInA.getOrigin(),//parent2joint.getOrigin(),
|
parentRotToThis, quatRotate(offsetInB.getRotation(),jointAxisInJointSpace), offsetInA.getOrigin(),//parent2joint.getOrigin(),
|
||||||
-offsetInB.getOrigin(),
|
-offsetInB.getOrigin(),
|
||||||
disableParentCollision);
|
disableParentCollision);
|
||||||
cache.m_bulletMultiBody->getLink(mbLinkIndex).m_jointDamping = jointDamping;
|
|
||||||
cache.m_bulletMultiBody->getLink(mbLinkIndex).m_jointFriction= jointFriction;
|
|
||||||
creation.addLinkMapping(urdfLinkIndex,mbLinkIndex);
|
creation.addLinkMapping(urdfLinkIndex,mbLinkIndex);
|
||||||
if (jointType == URDFRevoluteJoint && jointLowerLimit <= jointUpperLimit) {
|
if (jointType == URDFRevoluteJoint && jointLowerLimit <= jointUpperLimit) {
|
||||||
//std::string name = u2b.getLinkName(urdfLinkIndex);
|
//std::string name = u2b.getLinkName(urdfLinkIndex);
|
||||||
|
|||||||
@@ -47,6 +47,14 @@ public:
|
|||||||
|
|
||||||
virtual bool getJointInfo(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction) const =0;
|
virtual bool getJointInfo(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction) const =0;
|
||||||
|
|
||||||
|
virtual bool getJointInfo2(int urdfLinkIndex, btTransform& parent2joint, btTransform& linkTransformInWorld, btVector3& jointAxisInJointSpace, int& jointType, btScalar& jointLowerLimit, btScalar& jointUpperLimit, btScalar& jointDamping, btScalar& jointFriction, btScalar& jointMaxForce, btScalar& jointMaxVelocity) const
|
||||||
|
{
|
||||||
|
//backwards compatibility for custom file importers
|
||||||
|
jointMaxForce = 0;
|
||||||
|
jointMaxVelocity = 0;
|
||||||
|
return getJointInfo(urdfLinkIndex, parent2joint, linkTransformInWorld, jointAxisInJointSpace, jointType, jointLowerLimit, jointUpperLimit, jointDamping, jointFriction);
|
||||||
|
};
|
||||||
|
|
||||||
virtual bool getRootTransformInWorld(btTransform& rootTransformInWorld) const =0;
|
virtual bool getRootTransformInWorld(btTransform& rootTransformInWorld) const =0;
|
||||||
|
|
||||||
///quick hack: need to rethink the API/dependencies of this
|
///quick hack: need to rethink the API/dependencies of this
|
||||||
|
|||||||
@@ -403,7 +403,7 @@ bool UrdfParser::parseGeometry(UrdfGeometry& geom, TiXmlElement* g, ErrorLogger*
|
|||||||
}
|
}
|
||||||
geom.m_hasFromTo = false;
|
geom.m_hasFromTo = false;
|
||||||
geom.m_capsuleRadius = urdfLexicalCast<double>(shape->Attribute("radius"));
|
geom.m_capsuleRadius = urdfLexicalCast<double>(shape->Attribute("radius"));
|
||||||
geom.m_capsuleHalfHeight = urdfLexicalCast<double>(shape->Attribute("length"));
|
geom.m_capsuleHeight = urdfLexicalCast<double>(shape->Attribute("length"));
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (type_name == "capsule")
|
else if (type_name == "capsule")
|
||||||
@@ -417,7 +417,7 @@ bool UrdfParser::parseGeometry(UrdfGeometry& geom, TiXmlElement* g, ErrorLogger*
|
|||||||
}
|
}
|
||||||
geom.m_hasFromTo = false;
|
geom.m_hasFromTo = false;
|
||||||
geom.m_capsuleRadius = urdfLexicalCast<double>(shape->Attribute("radius"));
|
geom.m_capsuleRadius = urdfLexicalCast<double>(shape->Attribute("radius"));
|
||||||
geom.m_capsuleHalfHeight = btScalar(0.5)*urdfLexicalCast<double>(shape->Attribute("length"));
|
geom.m_capsuleHeight = urdfLexicalCast<double>(shape->Attribute("length"));
|
||||||
}
|
}
|
||||||
else if (type_name == "mesh")
|
else if (type_name == "mesh")
|
||||||
{
|
{
|
||||||
@@ -1679,7 +1679,17 @@ bool UrdfParser::loadSDF(const char* sdfText, ErrorLogger* logger)
|
|||||||
|
|
||||||
std::string UrdfParser::sourceFileLocation(TiXmlElement* e)
|
std::string UrdfParser::sourceFileLocation(TiXmlElement* e)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
|
//no C++11 etc, no snprintf
|
||||||
|
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
snprintf(buf, sizeof(buf), "%s:%i", m_urdf2Model.m_sourceFile.c_str(), e->Row());
|
snprintf(buf, sizeof(buf), "%s:%i", m_urdf2Model.m_sourceFile.c_str(), e->Row());
|
||||||
return buf;
|
return buf;
|
||||||
|
#else
|
||||||
|
char row[1024];
|
||||||
|
sprintf(row,"%d",e->Row());
|
||||||
|
std::string str = m_urdf2Model.m_sourceFile.c_str() + std::string(":") + std::string(row);
|
||||||
|
return str;
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ struct UrdfGeometry
|
|||||||
btVector3 m_boxSize;
|
btVector3 m_boxSize;
|
||||||
|
|
||||||
double m_capsuleRadius;
|
double m_capsuleRadius;
|
||||||
double m_capsuleHalfHeight;
|
double m_capsuleHeight;
|
||||||
int m_hasFromTo;
|
int m_hasFromTo;
|
||||||
btVector3 m_capsuleFrom;
|
btVector3 m_capsuleFrom;
|
||||||
btVector3 m_capsuleTo;
|
btVector3 m_capsuleTo;
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
#include "SimpleOpenGL2App.h"
|
#include "SimpleOpenGL2App.h"
|
||||||
#define USE_OPENGL2
|
#define USE_OPENGL2
|
||||||
#include "OpenGLInclude.h"
|
#include "OpenGLInclude.h"
|
||||||
|
#include "ShapeData.h"
|
||||||
#include "Bullet3Common/b3Logging.h"//b3Assert?
|
#include "Bullet3Common/b3Logging.h"//b3Assert?
|
||||||
#include "Bullet3Common/b3Scalar.h"
|
#include "Bullet3Common/b3Scalar.h"
|
||||||
#include "Bullet3Common/b3AlignedObjectArray.h"
|
#include "Bullet3Common/b3AlignedObjectArray.h"
|
||||||
#include "Bullet3Common/b3Vector3.h"
|
#include "Bullet3Common/b3Vector3.h"
|
||||||
|
#include "Bullet3Common/b3Quaternion.h"
|
||||||
#include "../CommonInterfaces/CommonRenderInterface.h"
|
#include "../CommonInterfaces/CommonRenderInterface.h"
|
||||||
#include "../OpenGLWindow/GLPrimitiveRenderer.h"
|
#include "../OpenGLWindow/GLPrimitiveRenderer.h"
|
||||||
|
#include "GLInstanceGraphicsShape.h"
|
||||||
#include "stdlib.h"
|
#include "stdlib.h"
|
||||||
#include "TwFonts.h"
|
#include "TwFonts.h"
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
@@ -161,13 +163,13 @@ SimpleOpenGL2App::SimpleOpenGL2App(const char* title, int width, int height)
|
|||||||
|
|
||||||
b3Assert(glGetError() ==GL_NO_ERROR);
|
b3Assert(glGetError() ==GL_NO_ERROR);
|
||||||
|
|
||||||
//m_instancingRenderer = new GLInstancingRenderer(128*1024,32*1024*1024);
|
//m_renderer = new GLInstancingRenderer(128*1024,32*1024*1024);
|
||||||
//m_instancingRenderer->init();
|
//m_renderer->init();
|
||||||
//m_instancingRenderer->resize(width,height);
|
//m_renderer->resize(width,height);
|
||||||
|
|
||||||
b3Assert(glGetError() ==GL_NO_ERROR);
|
b3Assert(glGetError() ==GL_NO_ERROR);
|
||||||
|
|
||||||
//m_instancingRenderer->InitShaders();
|
//m_renderer->InitShaders();
|
||||||
|
|
||||||
m_window->setMouseMoveCallback(Simple2MouseMoveCallback);
|
m_window->setMouseMoveCallback(Simple2MouseMoveCallback);
|
||||||
m_window->setMouseButtonCallback(Simple2MouseButtonCallback);
|
m_window->setMouseButtonCallback(Simple2MouseButtonCallback);
|
||||||
@@ -275,7 +277,7 @@ void SimpleOpenGL2App::drawGrid(DrawGridData data)
|
|||||||
|
|
||||||
//we don't use drawPoints because all points would have the same color
|
//we don't use drawPoints because all points would have the same color
|
||||||
// b3Vector3 points[3] = { b3MakeVector3(1, 0, 0), b3MakeVector3(0, 1, 0), b3MakeVector3(0, 0, 1) };
|
// b3Vector3 points[3] = { b3MakeVector3(1, 0, 0), b3MakeVector3(0, 1, 0), b3MakeVector3(0, 0, 1) };
|
||||||
// m_instancingRenderer->drawPoints(&points[0].x, b3MakeVector3(1, 0, 0), 3, sizeof(b3Vector3), 6);
|
// m_renderer->drawPoints(&points[0].x, b3MakeVector3(1, 0, 0), 3, sizeof(b3Vector3), 6);
|
||||||
}
|
}
|
||||||
void SimpleOpenGL2App::setUpAxis(int axis)
|
void SimpleOpenGL2App::setUpAxis(int axis)
|
||||||
{
|
{
|
||||||
@@ -466,8 +468,106 @@ void SimpleOpenGL2App::drawText3D( const char* txt, float worldPosX, float world
|
|||||||
restoreOpenGLState();
|
restoreOpenGLState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleOpenGL2App::registerGrid(int xres, int yres, float color0[4], float color1[4])
|
|
||||||
|
void SimpleOpenGL2App::registerGrid(int cells_x, int cells_z, float color0[4], float color1[4])
|
||||||
{
|
{
|
||||||
|
b3Vector3 cubeExtents=b3MakeVector3(0.5,0.5,0.5);
|
||||||
|
cubeExtents[m_data->m_upAxis] = 0;
|
||||||
|
int cubeId = registerCubeShape(cubeExtents[0],cubeExtents[1],cubeExtents[2]);
|
||||||
|
|
||||||
|
b3Quaternion orn(0,0,0,1);
|
||||||
|
b3Vector3 center=b3MakeVector3(0,0,0,1);
|
||||||
|
b3Vector3 scaling=b3MakeVector3(1,1,1,1);
|
||||||
|
|
||||||
|
for ( int i = 0; i < cells_x; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < cells_z; j++)
|
||||||
|
{
|
||||||
|
float* color =0;
|
||||||
|
if ((i + j) % 2 == 0)
|
||||||
|
{
|
||||||
|
color = (float*)color0;
|
||||||
|
} else {
|
||||||
|
color = (float*)color1;
|
||||||
|
}
|
||||||
|
if (this->m_data->m_upAxis==1)
|
||||||
|
{
|
||||||
|
center =b3MakeVector3((i + 0.5f) - cells_x * 0.5f, 0.f, (j + 0.5f) - cells_z * 0.5f);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
center =b3MakeVector3((i + 0.5f) - cells_x * 0.5f, (j + 0.5f) - cells_z * 0.5f,0.f );
|
||||||
|
}
|
||||||
|
m_renderer->registerGraphicsInstance(cubeId,center,orn,color,scaling);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SimpleOpenGL2App::registerGraphicsUnitSphereShape(EnumSphereLevelOfDetail lod, int textureId)
|
||||||
|
{
|
||||||
|
|
||||||
|
int strideInBytes = 9*sizeof(float);
|
||||||
|
|
||||||
|
int graphicsShapeIndex = -1;
|
||||||
|
|
||||||
|
switch (lod)
|
||||||
|
{
|
||||||
|
case SPHERE_LOD_POINT_SPRITE:
|
||||||
|
{
|
||||||
|
int numVertices = sizeof(point_sphere_vertices)/strideInBytes;
|
||||||
|
int numIndices = sizeof(point_sphere_indices)/sizeof(int);
|
||||||
|
graphicsShapeIndex = m_renderer->registerShape(&point_sphere_vertices[0],numVertices,point_sphere_indices,numIndices,B3_GL_POINTS,textureId);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case SPHERE_LOD_LOW:
|
||||||
|
{
|
||||||
|
int numVertices = sizeof(low_sphere_vertices)/strideInBytes;
|
||||||
|
int numIndices = sizeof(low_sphere_indices)/sizeof(int);
|
||||||
|
graphicsShapeIndex = m_renderer->registerShape(&low_sphere_vertices[0],numVertices,low_sphere_indices,numIndices,B3_GL_TRIANGLES,textureId);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SPHERE_LOD_MEDIUM:
|
||||||
|
{
|
||||||
|
int numVertices = sizeof(medium_sphere_vertices)/strideInBytes;
|
||||||
|
int numIndices = sizeof(medium_sphere_indices)/sizeof(int);
|
||||||
|
graphicsShapeIndex = m_renderer->registerShape(&medium_sphere_vertices[0],numVertices,medium_sphere_indices,numIndices,B3_GL_TRIANGLES,textureId);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SPHERE_LOD_HIGH:
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
int numVertices = sizeof(detailed_sphere_vertices)/strideInBytes;
|
||||||
|
int numIndices = sizeof(detailed_sphere_indices)/sizeof(int);
|
||||||
|
graphicsShapeIndex = m_renderer->registerShape(&detailed_sphere_vertices[0],numVertices,detailed_sphere_indices,numIndices,B3_GL_TRIANGLES,textureId);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return graphicsShapeIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int SimpleOpenGL2App::registerCubeShape(float halfExtentsX,float halfExtentsY, float halfExtentsZ, int textureIndex, float textureScaling )
|
||||||
|
{
|
||||||
|
int strideInBytes = 9*sizeof(float);
|
||||||
|
int numVertices = sizeof(cube_vertices_textured)/strideInBytes;
|
||||||
|
int numIndices = sizeof(cube_indices)/sizeof(int);
|
||||||
|
|
||||||
|
b3AlignedObjectArray<GLInstanceVertex> verts;
|
||||||
|
verts.resize(numVertices);
|
||||||
|
for (int i=0;i<numVertices;i++)
|
||||||
|
{
|
||||||
|
verts[i].xyzw[0] = halfExtentsX*cube_vertices_textured[i*9];
|
||||||
|
verts[i].xyzw[1] = halfExtentsY*cube_vertices_textured[i*9+1];
|
||||||
|
verts[i].xyzw[2] = halfExtentsZ*cube_vertices_textured[i*9+2];
|
||||||
|
verts[i].xyzw[3] = cube_vertices_textured[i*9+3];
|
||||||
|
verts[i].normal[0] = cube_vertices_textured[i*9+4];
|
||||||
|
verts[i].normal[1]= cube_vertices_textured[i*9+5];
|
||||||
|
verts[i].normal[2] = cube_vertices_textured[i*9+6];
|
||||||
|
verts[i].uv[0] = cube_vertices_textured[i*9+7]*textureScaling;
|
||||||
|
verts[i].uv[1] = cube_vertices_textured[i*9+8]*textureScaling;
|
||||||
|
}
|
||||||
|
|
||||||
|
int shapeId = m_renderer->registerShape(&verts[0].xyzw[0],numVertices,cube_indices,numIndices,B3_GL_TRIANGLES,textureIndex);
|
||||||
|
return shapeId;
|
||||||
|
}
|
||||||
@@ -20,14 +20,9 @@ public:
|
|||||||
virtual void drawText( const char* txt, int posX, int posY, float size);
|
virtual void drawText( const char* txt, int posX, int posY, float size);
|
||||||
virtual void drawTexturedRect(float x0, float y0, float x1, float y1, float color[4], float u0,float v0, float u1, float v1, int useRGBA){};
|
virtual void drawTexturedRect(float x0, float y0, float x1, float y1, float color[4], float u0,float v0, float u1, float v1, int useRGBA){};
|
||||||
virtual void setBackgroundColor(float red, float green, float blue);
|
virtual void setBackgroundColor(float red, float green, float blue);
|
||||||
virtual int registerCubeShape(float halfExtentsX,float halfExtentsY, float halfExtentsZ, int textureIndex = -1, float textureScaling = 1)
|
virtual int registerCubeShape(float halfExtentsX,float halfExtentsY, float halfExtentsZ, int textureIndex = -1, float textureScaling = 1);
|
||||||
{
|
|
||||||
return 0;
|
virtual int registerGraphicsUnitSphereShape(EnumSphereLevelOfDetail lod, int textureId=-1);
|
||||||
}
|
|
||||||
virtual int registerGraphicsUnitSphereShape(EnumSphereLevelOfDetail lod, int textureId=-1)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
virtual void drawText3D( const char* txt, float posX, float posZY, float posZ, float size);
|
virtual void drawText3D( const char* txt, float posX, float posZY, float posZ, float size);
|
||||||
virtual void registerGrid(int xres, int yres, float color0[4], float color1[4]);
|
virtual void registerGrid(int xres, int yres, float color0[4], float color1[4]);
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,63 @@
|
|||||||
#include "SimpleOpenGL2Renderer.h"
|
#include "SimpleOpenGL2Renderer.h"
|
||||||
#include "OpenGL2Include.h"
|
#include "OpenGL2Include.h"
|
||||||
#include "Bullet3Common/b3Vector3.h"
|
#include "Bullet3Common/b3Vector3.h"
|
||||||
|
#include "Bullet3Common/b3AlignedObjectArray.h"
|
||||||
|
#include "GLInstanceGraphicsShape.h"
|
||||||
|
#include "Bullet3Common/b3Quaternion.h"
|
||||||
|
#include "Bullet3Common/b3Transform.h"
|
||||||
|
|
||||||
|
B3_ATTRIBUTE_ALIGNED16(struct) SimpleGL2Shape
|
||||||
|
{
|
||||||
|
B3_DECLARE_ALIGNED_ALLOCATOR();
|
||||||
|
|
||||||
|
int m_textureIndex;
|
||||||
|
int m_primitiveType;
|
||||||
|
b3AlignedObjectArray<int> m_indices;
|
||||||
|
b3AlignedObjectArray<GLInstanceVertex> m_vertices;
|
||||||
|
b3Vector3 m_scaling;
|
||||||
|
};
|
||||||
|
|
||||||
|
B3_ATTRIBUTE_ALIGNED16(struct) SimpleGL2Instance
|
||||||
|
{
|
||||||
|
B3_DECLARE_ALIGNED_ALLOCATOR();
|
||||||
|
|
||||||
|
int m_shapeIndex;
|
||||||
|
b3Vector3 m_position;
|
||||||
|
b3Quaternion orn;
|
||||||
|
b3Vector3 m_rgbColor;
|
||||||
|
b3Vector3 m_scaling;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct InternalTextureHandle2
|
||||||
|
{
|
||||||
|
GLuint m_glTexture;
|
||||||
|
int m_width;
|
||||||
|
int m_height;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SimpleOpenGL2RendererInternalData
|
||||||
|
{
|
||||||
|
int m_width;
|
||||||
|
int m_height;
|
||||||
|
SimpleCamera m_camera;
|
||||||
|
b3AlignedObjectArray<SimpleGL2Shape*> m_shapes;
|
||||||
|
b3AlignedObjectArray<SimpleGL2Instance> m_graphicsInstances;
|
||||||
|
b3AlignedObjectArray<InternalTextureHandle2> m_textureHandles;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
SimpleOpenGL2Renderer::SimpleOpenGL2Renderer(int width, int height)
|
SimpleOpenGL2Renderer::SimpleOpenGL2Renderer(int width, int height)
|
||||||
:m_width(width),
|
|
||||||
m_height(height)
|
|
||||||
{
|
{
|
||||||
|
m_data = new SimpleOpenGL2RendererInternalData;
|
||||||
|
m_data->m_width = width;
|
||||||
|
m_data->m_height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
SimpleOpenGL2Renderer::~SimpleOpenGL2Renderer()
|
||||||
|
{
|
||||||
|
delete m_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleOpenGL2Renderer::init()
|
void SimpleOpenGL2Renderer::init()
|
||||||
@@ -17,11 +67,11 @@ void SimpleOpenGL2Renderer::init()
|
|||||||
|
|
||||||
const CommonCameraInterface* SimpleOpenGL2Renderer::getActiveCamera() const
|
const CommonCameraInterface* SimpleOpenGL2Renderer::getActiveCamera() const
|
||||||
{
|
{
|
||||||
return &m_camera;
|
return &m_data->m_camera;
|
||||||
}
|
}
|
||||||
CommonCameraInterface* SimpleOpenGL2Renderer::getActiveCamera()
|
CommonCameraInterface* SimpleOpenGL2Renderer::getActiveCamera()
|
||||||
{
|
{
|
||||||
return &m_camera;
|
return &m_data->m_camera;
|
||||||
}
|
}
|
||||||
void SimpleOpenGL2Renderer::setActiveCamera(CommonCameraInterface* cam)
|
void SimpleOpenGL2Renderer::setActiveCamera(CommonCameraInterface* cam)
|
||||||
{
|
{
|
||||||
@@ -32,11 +82,11 @@ void SimpleOpenGL2Renderer::updateCamera(int upAxis)
|
|||||||
{
|
{
|
||||||
float projection[16];
|
float projection[16];
|
||||||
float view[16];
|
float view[16];
|
||||||
m_camera.setAspectRatio((float)m_width/(float)m_height);
|
getActiveCamera()->setAspectRatio((float)m_data->m_width/(float)m_data->m_height);
|
||||||
m_camera.setCameraUpAxis(upAxis);
|
getActiveCamera()->setCameraUpAxis(upAxis);
|
||||||
m_camera.update();
|
m_data->m_camera.update(); //??
|
||||||
m_camera.getCameraProjectionMatrix(projection);
|
getActiveCamera()->getCameraProjectionMatrix(projection);
|
||||||
m_camera.getCameraViewMatrix(view);
|
getActiveCamera()->getCameraViewMatrix(view);
|
||||||
GLfloat projMat[16];
|
GLfloat projMat[16];
|
||||||
GLfloat viewMat[16];
|
GLfloat viewMat[16];
|
||||||
for (int i=0;i<16;i++)
|
for (int i=0;i<16;i++)
|
||||||
@@ -55,6 +105,14 @@ void SimpleOpenGL2Renderer::updateCamera(int upAxis)
|
|||||||
|
|
||||||
void SimpleOpenGL2Renderer::removeAllInstances()
|
void SimpleOpenGL2Renderer::removeAllInstances()
|
||||||
{
|
{
|
||||||
|
for (int i=0;i<m_data->m_shapes.size();i++)
|
||||||
|
{
|
||||||
|
delete m_data->m_shapes[i];
|
||||||
|
}
|
||||||
|
m_data->m_shapes.clear();
|
||||||
|
m_data->m_graphicsInstances.clear();
|
||||||
|
//also destroy textures?
|
||||||
|
m_data->m_textureHandles.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -76,7 +134,7 @@ void SimpleOpenGL2Renderer::writeSingleInstanceScaleToCPU(double* scale, int src
|
|||||||
|
|
||||||
int SimpleOpenGL2Renderer::getTotalNumInstances() const
|
int SimpleOpenGL2Renderer::getTotalNumInstances() const
|
||||||
{
|
{
|
||||||
return 0;
|
return m_data->m_graphicsInstances.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleOpenGL2Renderer::getCameraViewMatrix(float viewMat[16]) const
|
void SimpleOpenGL2Renderer::getCameraViewMatrix(float viewMat[16]) const
|
||||||
@@ -90,21 +148,323 @@ void SimpleOpenGL2Renderer::getCameraProjectionMatrix(float projMat[16]) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SimpleOpenGL2Renderer::renderScene()
|
void SimpleOpenGL2Renderer::drawOpenGL(int instanceIndex)
|
||||||
{
|
{
|
||||||
|
const SimpleGL2Instance& inst = m_data->m_graphicsInstances[instanceIndex];
|
||||||
|
const SimpleGL2Shape* shape = m_data->m_shapes[inst.m_shapeIndex];
|
||||||
|
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
b3Transform tr;
|
||||||
|
tr.setOrigin(b3MakeVector3(inst.m_position[0],inst.m_position[1],inst.m_position[2]));
|
||||||
|
tr.setRotation(b3Quaternion(inst.orn[0],inst.orn[1],inst.orn[2],inst.orn[3]));
|
||||||
|
|
||||||
|
b3Scalar m[16];
|
||||||
|
|
||||||
|
tr.getOpenGLMatrix(m);
|
||||||
|
|
||||||
|
#ifdef B3_USE_DOUBLE_PRECISION
|
||||||
|
glMultMatrixd(m);
|
||||||
|
#else
|
||||||
|
glMultMatrixf(m);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
glMatrixMode(GL_TEXTURE);
|
||||||
|
glLoadIdentity();
|
||||||
|
glScalef(0.025f,0.025f,0.025f);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
|
||||||
|
static const GLfloat planex[]={1,0,0,0};
|
||||||
|
// static const GLfloat planey[]={0,1,0,0};
|
||||||
|
static const GLfloat planez[]={0,0,1,0};
|
||||||
|
glTexGenfv(GL_S,GL_OBJECT_PLANE,planex);
|
||||||
|
glTexGenfv(GL_T,GL_OBJECT_PLANE,planez);
|
||||||
|
glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR);
|
||||||
|
glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR);
|
||||||
|
glEnable(GL_TEXTURE_GEN_S);
|
||||||
|
glEnable(GL_TEXTURE_GEN_T);
|
||||||
|
glEnable(GL_TEXTURE_GEN_R);
|
||||||
|
m_textureinitialized=true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//drawCoordSystem();
|
||||||
|
|
||||||
|
//glPushMatrix();
|
||||||
|
// glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
|
||||||
|
// glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
|
||||||
|
// glMatrixMode(GL_TEXTURE);
|
||||||
|
// glLoadIdentity();
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
|
||||||
|
glEnable(GL_COLOR_MATERIAL);
|
||||||
|
|
||||||
|
if(shape->m_textureIndex>=0)
|
||||||
|
{
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
activateTexture(shape->m_textureIndex);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
glColor3f(inst.m_rgbColor[0],inst.m_rgbColor[1], inst.m_rgbColor[2]);
|
||||||
|
glScalef(inst.m_scaling[0],inst.m_scaling[1],inst.m_scaling[2]);
|
||||||
|
glShadeModel(GL_SMOOTH);
|
||||||
|
|
||||||
|
glBegin (GL_TRIANGLES);
|
||||||
|
for (int i=0;i<shape->m_indices.size();i+=3)
|
||||||
|
{
|
||||||
|
for (int v=0;v<3;v++)
|
||||||
|
{
|
||||||
|
const GLInstanceVertex& vtx0 = shape->m_vertices[shape->m_indices[i+v]];
|
||||||
|
glNormal3f(vtx0.normal[0],vtx0.normal[1],vtx0.normal[2]);
|
||||||
|
glTexCoord2f(vtx0.uv[0],vtx0.uv[1]);
|
||||||
|
glVertex3f (vtx0.xyzw[0],vtx0.xyzw[1],vtx0.xyzw[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SimpleOpenGL2Renderer::drawSceneInternal(int pass, int cameraUpAxis)
|
||||||
|
{
|
||||||
|
for (int i=0;i<m_data->m_graphicsInstances.size();i++)
|
||||||
|
{
|
||||||
|
drawOpenGL(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
b3Scalar m[16];
|
||||||
|
b3Matrix3x3 rot;rot.setIdentity();
|
||||||
|
const int numObjects=dynamicsWorld->getNumCollisionObjects();
|
||||||
|
btVector3 wireColor(1,0,0);
|
||||||
|
//glDisable(GL_CULL_FACE);
|
||||||
|
|
||||||
|
for(int i=0;i<numObjects;i++)
|
||||||
|
{
|
||||||
|
const btCollisionObject* colObj=dynamicsWorld->getCollisionObjectArray()[i];
|
||||||
|
const btRigidBody* body=btRigidBody::upcast(colObj);
|
||||||
|
if(body&&body->getMotionState())
|
||||||
|
{
|
||||||
|
btDefaultMotionState* myMotionState = (btDefaultMotionState*)body->getMotionState();
|
||||||
|
myMotionState->m_graphicsWorldTrans.getOpenGLMatrix(m);
|
||||||
|
rot=myMotionState->m_graphicsWorldTrans.getBasis();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
colObj->getWorldTransform().getOpenGLMatrix(m);
|
||||||
|
rot=colObj->getWorldTransform().getBasis();
|
||||||
|
}
|
||||||
|
btVector3 wireColor(1.f,1.0f,0.5f); //wants deactivation
|
||||||
|
if(i&1) wireColor=btVector3(0.f,0.0f,1.f);
|
||||||
|
///color differently for active, sleeping, wantsdeactivation states
|
||||||
|
if (colObj->getActivationState() == 1) //active
|
||||||
|
{
|
||||||
|
if (i & 1)
|
||||||
|
{
|
||||||
|
wireColor += btVector3 (1.f,0.f,0.f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wireColor += btVector3 (.5f,0.f,0.f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(colObj->getActivationState()==2) //ISLAND_SLEEPING
|
||||||
|
{
|
||||||
|
if(i&1)
|
||||||
|
{
|
||||||
|
wireColor += btVector3 (0.f,1.f, 0.f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wireColor += btVector3 (0.f,0.5f,0.f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
btVector3 aabbMin(0,0,0),aabbMax(0,0,0);
|
||||||
|
//m_dynamicsWorld->getBroadphase()->getBroadphaseAabb(aabbMin,aabbMax);
|
||||||
|
|
||||||
|
aabbMin-=btVector3(BT_LARGE_FLOAT,BT_LARGE_FLOAT,BT_LARGE_FLOAT);
|
||||||
|
aabbMax+=btVector3(BT_LARGE_FLOAT,BT_LARGE_FLOAT,BT_LARGE_FLOAT);
|
||||||
|
// printf("aabbMin=(%f,%f,%f)\n",aabbMin.getX(),aabbMin.getY(),aabbMin.getZ());
|
||||||
|
// printf("aabbMax=(%f,%f,%f)\n",aabbMax.getX(),aabbMax.getY(),aabbMax.getZ());
|
||||||
|
// m_dynamicsWorld->getDebugDrawer()->drawAabb(aabbMin,aabbMax,btVector3(1,1,1));
|
||||||
|
|
||||||
|
//switch(pass)
|
||||||
|
|
||||||
|
//if (!(getDebugMode()& btIDebugDraw::DBG_DrawWireframe))
|
||||||
|
int debugMode = 0;//getDebugMode()
|
||||||
|
//btVector3 m_sundirection(-1,-1,-1);
|
||||||
|
|
||||||
|
btVector3 m_sundirection(btVector3(1,-2,1)*1000);
|
||||||
|
if (cameraUpAxis==2)
|
||||||
|
{
|
||||||
|
m_sundirection = btVector3(1,1,-2)*1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(pass)
|
||||||
|
{
|
||||||
|
case 0: drawOpenGL(m,colObj->getCollisionShape(),wireColor,debugMode,aabbMin,aabbMax);break;
|
||||||
|
case 1: drawShadow(m,m_sundirection*rot,colObj->getCollisionShape(),aabbMin,aabbMax);break;
|
||||||
|
case 2: drawOpenGL(m,colObj->getCollisionShape(),wireColor*b3Scalar(0.3),0,aabbMin,aabbMax);break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SimpleOpenGL2Renderer::renderScene()
|
||||||
|
{
|
||||||
|
GLfloat light_ambient[] = { b3Scalar(0.2), b3Scalar(0.2), b3Scalar(0.2), b3Scalar(1.0) };
|
||||||
|
GLfloat light_diffuse[] = { b3Scalar(1.0), b3Scalar(1.0), b3Scalar(1.0), b3Scalar(1.0) };
|
||||||
|
GLfloat light_specular[] = { b3Scalar(1.0), b3Scalar(1.0), b3Scalar(1.0), b3Scalar(1.0 )};
|
||||||
|
/* light_position is NOT default value */
|
||||||
|
GLfloat light_position0[] = { b3Scalar(1.0), b3Scalar(10.0), b3Scalar(1.0), b3Scalar(0.0 )};
|
||||||
|
GLfloat light_position1[] = { b3Scalar(-1.0), b3Scalar(-10.0), b3Scalar(-1.0), b3Scalar(0.0) };
|
||||||
|
|
||||||
|
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
|
||||||
|
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
|
||||||
|
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
|
||||||
|
glLightfv(GL_LIGHT0, GL_POSITION, light_position0);
|
||||||
|
|
||||||
|
glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient);
|
||||||
|
glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse);
|
||||||
|
glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular);
|
||||||
|
glLightfv(GL_LIGHT1, GL_POSITION, light_position1);
|
||||||
|
|
||||||
|
glEnable(GL_LIGHTING);
|
||||||
|
glEnable(GL_LIGHT0);
|
||||||
|
glEnable(GL_LIGHT1);
|
||||||
|
|
||||||
|
|
||||||
|
glShadeModel(GL_SMOOTH);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glDepthFunc(GL_LESS);
|
||||||
|
|
||||||
|
drawSceneInternal(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int SimpleOpenGL2Renderer::registerTexture(const unsigned char* texels, int width, int height)
|
||||||
|
{
|
||||||
|
b3Assert(glGetError() ==GL_NO_ERROR);
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
int textureIndex = m_data->m_textureHandles.size();
|
||||||
|
// const GLubyte* image= (const GLubyte*)texels;
|
||||||
|
GLuint textureHandle;
|
||||||
|
glGenTextures(1,(GLuint*)&textureHandle);
|
||||||
|
glBindTexture(GL_TEXTURE_2D,textureHandle);
|
||||||
|
|
||||||
|
b3Assert(glGetError() ==GL_NO_ERROR);
|
||||||
|
|
||||||
|
InternalTextureHandle2 h;
|
||||||
|
h.m_glTexture = textureHandle;
|
||||||
|
h.m_width = width;
|
||||||
|
h.m_height = height;
|
||||||
|
|
||||||
|
m_data->m_textureHandles.push_back(h);
|
||||||
|
updateTexture(textureIndex, texels);
|
||||||
|
return textureIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SimpleOpenGL2Renderer::updateTexture(int textureIndex, const unsigned char* texels)
|
||||||
|
{
|
||||||
|
if (textureIndex>=0)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
b3Assert(glGetError() ==GL_NO_ERROR);
|
||||||
|
InternalTextureHandle2& h = m_data->m_textureHandles[textureIndex];
|
||||||
|
|
||||||
|
//textures need to be flipped for OpenGL...
|
||||||
|
b3AlignedObjectArray<unsigned char> flippedTexels;
|
||||||
|
flippedTexels.resize(h.m_width* h.m_height * 3);
|
||||||
|
for (int i = 0; i < h.m_width; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < h.m_height; j++)
|
||||||
|
{
|
||||||
|
flippedTexels[(i + j*h.m_width) * 3] = texels[(i + (h.m_height - 1 -j )*h.m_width) * 3];
|
||||||
|
flippedTexels[(i + j*h.m_width) * 3+1] = texels[(i + (h.m_height - 1 - j)*h.m_width) * 3+1];
|
||||||
|
flippedTexels[(i + j*h.m_width) * 3+2] = texels[(i + (h.m_height - 1 - j)*h.m_width) * 3+2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D,h.m_glTexture);
|
||||||
|
b3Assert(glGetError() ==GL_NO_ERROR);
|
||||||
|
// const GLubyte* image= (const GLubyte*)texels;
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, h.m_width,h.m_height,0,GL_RGB,GL_UNSIGNED_BYTE,&flippedTexels[0]);
|
||||||
|
b3Assert(glGetError() ==GL_NO_ERROR);
|
||||||
|
glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
|
b3Assert(glGetError() ==GL_NO_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SimpleOpenGL2Renderer::activateTexture(int textureIndex)
|
||||||
|
{
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
|
||||||
|
if (textureIndex>=0)
|
||||||
|
{
|
||||||
|
glBindTexture(GL_TEXTURE_2D,m_data->m_textureHandles[textureIndex].m_glTexture);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
glBindTexture(GL_TEXTURE_2D,0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int SimpleOpenGL2Renderer::registerGraphicsInstance(int shapeIndex, const double* position, const double* quaternion, const double* color, const double* scaling)
|
int SimpleOpenGL2Renderer::registerGraphicsInstance(int shapeIndex, const double* position, const double* quaternion, const double* color, const double* scaling)
|
||||||
{
|
{
|
||||||
return 0;
|
int sz = m_data->m_graphicsInstances.size();
|
||||||
|
SimpleGL2Instance& instance = m_data->m_graphicsInstances.expand();
|
||||||
|
instance.m_shapeIndex = shapeIndex;
|
||||||
|
instance.m_position[0] = position[0];
|
||||||
|
instance.m_position[1] = position[1];
|
||||||
|
instance.m_position[2] = position[2];
|
||||||
|
instance.orn[0] = quaternion[0];
|
||||||
|
instance.orn[1] = quaternion[1];
|
||||||
|
instance.orn[2] = quaternion[2];
|
||||||
|
instance.orn[3] = quaternion[3];
|
||||||
|
instance.m_rgbColor[0] = color[0];
|
||||||
|
instance.m_rgbColor[1] = color[1];
|
||||||
|
instance.m_rgbColor[2] = color[2];
|
||||||
|
instance.m_scaling[0] = scaling[0];
|
||||||
|
instance.m_scaling[1] = scaling[1];
|
||||||
|
instance.m_scaling[2] = scaling[2];
|
||||||
|
return sz;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SimpleOpenGL2Renderer::registerGraphicsInstance(int shapeIndex, const float* position, const float* quaternion, const float* color, const float* scaling)
|
int SimpleOpenGL2Renderer::registerGraphicsInstance(int shapeIndex, const float* position, const float* quaternion, const float* color, const float* scaling)
|
||||||
{
|
{
|
||||||
return 0;
|
int sz = m_data->m_graphicsInstances.size();
|
||||||
|
SimpleGL2Instance& instance = m_data->m_graphicsInstances.expand();
|
||||||
|
instance.m_shapeIndex = shapeIndex;
|
||||||
|
instance.m_position[0] = position[0];
|
||||||
|
instance.m_position[1] = position[1];
|
||||||
|
instance.m_position[2] = position[2];
|
||||||
|
instance.orn[0] = quaternion[0];
|
||||||
|
instance.orn[1] = quaternion[1];
|
||||||
|
instance.orn[2] = quaternion[2];
|
||||||
|
instance.orn[3] = quaternion[3];
|
||||||
|
instance.m_rgbColor[0] = color[0];
|
||||||
|
instance.m_rgbColor[1] = color[1];
|
||||||
|
instance.m_rgbColor[2] = color[2];
|
||||||
|
instance.m_scaling[0] = scaling[0];
|
||||||
|
instance.m_scaling[1] = scaling[1];
|
||||||
|
instance.m_scaling[2] = scaling[2];
|
||||||
|
return sz;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleOpenGL2Renderer::drawLines(const float* positions, const float color[4], int numPoints, int pointStrideInBytes, const unsigned int* indices, int numIndices, float pointDrawSize)
|
void SimpleOpenGL2Renderer::drawLines(const float* positions, const float color[4], int numPoints, int pointStrideInBytes, const unsigned int* indices, int numIndices, float pointDrawSize)
|
||||||
@@ -141,25 +501,91 @@ void SimpleOpenGL2Renderer::drawLine(const float from[4], const float to[4], con
|
|||||||
glVertex3d(to[0],to[1],to[2]);
|
glVertex3d(to[0],to[1],to[2]);
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int SimpleOpenGL2Renderer::registerShape(const float* vertices, int numvertices, const int* indices, int numIndices,int primitiveType, int textureIndex)
|
int SimpleOpenGL2Renderer::registerShape(const float* vertices, int numvertices, const int* indices, int numIndices,int primitiveType, int textureIndex)
|
||||||
{
|
{
|
||||||
return 0;
|
|
||||||
|
SimpleGL2Shape* shape = new SimpleGL2Shape();
|
||||||
|
shape->m_textureIndex = textureIndex;
|
||||||
|
shape->m_indices.resize(numIndices);
|
||||||
|
|
||||||
|
for (int i=0;i<numIndices;i++)
|
||||||
|
{
|
||||||
|
shape->m_indices[i]=indices[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
shape->m_vertices.resize(numvertices);
|
||||||
|
|
||||||
|
for (int v=0;v<numvertices;v++)
|
||||||
|
{
|
||||||
|
GLInstanceVertex& vtx = shape->m_vertices[v];
|
||||||
|
vtx.xyzw[0] = vertices[9*v+0];
|
||||||
|
vtx.xyzw[1] = vertices[9*v+1];
|
||||||
|
vtx.xyzw[2] = vertices[9*v+2];
|
||||||
|
vtx.xyzw[3] = vertices[9*v+3];
|
||||||
|
vtx.normal[0] = vertices[9*v+4];
|
||||||
|
vtx.normal[1] = vertices[9*v+5];
|
||||||
|
vtx.normal[2] = vertices[9*v+6];
|
||||||
|
vtx.uv[0] = vertices[9*v+7];
|
||||||
|
vtx.uv[1] = vertices[9*v+8];
|
||||||
|
}
|
||||||
|
int sz = m_data->m_shapes.size();
|
||||||
|
m_data->m_shapes.push_back(shape);
|
||||||
|
return sz;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleOpenGL2Renderer::writeSingleInstanceTransformToCPU(const float* position, const float* orientation, int srcIndex)
|
void SimpleOpenGL2Renderer::writeSingleInstanceTransformToCPU(const float* position, const float* orientation, int srcIndex)
|
||||||
{
|
{
|
||||||
|
m_data->m_graphicsInstances[srcIndex].m_position[0] = position[0];
|
||||||
|
m_data->m_graphicsInstances[srcIndex].m_position[1] = position[1];
|
||||||
|
m_data->m_graphicsInstances[srcIndex].m_position[2] = position[2];
|
||||||
|
|
||||||
|
m_data->m_graphicsInstances[srcIndex].orn[0] = orientation[0];
|
||||||
|
m_data->m_graphicsInstances[srcIndex].orn[1] = orientation[1];
|
||||||
|
m_data->m_graphicsInstances[srcIndex].orn[2] = orientation[2];
|
||||||
|
m_data->m_graphicsInstances[srcIndex].orn[3] = orientation[3];
|
||||||
|
|
||||||
}
|
}
|
||||||
void SimpleOpenGL2Renderer::writeSingleInstanceTransformToCPU(const double* position, const double* orientation, int srcIndex)
|
void SimpleOpenGL2Renderer::writeSingleInstanceTransformToCPU(const double* position, const double* orientation, int srcIndex)
|
||||||
{
|
{
|
||||||
|
m_data->m_graphicsInstances[srcIndex].m_position[0] = position[0];
|
||||||
|
m_data->m_graphicsInstances[srcIndex].m_position[1] = position[1];
|
||||||
|
m_data->m_graphicsInstances[srcIndex].m_position[2] = position[2];
|
||||||
|
|
||||||
|
m_data->m_graphicsInstances[srcIndex].orn[0] = orientation[0];
|
||||||
|
m_data->m_graphicsInstances[srcIndex].orn[1] = orientation[1];
|
||||||
|
m_data->m_graphicsInstances[srcIndex].orn[2] = orientation[2];
|
||||||
|
m_data->m_graphicsInstances[srcIndex].orn[3] = orientation[3];
|
||||||
}
|
}
|
||||||
void SimpleOpenGL2Renderer::writeTransforms()
|
void SimpleOpenGL2Renderer::writeTransforms()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SimpleOpenGL2Renderer::resize(int width, int height)
|
||||||
|
{
|
||||||
|
m_data->m_width = width;
|
||||||
|
m_data->m_height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SimpleOpenGL2Renderer::getScreenWidth()
|
||||||
|
{
|
||||||
|
return m_data->m_width;
|
||||||
|
}
|
||||||
|
int SimpleOpenGL2Renderer::getScreenHeight()
|
||||||
|
{
|
||||||
|
return m_data->m_height;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void SimpleOpenGL2Renderer::drawLine(const double from[4], const double to[4], const double color[4], double lineWidth)
|
void SimpleOpenGL2Renderer::drawLine(const double from[4], const double to[4], const double color[4], double lineWidth)
|
||||||
{
|
{
|
||||||
|
glLineWidth(lineWidth);
|
||||||
|
glBegin(GL_LINES);
|
||||||
|
glColor3f(color[0],color[1],color[2]);
|
||||||
|
glVertex3d(from[0],from[1],from[2]);
|
||||||
|
glVertex3d(to[0],to[1],to[2]);
|
||||||
|
glEnd();
|
||||||
}
|
}
|
||||||
void SimpleOpenGL2Renderer::drawPoint(const float* position, const float color[4], float pointDrawSize)
|
void SimpleOpenGL2Renderer::drawPoint(const float* position, const float color[4], float pointDrawSize)
|
||||||
{
|
{
|
||||||
@@ -170,6 +596,23 @@ void SimpleOpenGL2Renderer::drawPoint(const double* position, const double color
|
|||||||
|
|
||||||
void SimpleOpenGL2Renderer::updateShape(int shapeIndex, const float* vertices)
|
void SimpleOpenGL2Renderer::updateShape(int shapeIndex, const float* vertices)
|
||||||
{
|
{
|
||||||
|
SimpleGL2Shape* shape = m_data->m_shapes[shapeIndex];
|
||||||
|
int numvertices = shape->m_vertices.size();
|
||||||
|
|
||||||
|
for (int i=0;i<numvertices;i++)
|
||||||
|
{
|
||||||
|
shape->m_vertices[i].xyzw[0] = vertices[9*i+0];
|
||||||
|
shape->m_vertices[i].xyzw[1] = vertices[9*i+1];
|
||||||
|
shape->m_vertices[i].xyzw[2] = vertices[9*i+2];
|
||||||
|
shape->m_vertices[i].xyzw[3] = vertices[9*i+3];
|
||||||
|
|
||||||
|
shape->m_vertices[i].normal[0] = vertices[9*i+4];
|
||||||
|
shape->m_vertices[i].normal[1] = vertices[9*i+5];
|
||||||
|
shape->m_vertices[i].normal[2] = vertices[9*i+6];
|
||||||
|
|
||||||
|
shape->m_vertices[i].uv[0] = vertices[9*i+7];
|
||||||
|
shape->m_vertices[i].uv[1] = vertices[9*i+8];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleOpenGL2Renderer::enableBlend(bool blend)
|
void SimpleOpenGL2Renderer::enableBlend(bool blend)
|
||||||
|
|||||||
@@ -5,13 +5,17 @@
|
|||||||
#include "../CommonInterfaces/CommonRenderInterface.h"
|
#include "../CommonInterfaces/CommonRenderInterface.h"
|
||||||
#include "SimpleCamera.h"
|
#include "SimpleCamera.h"
|
||||||
|
|
||||||
struct SimpleOpenGL2Renderer : public CommonRenderInterface
|
class SimpleOpenGL2Renderer : public CommonRenderInterface
|
||||||
{
|
{
|
||||||
int m_width;
|
struct SimpleOpenGL2RendererInternalData* m_data;
|
||||||
int m_height;
|
|
||||||
SimpleCamera m_camera;
|
void drawSceneInternal(int pass, int cameraUpAxis);
|
||||||
|
void drawOpenGL(int instanceIndex);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
SimpleOpenGL2Renderer(int width, int height);
|
SimpleOpenGL2Renderer(int width, int height);
|
||||||
|
virtual ~SimpleOpenGL2Renderer();
|
||||||
|
|
||||||
virtual void init();
|
virtual void init();
|
||||||
|
|
||||||
@@ -21,11 +25,7 @@ struct SimpleOpenGL2Renderer : public CommonRenderInterface
|
|||||||
virtual CommonCameraInterface* getActiveCamera();
|
virtual CommonCameraInterface* getActiveCamera();
|
||||||
virtual void setActiveCamera(CommonCameraInterface* cam);
|
virtual void setActiveCamera(CommonCameraInterface* cam);
|
||||||
|
|
||||||
virtual void resize(int width, int height)
|
virtual void resize(int width, int height);
|
||||||
{
|
|
||||||
m_width = width;
|
|
||||||
m_height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void removeAllInstances();
|
virtual void removeAllInstances();
|
||||||
|
|
||||||
@@ -40,20 +40,11 @@ struct SimpleOpenGL2Renderer : public CommonRenderInterface
|
|||||||
|
|
||||||
virtual void renderScene();
|
virtual void renderScene();
|
||||||
|
|
||||||
virtual int getScreenWidth()
|
virtual int getScreenWidth();
|
||||||
{
|
virtual int getScreenHeight();
|
||||||
return m_width;
|
virtual int registerTexture(const unsigned char* texels, int width, int height);
|
||||||
}
|
virtual void updateTexture(int textureIndex, const unsigned char* texels);
|
||||||
virtual int getScreenHeight()
|
virtual void activateTexture(int textureIndex);
|
||||||
{
|
|
||||||
return m_height;
|
|
||||||
}
|
|
||||||
virtual int registerTexture(const unsigned char* texels, int width, int height)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
virtual void updateTexture(int textureIndex, const unsigned char* texels) {}
|
|
||||||
virtual void activateTexture(int textureIndex) {}
|
|
||||||
|
|
||||||
|
|
||||||
virtual int registerGraphicsInstance(int shapeIndex, const double* position, const double* quaternion, const double* color, const double* scaling);
|
virtual int registerGraphicsInstance(int shapeIndex, const double* position, const double* quaternion, const double* color, const double* scaling);
|
||||||
|
|||||||
@@ -260,6 +260,8 @@ int b3RobotSimulatorClientAPI::loadURDF(const std::string& fileName, const struc
|
|||||||
|
|
||||||
//setting the initial position, orientation and other arguments are optional
|
//setting the initial position, orientation and other arguments are optional
|
||||||
|
|
||||||
|
b3LoadUrdfCommandSetFlags(command,args.m_flags);
|
||||||
|
|
||||||
b3LoadUrdfCommandSetStartPosition(command, args.m_startPosition[0],
|
b3LoadUrdfCommandSetStartPosition(command, args.m_startPosition[0],
|
||||||
args.m_startPosition[1],
|
args.m_startPosition[1],
|
||||||
args.m_startPosition[2]);
|
args.m_startPosition[2]);
|
||||||
|
|||||||
@@ -15,12 +15,14 @@ struct b3RobotSimulatorLoadUrdfFileArgs
|
|||||||
b3Quaternion m_startOrientation;
|
b3Quaternion m_startOrientation;
|
||||||
bool m_forceOverrideFixedBase;
|
bool m_forceOverrideFixedBase;
|
||||||
bool m_useMultiBody;
|
bool m_useMultiBody;
|
||||||
|
int m_flags;
|
||||||
|
|
||||||
b3RobotSimulatorLoadUrdfFileArgs()
|
b3RobotSimulatorLoadUrdfFileArgs()
|
||||||
: m_startPosition(b3MakeVector3(0, 0, 0)),
|
: m_startPosition(b3MakeVector3(0, 0, 0)),
|
||||||
m_startOrientation(b3Quaternion(0, 0, 0, 1)),
|
m_startOrientation(b3Quaternion(0, 0, 0, 1)),
|
||||||
m_forceOverrideFixedBase(false),
|
m_forceOverrideFixedBase(false),
|
||||||
m_useMultiBody(true)
|
m_useMultiBody(true),
|
||||||
|
m_flags(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -61,6 +61,10 @@ template <typename T, typename U> void addJointInfoFromMultiBodyData(const T* mb
|
|||||||
info.m_jointType = mb->m_links[link].m_jointType;
|
info.m_jointType = mb->m_links[link].m_jointType;
|
||||||
info.m_jointDamping = mb->m_links[link].m_jointDamping;
|
info.m_jointDamping = mb->m_links[link].m_jointDamping;
|
||||||
info.m_jointFriction = mb->m_links[link].m_jointFriction;
|
info.m_jointFriction = mb->m_links[link].m_jointFriction;
|
||||||
|
info.m_jointLowerLimit = mb->m_links[link].m_jointLowerLimit;
|
||||||
|
info.m_jointUpperLimit = mb->m_links[link].m_jointUpperLimit;
|
||||||
|
info.m_jointMaxForce = mb->m_links[link].m_jointMaxForce;
|
||||||
|
info.m_jointMaxVelocity = mb->m_links[link].m_jointMaxVelocity;
|
||||||
|
|
||||||
if ((mb->m_links[link].m_jointType == eRevoluteType) ||
|
if ((mb->m_links[link].m_jointType == eRevoluteType) ||
|
||||||
(mb->m_links[link].m_jointType == ePrismaticType)) {
|
(mb->m_links[link].m_jointType == ePrismaticType)) {
|
||||||
|
|||||||
@@ -238,6 +238,19 @@ int b3LoadUrdfCommandSetUseFixedBase(b3SharedMemoryCommandHandle commandHandle,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int b3LoadUrdfCommandSetFlags(b3SharedMemoryCommandHandle commandHandle, int flags)
|
||||||
|
{
|
||||||
|
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*) commandHandle;
|
||||||
|
b3Assert(command);
|
||||||
|
b3Assert(command->m_type == CMD_LOAD_URDF);
|
||||||
|
if (command && (command->m_type == CMD_LOAD_URDF))
|
||||||
|
{
|
||||||
|
command->m_updateFlags |= URDF_ARGS_HAS_CUSTOM_URDF_FLAGS;
|
||||||
|
command->m_urdfArguments.m_urdfFlags = flags;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int b3LoadUrdfCommandSetStartPosition(b3SharedMemoryCommandHandle commandHandle, double startPosX,double startPosY,double startPosZ)
|
int b3LoadUrdfCommandSetStartPosition(b3SharedMemoryCommandHandle commandHandle, double startPosX,double startPosY,double startPosZ)
|
||||||
{
|
{
|
||||||
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*) commandHandle;
|
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*) commandHandle;
|
||||||
@@ -547,10 +560,24 @@ b3SharedMemoryCommandHandle b3RequestActualStateCommandInit(b3PhysicsClientHandl
|
|||||||
struct SharedMemoryCommand* command = cl->getAvailableSharedMemoryCommand();
|
struct SharedMemoryCommand* command = cl->getAvailableSharedMemoryCommand();
|
||||||
b3Assert(command);
|
b3Assert(command);
|
||||||
command->m_type =CMD_REQUEST_ACTUAL_STATE;
|
command->m_type =CMD_REQUEST_ACTUAL_STATE;
|
||||||
|
command->m_updateFlags = 0;
|
||||||
command->m_requestActualStateInformationCommandArgument.m_bodyUniqueId = bodyUniqueId;
|
command->m_requestActualStateInformationCommandArgument.m_bodyUniqueId = bodyUniqueId;
|
||||||
return (b3SharedMemoryCommandHandle) command;
|
return (b3SharedMemoryCommandHandle) command;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int b3RequestActualStateCommandComputeLinkVelocity(b3SharedMemoryCommandHandle commandHandle, int computeLinkVelocity)
|
||||||
|
{
|
||||||
|
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*) commandHandle;
|
||||||
|
b3Assert(command);
|
||||||
|
btAssert(command->m_type == CMD_REQUEST_ACTUAL_STATE);
|
||||||
|
if (computeLinkVelocity && command->m_type == CMD_REQUEST_ACTUAL_STATE)
|
||||||
|
{
|
||||||
|
command->m_updateFlags |= ACTUAL_STATE_COMPUTE_LINKVELOCITY;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int b3GetJointState(b3PhysicsClientHandle physClient, b3SharedMemoryStatusHandle statusHandle, int jointIndex, b3JointSensorState *state)
|
int b3GetJointState(b3PhysicsClientHandle physClient, b3SharedMemoryStatusHandle statusHandle, int jointIndex, b3JointSensorState *state)
|
||||||
{
|
{
|
||||||
const SharedMemoryStatus* status = (const SharedMemoryStatus* ) statusHandle;
|
const SharedMemoryStatus* status = (const SharedMemoryStatus* ) statusHandle;
|
||||||
@@ -604,6 +631,8 @@ int b3GetLinkState(b3PhysicsClientHandle physClient, b3SharedMemoryStatusHandle
|
|||||||
{
|
{
|
||||||
state->m_worldPosition[i] = status->m_sendActualStateArgs.m_linkState[7 * linkIndex + i];
|
state->m_worldPosition[i] = status->m_sendActualStateArgs.m_linkState[7 * linkIndex + i];
|
||||||
state->m_localInertialPosition[i] = status->m_sendActualStateArgs.m_linkLocalInertialFrames[7 * linkIndex + i];
|
state->m_localInertialPosition[i] = status->m_sendActualStateArgs.m_linkLocalInertialFrames[7 * linkIndex + i];
|
||||||
|
state->m_worldLinearVelocity[i] = status->m_sendActualStateArgs.m_linkWorldVelocities[6*linkIndex+i];
|
||||||
|
state->m_worldAngularVelocity[i] = status->m_sendActualStateArgs.m_linkWorldVelocities[6*linkIndex+i+3];
|
||||||
}
|
}
|
||||||
for (int i = 0; i < 4; ++i)
|
for (int i = 0; i < 4; ++i)
|
||||||
{
|
{
|
||||||
@@ -1085,6 +1114,7 @@ int b3SubmitClientCommand(b3PhysicsClientHandle physClient, const b3SharedMemory
|
|||||||
|
|
||||||
b3SharedMemoryStatusHandle b3SubmitClientCommandAndWaitStatus(b3PhysicsClientHandle physClient, const b3SharedMemoryCommandHandle commandHandle)
|
b3SharedMemoryStatusHandle b3SubmitClientCommandAndWaitStatus(b3PhysicsClientHandle physClient, const b3SharedMemoryCommandHandle commandHandle)
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("b3SubmitClientCommandAndWaitStatus");
|
||||||
b3Clock clock;
|
b3Clock clock;
|
||||||
double startTime = clock.getTimeInSeconds();
|
double startTime = clock.getTimeInSeconds();
|
||||||
|
|
||||||
@@ -1098,12 +1128,18 @@ b3SharedMemoryStatusHandle b3SubmitClientCommandAndWaitStatus(b3PhysicsClientHan
|
|||||||
|
|
||||||
double timeOutInSeconds = cl->getTimeOut();
|
double timeOutInSeconds = cl->getTimeOut();
|
||||||
|
|
||||||
|
{
|
||||||
|
B3_PROFILE("b3SubmitClientCommand");
|
||||||
b3SubmitClientCommand(physClient, commandHandle);
|
b3SubmitClientCommand(physClient, commandHandle);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
B3_PROFILE("b3ProcessServerStatus");
|
||||||
while (cl->isConnected() && (statusHandle == 0) && (clock.getTimeInSeconds()-startTime < timeOutInSeconds))
|
while (cl->isConnected() && (statusHandle == 0) && (clock.getTimeInSeconds()-startTime < timeOutInSeconds))
|
||||||
{
|
{
|
||||||
|
clock.usleep(0);
|
||||||
statusHandle = b3ProcessServerStatus(physClient);
|
statusHandle = b3ProcessServerStatus(physClient);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return (b3SharedMemoryStatusHandle)statusHandle;
|
return (b3SharedMemoryStatusHandle)statusHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -217,6 +217,7 @@ int b3LoadUrdfCommandSetStartPosition(b3SharedMemoryCommandHandle commandHandle,
|
|||||||
int b3LoadUrdfCommandSetStartOrientation(b3SharedMemoryCommandHandle commandHandle, double startOrnX,double startOrnY,double startOrnZ, double startOrnW);
|
int b3LoadUrdfCommandSetStartOrientation(b3SharedMemoryCommandHandle commandHandle, double startOrnX,double startOrnY,double startOrnZ, double startOrnW);
|
||||||
int b3LoadUrdfCommandSetUseMultiBody(b3SharedMemoryCommandHandle commandHandle, int useMultiBody);
|
int b3LoadUrdfCommandSetUseMultiBody(b3SharedMemoryCommandHandle commandHandle, int useMultiBody);
|
||||||
int b3LoadUrdfCommandSetUseFixedBase(b3SharedMemoryCommandHandle commandHandle, int useFixedBase);
|
int b3LoadUrdfCommandSetUseFixedBase(b3SharedMemoryCommandHandle commandHandle, int useFixedBase);
|
||||||
|
int b3LoadUrdfCommandSetFlags(b3SharedMemoryCommandHandle commandHandle, int flags);
|
||||||
|
|
||||||
b3SharedMemoryCommandHandle b3LoadBulletCommandInit(b3PhysicsClientHandle physClient, const char* fileName);
|
b3SharedMemoryCommandHandle b3LoadBulletCommandInit(b3PhysicsClientHandle physClient, const char* fileName);
|
||||||
b3SharedMemoryCommandHandle b3SaveBulletCommandInit(b3PhysicsClientHandle physClient, const char* fileName);
|
b3SharedMemoryCommandHandle b3SaveBulletCommandInit(b3PhysicsClientHandle physClient, const char* fileName);
|
||||||
@@ -313,6 +314,8 @@ int b3CreateSensorEnable6DofJointForceTorqueSensor(b3SharedMemoryCommandHandle c
|
|||||||
int b3CreateSensorEnableIMUForLink(b3SharedMemoryCommandHandle commandHandle, int linkIndex, int enable);
|
int b3CreateSensorEnableIMUForLink(b3SharedMemoryCommandHandle commandHandle, int linkIndex, int enable);
|
||||||
|
|
||||||
b3SharedMemoryCommandHandle b3RequestActualStateCommandInit(b3PhysicsClientHandle physClient,int bodyUniqueId);
|
b3SharedMemoryCommandHandle b3RequestActualStateCommandInit(b3PhysicsClientHandle physClient,int bodyUniqueId);
|
||||||
|
int b3RequestActualStateCommandComputeLinkVelocity(b3SharedMemoryCommandHandle commandHandle, int computeLinkVelocity);
|
||||||
|
|
||||||
int b3GetJointState(b3PhysicsClientHandle physClient, b3SharedMemoryStatusHandle statusHandle, int jointIndex, struct b3JointSensorState *state);
|
int b3GetJointState(b3PhysicsClientHandle physClient, b3SharedMemoryStatusHandle statusHandle, int jointIndex, struct b3JointSensorState *state);
|
||||||
int b3GetLinkState(b3PhysicsClientHandle physClient, b3SharedMemoryStatusHandle statusHandle, int linkIndex, struct b3LinkState *state);
|
int b3GetLinkState(b3PhysicsClientHandle physClient, b3SharedMemoryStatusHandle statusHandle, int linkIndex, struct b3LinkState *state);
|
||||||
|
|
||||||
|
|||||||
@@ -358,7 +358,9 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (m_data->m_testBlock1->m_numServerCommands >
|
if (m_data->m_testBlock1->m_numServerCommands >
|
||||||
m_data->m_testBlock1->m_numProcessedServerCommands) {
|
m_data->m_testBlock1->m_numProcessedServerCommands)
|
||||||
|
{
|
||||||
|
B3_PROFILE("processServerCMD");
|
||||||
btAssert(m_data->m_testBlock1->m_numServerCommands ==
|
btAssert(m_data->m_testBlock1->m_numServerCommands ==
|
||||||
m_data->m_testBlock1->m_numProcessedServerCommands + 1);
|
m_data->m_testBlock1->m_numProcessedServerCommands + 1);
|
||||||
|
|
||||||
@@ -368,8 +370,13 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
// EnumSharedMemoryServerStatus s = (EnumSharedMemoryServerStatus)serverCmd.m_type;
|
// EnumSharedMemoryServerStatus s = (EnumSharedMemoryServerStatus)serverCmd.m_type;
|
||||||
// consume the command
|
// consume the command
|
||||||
|
|
||||||
switch (serverCmd.m_type) {
|
switch (serverCmd.m_type)
|
||||||
case CMD_CLIENT_COMMAND_COMPLETED: {
|
{
|
||||||
|
|
||||||
|
case CMD_CLIENT_COMMAND_COMPLETED:
|
||||||
|
{
|
||||||
|
B3_PROFILE("CMD_CLIENT_COMMAND_COMPLETED");
|
||||||
|
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Server completed command");
|
b3Printf("Server completed command");
|
||||||
}
|
}
|
||||||
@@ -378,12 +385,16 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
case CMD_MJCF_LOADING_COMPLETED:
|
case CMD_MJCF_LOADING_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_MJCF_LOADING_COMPLETED");
|
||||||
|
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Server loading the MJCF OK\n");
|
b3Printf("Server loading the MJCF OK\n");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_SDF_LOADING_COMPLETED: {
|
case CMD_SDF_LOADING_COMPLETED:
|
||||||
|
{
|
||||||
|
B3_PROFILE("CMD_SDF_LOADING_COMPLETED");
|
||||||
|
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Server loading the SDF OK\n");
|
b3Printf("Server loading the SDF OK\n");
|
||||||
@@ -392,7 +403,9 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case CMD_URDF_LOADING_COMPLETED: {
|
case CMD_URDF_LOADING_COMPLETED:
|
||||||
|
{
|
||||||
|
B3_PROFILE("CMD_URDF_LOADING_COMPLETED");
|
||||||
|
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Server loading the URDF OK\n");
|
b3Printf("Server loading the URDF OK\n");
|
||||||
@@ -444,19 +457,28 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_DESIRED_STATE_RECEIVED_COMPLETED: {
|
case CMD_DESIRED_STATE_RECEIVED_COMPLETED:
|
||||||
|
{
|
||||||
|
B3_PROFILE("CMD_DESIRED_STATE_RECEIVED_COMPLETED");
|
||||||
|
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Server received desired state");
|
b3Printf("Server received desired state");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_STEP_FORWARD_SIMULATION_COMPLETED: {
|
case CMD_STEP_FORWARD_SIMULATION_COMPLETED:
|
||||||
|
{
|
||||||
|
B3_PROFILE("CMD_STEP_FORWARD_SIMULATION_COMPLETED");
|
||||||
|
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Server completed step simulation");
|
b3Printf("Server completed step simulation");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_URDF_LOADING_FAILED: {
|
case CMD_URDF_LOADING_FAILED:
|
||||||
|
{
|
||||||
|
B3_PROFILE("CMD_URDF_LOADING_FAILED");
|
||||||
|
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Server failed loading the URDF...\n");
|
b3Printf("Server failed loading the URDF...\n");
|
||||||
}
|
}
|
||||||
@@ -465,24 +487,30 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
case CMD_USER_CONSTRAINT_INFO_COMPLETED:
|
case CMD_USER_CONSTRAINT_INFO_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_USER_CONSTRAINT_INFO_COMPLETED");
|
||||||
|
|
||||||
int cid = serverCmd.m_userConstraintResultArgs.m_userConstraintUniqueId;
|
int cid = serverCmd.m_userConstraintResultArgs.m_userConstraintUniqueId;
|
||||||
m_data->m_userConstraintInfoMap.insert(cid,serverCmd.m_userConstraintResultArgs);
|
m_data->m_userConstraintInfoMap.insert(cid,serverCmd.m_userConstraintResultArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_USER_CONSTRAINT_COMPLETED:
|
case CMD_USER_CONSTRAINT_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_USER_CONSTRAINT_COMPLETED");
|
||||||
int cid = serverCmd.m_userConstraintResultArgs.m_userConstraintUniqueId;
|
int cid = serverCmd.m_userConstraintResultArgs.m_userConstraintUniqueId;
|
||||||
m_data->m_userConstraintInfoMap.insert(cid,serverCmd.m_userConstraintResultArgs);
|
m_data->m_userConstraintInfoMap.insert(cid,serverCmd.m_userConstraintResultArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_REMOVE_USER_CONSTRAINT_COMPLETED:
|
case CMD_REMOVE_USER_CONSTRAINT_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_REMOVE_USER_CONSTRAINT_COMPLETED");
|
||||||
int cid = serverCmd.m_userConstraintResultArgs.m_userConstraintUniqueId;
|
int cid = serverCmd.m_userConstraintResultArgs.m_userConstraintUniqueId;
|
||||||
m_data->m_userConstraintInfoMap.remove(cid);
|
m_data->m_userConstraintInfoMap.remove(cid);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_CHANGE_USER_CONSTRAINT_COMPLETED:
|
case CMD_CHANGE_USER_CONSTRAINT_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_CHANGE_USER_CONSTRAINT_COMPLETED");
|
||||||
|
|
||||||
int cid = serverCmd.m_userConstraintResultArgs.m_userConstraintUniqueId;
|
int cid = serverCmd.m_userConstraintResultArgs.m_userConstraintUniqueId;
|
||||||
b3UserConstraint* userConstraintPtr = m_data->m_userConstraintInfoMap[cid];
|
b3UserConstraint* userConstraintPtr = m_data->m_userConstraintInfoMap[cid];
|
||||||
if (userConstraintPtr)
|
if (userConstraintPtr)
|
||||||
@@ -511,26 +539,31 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
case CMD_USER_CONSTRAINT_FAILED:
|
case CMD_USER_CONSTRAINT_FAILED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_USER_CONSTRAINT_FAILED");
|
||||||
b3Warning("createConstraint failed");
|
b3Warning("createConstraint failed");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_REMOVE_USER_CONSTRAINT_FAILED:
|
case CMD_REMOVE_USER_CONSTRAINT_FAILED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_REMOVE_USER_CONSTRAINT_FAILED");
|
||||||
b3Warning("removeConstraint failed");
|
b3Warning("removeConstraint failed");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_CHANGE_USER_CONSTRAINT_FAILED:
|
case CMD_CHANGE_USER_CONSTRAINT_FAILED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_CHANGE_USER_CONSTRAINT_FAILED");
|
||||||
b3Warning("changeConstraint failed");
|
b3Warning("changeConstraint failed");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_ACTUAL_STATE_UPDATE_FAILED:
|
case CMD_ACTUAL_STATE_UPDATE_FAILED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_ACTUAL_STATE_UPDATE_FAILED");
|
||||||
b3Warning("request actual state failed");
|
b3Warning("request actual state failed");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_BODY_INFO_COMPLETED:
|
case CMD_BODY_INFO_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_BODY_INFO_COMPLETED");
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Received body info\n");
|
b3Printf("Received body info\n");
|
||||||
}
|
}
|
||||||
@@ -541,12 +574,14 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
case CMD_MJCF_LOADING_FAILED:
|
case CMD_MJCF_LOADING_FAILED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_MJCF_LOADING_FAILED");
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Server failed loading the MJCF...\n");
|
b3Printf("Server failed loading the MJCF...\n");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_SDF_LOADING_FAILED: {
|
case CMD_SDF_LOADING_FAILED: {
|
||||||
|
B3_PROFILE("CMD_SDF_LOADING_FAILED");
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Server failed loading the SDF...\n");
|
b3Printf("Server failed loading the SDF...\n");
|
||||||
}
|
}
|
||||||
@@ -555,6 +590,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case CMD_BULLET_DATA_STREAM_RECEIVED_COMPLETED: {
|
case CMD_BULLET_DATA_STREAM_RECEIVED_COMPLETED: {
|
||||||
|
B3_PROFILE("CMD_BULLET_DATA_STREAM_RECEIVED_COMPLETED");
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Server received bullet data stream OK\n");
|
b3Printf("Server received bullet data stream OK\n");
|
||||||
}
|
}
|
||||||
@@ -562,6 +598,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_BULLET_DATA_STREAM_RECEIVED_FAILED: {
|
case CMD_BULLET_DATA_STREAM_RECEIVED_FAILED: {
|
||||||
|
B3_PROFILE("CMD_BULLET_DATA_STREAM_RECEIVED_FAILED");
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Server failed receiving bullet data stream\n");
|
b3Printf("Server failed receiving bullet data stream\n");
|
||||||
}
|
}
|
||||||
@@ -570,18 +607,17 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case CMD_ACTUAL_STATE_UPDATE_COMPLETED: {
|
case CMD_ACTUAL_STATE_UPDATE_COMPLETED: {
|
||||||
if (m_data->m_verboseOutput) {
|
B3_PROFILE("CMD_ACTUAL_STATE_UPDATE_COMPLETED");
|
||||||
|
if (m_data->m_verboseOutput)
|
||||||
|
{
|
||||||
b3Printf("Received actual state\n");
|
b3Printf("Received actual state\n");
|
||||||
}
|
|
||||||
SharedMemoryStatus& command = m_data->m_testBlock1->m_serverCommands[0];
|
SharedMemoryStatus& command = m_data->m_testBlock1->m_serverCommands[0];
|
||||||
|
|
||||||
int numQ = command.m_sendActualStateArgs.m_numDegreeOfFreedomQ;
|
int numQ = command.m_sendActualStateArgs.m_numDegreeOfFreedomQ;
|
||||||
int numU = command.m_sendActualStateArgs.m_numDegreeOfFreedomU;
|
int numU = command.m_sendActualStateArgs.m_numDegreeOfFreedomU;
|
||||||
if (m_data->m_verboseOutput) {
|
|
||||||
b3Printf("size Q = %d, size U = %d\n", numQ, numU);
|
b3Printf("size Q = %d, size U = %d\n", numQ, numU);
|
||||||
}
|
|
||||||
char msg[1024];
|
char msg[1024];
|
||||||
|
|
||||||
{
|
{
|
||||||
sprintf(msg, "Q=[");
|
sprintf(msg, "Q=[");
|
||||||
|
|
||||||
@@ -596,11 +632,8 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
sprintf(msg, "%s]", msg);
|
sprintf(msg, "%s]", msg);
|
||||||
}
|
}
|
||||||
if (m_data->m_verboseOutput) {
|
|
||||||
b3Printf(msg);
|
b3Printf(msg);
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
sprintf(msg, "U=[");
|
sprintf(msg, "U=[");
|
||||||
|
|
||||||
for (int i = 0; i < numU; i++) {
|
for (int i = 0; i < numU; i++) {
|
||||||
@@ -613,17 +646,14 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
sprintf(msg, "%s]", msg);
|
sprintf(msg, "%s]", msg);
|
||||||
}
|
|
||||||
if (m_data->m_verboseOutput) {
|
|
||||||
b3Printf(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_data->m_verboseOutput) {
|
b3Printf(msg);
|
||||||
b3Printf("\n");
|
b3Printf("\n");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_RESET_SIMULATION_COMPLETED: {
|
case CMD_RESET_SIMULATION_COMPLETED: {
|
||||||
|
B3_PROFILE("CMD_RESET_SIMULATION_COMPLETED");
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("CMD_RESET_SIMULATION_COMPLETED clean data\n");
|
b3Printf("CMD_RESET_SIMULATION_COMPLETED clean data\n");
|
||||||
}
|
}
|
||||||
@@ -632,6 +662,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_DEBUG_LINES_COMPLETED: {
|
case CMD_DEBUG_LINES_COMPLETED: {
|
||||||
|
B3_PROFILE("CMD_DEBUG_LINES_COMPLETED");
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput) {
|
||||||
b3Printf("Success receiving %d debug lines",
|
b3Printf("Success receiving %d debug lines",
|
||||||
serverCmd.m_sendDebugLinesArgs.m_numDebugLines);
|
serverCmd.m_sendDebugLinesArgs.m_numDebugLines);
|
||||||
@@ -675,10 +706,12 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
case CMD_RIGID_BODY_CREATION_COMPLETED:
|
case CMD_RIGID_BODY_CREATION_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_RIGID_BODY_CREATION_COMPLETED");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_DEBUG_LINES_OVERFLOW_FAILED: {
|
case CMD_DEBUG_LINES_OVERFLOW_FAILED: {
|
||||||
|
B3_PROFILE("CMD_DEBUG_LINES_OVERFLOW_FAILED");
|
||||||
b3Warning("Error receiving debug lines");
|
b3Warning("Error receiving debug lines");
|
||||||
m_data->m_debugLinesFrom.resize(0);
|
m_data->m_debugLinesFrom.resize(0);
|
||||||
m_data->m_debugLinesTo.resize(0);
|
m_data->m_debugLinesTo.resize(0);
|
||||||
@@ -689,6 +722,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
case CMD_CAMERA_IMAGE_COMPLETED:
|
case CMD_CAMERA_IMAGE_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_CAMERA_IMAGE_COMPLETED");
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
b3Printf("Camera image OK\n");
|
b3Printf("Camera image OK\n");
|
||||||
@@ -738,6 +772,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
case CMD_CAMERA_IMAGE_FAILED:
|
case CMD_CAMERA_IMAGE_FAILED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_CAMERA_IMAGE_FAILED");
|
||||||
b3Warning("Camera image FAILED\n");
|
b3Warning("Camera image FAILED\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -772,6 +807,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
case CMD_REQUEST_VR_EVENTS_DATA_COMPLETED:
|
case CMD_REQUEST_VR_EVENTS_DATA_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_REQUEST_VR_EVENTS_DATA_COMPLETED");
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
b3Printf("Request VR Events completed");
|
b3Printf("Request VR Events completed");
|
||||||
@@ -786,6 +822,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
case CMD_REQUEST_KEYBOARD_EVENTS_DATA_COMPLETED:
|
case CMD_REQUEST_KEYBOARD_EVENTS_DATA_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_REQUEST_KEYBOARD_EVENTS_DATA_COMPLETED");
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
b3Printf("Request keyboard events completed");
|
b3Printf("Request keyboard events completed");
|
||||||
@@ -800,6 +837,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
case CMD_REQUEST_AABB_OVERLAP_COMPLETED:
|
case CMD_REQUEST_AABB_OVERLAP_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_REQUEST_AABB_OVERLAP_COMPLETED");
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
b3Printf("Overlapping object request completed");
|
b3Printf("Overlapping object request completed");
|
||||||
@@ -819,6 +857,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
case CMD_CONTACT_POINT_INFORMATION_COMPLETED:
|
case CMD_CONTACT_POINT_INFORMATION_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_CONTACT_POINT_INFORMATION_COMPLETED");
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
b3Printf("Contact Point Information Request OK\n");
|
b3Printf("Contact Point Information Request OK\n");
|
||||||
@@ -839,29 +878,37 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
case CMD_CONTACT_POINT_INFORMATION_FAILED:
|
case CMD_CONTACT_POINT_INFORMATION_FAILED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_CONTACT_POINT_INFORMATION_FAILED");
|
||||||
b3Warning("Contact Point Information Request failed");
|
b3Warning("Contact Point Information Request failed");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case CMD_SAVE_WORLD_COMPLETED:
|
case CMD_SAVE_WORLD_COMPLETED:
|
||||||
|
{
|
||||||
|
B3_PROFILE("CMD_SAVE_WORLD_COMPLETED");
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case CMD_SAVE_WORLD_FAILED:
|
case CMD_SAVE_WORLD_FAILED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_SAVE_WORLD_FAILED");
|
||||||
b3Warning("Saving world failed");
|
b3Warning("Saving world failed");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_CALCULATE_INVERSE_KINEMATICS_COMPLETED:
|
case CMD_CALCULATE_INVERSE_KINEMATICS_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_CALCULATE_INVERSE_KINEMATICS_COMPLETED");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_CALCULATE_INVERSE_KINEMATICS_FAILED:
|
case CMD_CALCULATE_INVERSE_KINEMATICS_FAILED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_CALCULATE_INVERSE_KINEMATICS_FAILED");
|
||||||
b3Warning("Calculate Inverse Kinematics Request failed");
|
b3Warning("Calculate Inverse Kinematics Request failed");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_VISUAL_SHAPE_INFO_COMPLETED:
|
case CMD_VISUAL_SHAPE_INFO_COMPLETED:
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_VISUAL_SHAPE_INFO_COMPLETED");
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
b3Printf("Visual Shape Information Request OK\n");
|
b3Printf("Visual Shape Information Request OK\n");
|
||||||
@@ -949,6 +996,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
m_data->m_testBlock1->m_numProcessedServerCommands++;
|
m_data->m_testBlock1->m_numProcessedServerCommands++;
|
||||||
// we don't have more than 1 command outstanding (in total, either server or client)
|
// we don't have more than 1 command outstanding (in total, either server or client)
|
||||||
btAssert(m_data->m_testBlock1->m_numProcessedServerCommands ==
|
btAssert(m_data->m_testBlock1->m_numProcessedServerCommands ==
|
||||||
@@ -964,6 +1012,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
if ((serverCmd.m_type == CMD_SDF_LOADING_COMPLETED) || (serverCmd.m_type == CMD_MJCF_LOADING_COMPLETED) || (serverCmd.m_type == CMD_SYNC_BODY_INFO_COMPLETED))
|
if ((serverCmd.m_type == CMD_SDF_LOADING_COMPLETED) || (serverCmd.m_type == CMD_MJCF_LOADING_COMPLETED) || (serverCmd.m_type == CMD_SYNC_BODY_INFO_COMPLETED))
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_LOADING_COMPLETED");
|
||||||
int numConstraints = serverCmd.m_sdfLoadedArgs.m_numUserConstraints;
|
int numConstraints = serverCmd.m_sdfLoadedArgs.m_numUserConstraints;
|
||||||
for (int i=0;i<numConstraints;i++)
|
for (int i=0;i<numConstraints;i++)
|
||||||
{
|
{
|
||||||
@@ -994,6 +1043,8 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
if (serverCmd.m_type == CMD_USER_CONSTRAINT_INFO_COMPLETED)
|
if (serverCmd.m_type == CMD_USER_CONSTRAINT_INFO_COMPLETED)
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_USER_CONSTRAINT_INFO_COMPLETED");
|
||||||
|
|
||||||
if (m_data->m_constraintIdsRequestInfo.size())
|
if (m_data->m_constraintIdsRequestInfo.size())
|
||||||
{
|
{
|
||||||
int cid = m_data->m_constraintIdsRequestInfo[m_data->m_constraintIdsRequestInfo.size()-1];
|
int cid = m_data->m_constraintIdsRequestInfo[m_data->m_constraintIdsRequestInfo.size()-1];
|
||||||
@@ -1013,6 +1064,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
if (serverCmd.m_type == CMD_BODY_INFO_COMPLETED)
|
if (serverCmd.m_type == CMD_BODY_INFO_COMPLETED)
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_BODY_INFO_COMPLETED");
|
||||||
//are there any bodies left to be processed?
|
//are there any bodies left to be processed?
|
||||||
if (m_data->m_bodyIdsRequestInfo.size())
|
if (m_data->m_bodyIdsRequestInfo.size())
|
||||||
{
|
{
|
||||||
@@ -1046,6 +1098,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
if (serverCmd.m_type == CMD_REQUEST_AABB_OVERLAP_COMPLETED)
|
if (serverCmd.m_type == CMD_REQUEST_AABB_OVERLAP_COMPLETED)
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_REQUEST_AABB_OVERLAP_COMPLETED2");
|
||||||
SharedMemoryCommand& command = m_data->m_testBlock1->m_clientCommands[0];
|
SharedMemoryCommand& command = m_data->m_testBlock1->m_clientCommands[0];
|
||||||
if (serverCmd.m_sendOverlappingObjectsArgs.m_numRemainingOverlappingObjects > 0 && serverCmd.m_sendOverlappingObjectsArgs.m_numOverlappingObjectsCopied)
|
if (serverCmd.m_sendOverlappingObjectsArgs.m_numRemainingOverlappingObjects > 0 && serverCmd.m_sendOverlappingObjectsArgs.m_numOverlappingObjectsCopied)
|
||||||
{
|
{
|
||||||
@@ -1058,6 +1111,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
if (serverCmd.m_type == CMD_CONTACT_POINT_INFORMATION_COMPLETED)
|
if (serverCmd.m_type == CMD_CONTACT_POINT_INFORMATION_COMPLETED)
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_CONTACT_POINT_INFORMATION_COMPLETED2");
|
||||||
SharedMemoryCommand& command = m_data->m_testBlock1->m_clientCommands[0];
|
SharedMemoryCommand& command = m_data->m_testBlock1->m_clientCommands[0];
|
||||||
if (serverCmd.m_sendContactPointArgs.m_numRemainingContactPoints>0 && serverCmd.m_sendContactPointArgs.m_numContactPointsCopied)
|
if (serverCmd.m_sendContactPointArgs.m_numRemainingContactPoints>0 && serverCmd.m_sendContactPointArgs.m_numContactPointsCopied)
|
||||||
{
|
{
|
||||||
@@ -1072,6 +1126,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
if (serverCmd.m_type == CMD_VISUAL_SHAPE_INFO_COMPLETED)
|
if (serverCmd.m_type == CMD_VISUAL_SHAPE_INFO_COMPLETED)
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_VISUAL_SHAPE_INFO_COMPLETED2");
|
||||||
SharedMemoryCommand& command = m_data->m_testBlock1->m_clientCommands[0];
|
SharedMemoryCommand& command = m_data->m_testBlock1->m_clientCommands[0];
|
||||||
if (serverCmd.m_sendVisualShapeArgs.m_numRemainingVisualShapes >0 && serverCmd.m_sendVisualShapeArgs.m_numVisualShapesCopied)
|
if (serverCmd.m_sendVisualShapeArgs.m_numRemainingVisualShapes >0 && serverCmd.m_sendVisualShapeArgs.m_numVisualShapesCopied)
|
||||||
{
|
{
|
||||||
@@ -1087,6 +1142,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
|
|
||||||
if (serverCmd.m_type == CMD_CAMERA_IMAGE_COMPLETED)
|
if (serverCmd.m_type == CMD_CAMERA_IMAGE_COMPLETED)
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("CMD_CAMERA_IMAGE_COMPLETED2");
|
||||||
SharedMemoryCommand& command = m_data->m_testBlock1->m_clientCommands[0];
|
SharedMemoryCommand& command = m_data->m_testBlock1->m_clientCommands[0];
|
||||||
|
|
||||||
if (serverCmd.m_sendPixelDataArguments.m_numRemainingPixels > 0 && serverCmd.m_sendPixelDataArguments.m_numPixelsCopied)
|
if (serverCmd.m_sendPixelDataArguments.m_numRemainingPixels > 0 && serverCmd.m_sendPixelDataArguments.m_numPixelsCopied)
|
||||||
@@ -1110,7 +1166,9 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((serverCmd.m_type == CMD_DEBUG_LINES_COMPLETED) &&
|
if ((serverCmd.m_type == CMD_DEBUG_LINES_COMPLETED) &&
|
||||||
(serverCmd.m_sendDebugLinesArgs.m_numRemainingDebugLines > 0)) {
|
(serverCmd.m_sendDebugLinesArgs.m_numRemainingDebugLines > 0))
|
||||||
|
{
|
||||||
|
B3_PROFILE("CMD_DEBUG_LINES_COMPLETED2");
|
||||||
SharedMemoryCommand& command = m_data->m_testBlock1->m_clientCommands[0];
|
SharedMemoryCommand& command = m_data->m_testBlock1->m_clientCommands[0];
|
||||||
|
|
||||||
// continue requesting debug lines for drawing
|
// continue requesting debug lines for drawing
|
||||||
@@ -1125,7 +1183,10 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() {
|
|||||||
return &m_data->m_lastServerStatus;
|
return &m_data->m_lastServerStatus;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (m_data->m_verboseOutput) {
|
if (m_data->m_verboseOutput)
|
||||||
|
{
|
||||||
|
B3_PROFILE("m_verboseOutput");
|
||||||
|
|
||||||
b3Printf("m_numServerStatus = %d, processed = %d\n",
|
b3Printf("m_numServerStatus = %d, processed = %d\n",
|
||||||
m_data->m_testBlock1->m_numServerCommands,
|
m_data->m_testBlock1->m_numServerCommands,
|
||||||
m_data->m_testBlock1->m_numProcessedServerCommands);
|
m_data->m_testBlock1->m_numProcessedServerCommands);
|
||||||
|
|||||||
@@ -1399,8 +1399,8 @@ bool PhysicsServerCommandProcessor::processImportedObjects(const char* fileName,
|
|||||||
|
|
||||||
|
|
||||||
//todo: move these internal API called inside the 'ConvertURDF2Bullet' call, hidden from the user
|
//todo: move these internal API called inside the 'ConvertURDF2Bullet' call, hidden from the user
|
||||||
int rootLinkIndex = u2b.getRootLinkIndex();
|
//int rootLinkIndex = u2b.getRootLinkIndex();
|
||||||
b3Printf("urdf root link index = %d\n",rootLinkIndex);
|
//b3Printf("urdf root link index = %d\n",rootLinkIndex);
|
||||||
MyMultiBodyCreator creation(m_data->m_guiHelper);
|
MyMultiBodyCreator creation(m_data->m_guiHelper);
|
||||||
|
|
||||||
u2b.getRootTransformInWorld(rootTrans);
|
u2b.getRootTransformInWorld(rootTrans);
|
||||||
@@ -1540,7 +1540,7 @@ bool PhysicsServerCommandProcessor::loadSdf(const char* fileName, char* bufferSe
|
|||||||
|
|
||||||
|
|
||||||
bool PhysicsServerCommandProcessor::loadUrdf(const char* fileName, const btVector3& pos, const btQuaternion& orn,
|
bool PhysicsServerCommandProcessor::loadUrdf(const char* fileName, const btVector3& pos, const btQuaternion& orn,
|
||||||
bool useMultiBody, bool useFixedBase, int* bodyUniqueIdPtr, char* bufferServerToClient, int bufferSizeInBytes)
|
bool useMultiBody, bool useFixedBase, int* bodyUniqueIdPtr, char* bufferServerToClient, int bufferSizeInBytes, int flags)
|
||||||
{
|
{
|
||||||
BT_PROFILE("loadURDF");
|
BT_PROFILE("loadURDF");
|
||||||
btAssert(m_data->m_dynamicsWorld);
|
btAssert(m_data->m_dynamicsWorld);
|
||||||
@@ -1598,7 +1598,7 @@ bool PhysicsServerCommandProcessor::loadUrdf(const char* fileName, const btVecto
|
|||||||
// printf("urdf root link index = %d\n",rootLinkIndex);
|
// printf("urdf root link index = %d\n",rootLinkIndex);
|
||||||
MyMultiBodyCreator creation(m_data->m_guiHelper);
|
MyMultiBodyCreator creation(m_data->m_guiHelper);
|
||||||
|
|
||||||
ConvertURDF2Bullet(u2b,creation, tr,m_data->m_dynamicsWorld,useMultiBody,u2b.getPathPrefix());
|
ConvertURDF2Bullet(u2b,creation, tr,m_data->m_dynamicsWorld,useMultiBody,u2b.getPathPrefix(),flags);
|
||||||
|
|
||||||
for (int i=0;i<u2b.getNumAllocatedCollisionShapes();i++)
|
for (int i=0;i<u2b.getNumAllocatedCollisionShapes();i++)
|
||||||
{
|
{
|
||||||
@@ -1761,6 +1761,7 @@ int PhysicsServerCommandProcessor::createBodyInfoStream(int bodyUniqueId, char*
|
|||||||
|
|
||||||
bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes )
|
bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes )
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("processCommand");
|
||||||
|
|
||||||
bool hasStatus = false;
|
bool hasStatus = false;
|
||||||
|
|
||||||
@@ -1821,6 +1822,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
#endif
|
#endif
|
||||||
case CMD_STATE_LOGGING:
|
case CMD_STATE_LOGGING:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_STATE_LOGGING");
|
||||||
|
|
||||||
serverStatusOut.m_type = CMD_STATE_LOGGING_FAILED;
|
serverStatusOut.m_type = CMD_STATE_LOGGING_FAILED;
|
||||||
hasStatus = true;
|
hasStatus = true;
|
||||||
|
|
||||||
@@ -1937,6 +1940,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_SET_VR_CAMERA_STATE:
|
case CMD_SET_VR_CAMERA_STATE:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_SET_VR_CAMERA_STATE");
|
||||||
|
|
||||||
if (clientCmd.m_updateFlags & VR_CAMERA_ROOT_POSITION)
|
if (clientCmd.m_updateFlags & VR_CAMERA_ROOT_POSITION)
|
||||||
{
|
{
|
||||||
@@ -1963,6 +1967,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_REQUEST_VR_EVENTS_DATA:
|
case CMD_REQUEST_VR_EVENTS_DATA:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_REQUEST_VR_EVENTS_DATA");
|
||||||
|
|
||||||
serverStatusOut.m_sendVREvents.m_numVRControllerEvents = 0;
|
serverStatusOut.m_sendVREvents.m_numVRControllerEvents = 0;
|
||||||
for (int i=0;i<MAX_VR_CONTROLLERS;i++)
|
for (int i=0;i<MAX_VR_CONTROLLERS;i++)
|
||||||
{
|
{
|
||||||
@@ -1984,6 +1990,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
case CMD_REQUEST_KEYBOARD_EVENTS_DATA:
|
case CMD_REQUEST_KEYBOARD_EVENTS_DATA:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_REQUEST_KEYBOARD_EVENTS_DATA");
|
||||||
|
|
||||||
serverStatusOut.m_sendKeyboardEvents.m_numKeyboardEvents = m_data->m_keyboardEvents.size();
|
serverStatusOut.m_sendKeyboardEvents.m_numKeyboardEvents = m_data->m_keyboardEvents.size();
|
||||||
if (serverStatusOut.m_sendKeyboardEvents.m_numKeyboardEvents>MAX_KEYBOARD_EVENTS)
|
if (serverStatusOut.m_sendKeyboardEvents.m_numKeyboardEvents>MAX_KEYBOARD_EVENTS)
|
||||||
{
|
{
|
||||||
@@ -2019,6 +2027,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
case CMD_REQUEST_RAY_CAST_INTERSECTIONS:
|
case CMD_REQUEST_RAY_CAST_INTERSECTIONS:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_REQUEST_RAY_CAST_INTERSECTIONS");
|
||||||
|
|
||||||
btVector3 rayFromWorld(clientCmd.m_requestRaycastIntersections.m_rayFromPosition[0],
|
btVector3 rayFromWorld(clientCmd.m_requestRaycastIntersections.m_rayFromPosition[0],
|
||||||
clientCmd.m_requestRaycastIntersections.m_rayFromPosition[1],
|
clientCmd.m_requestRaycastIntersections.m_rayFromPosition[1],
|
||||||
clientCmd.m_requestRaycastIntersections.m_rayFromPosition[2]);
|
clientCmd.m_requestRaycastIntersections.m_rayFromPosition[2]);
|
||||||
@@ -2078,6 +2088,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
};
|
};
|
||||||
case CMD_REQUEST_DEBUG_LINES:
|
case CMD_REQUEST_DEBUG_LINES:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_REQUEST_DEBUG_LINES");
|
||||||
|
|
||||||
int curFlags =m_data->m_remoteDebugDrawer->getDebugMode();
|
int curFlags =m_data->m_remoteDebugDrawer->getDebugMode();
|
||||||
|
|
||||||
int debugMode = clientCmd.m_requestDebugLinesArguments.m_debugMode;//clientCmd.btIDebugDraw::DBG_DrawWireframe|btIDebugDraw::DBG_DrawAabb;
|
int debugMode = clientCmd.m_requestDebugLinesArguments.m_debugMode;//clientCmd.btIDebugDraw::DBG_DrawWireframe|btIDebugDraw::DBG_DrawAabb;
|
||||||
@@ -2147,7 +2159,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
case CMD_REQUEST_CAMERA_IMAGE_DATA:
|
case CMD_REQUEST_CAMERA_IMAGE_DATA:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_REQUEST_CAMERA_IMAGE_DATA");
|
||||||
int startPixelIndex = clientCmd.m_requestPixelDataArguments.m_startPixelIndex;
|
int startPixelIndex = clientCmd.m_requestPixelDataArguments.m_startPixelIndex;
|
||||||
int width = clientCmd.m_requestPixelDataArguments.m_pixelWidth;
|
int width = clientCmd.m_requestPixelDataArguments.m_pixelWidth;
|
||||||
int height = clientCmd.m_requestPixelDataArguments.m_pixelHeight;
|
int height = clientCmd.m_requestPixelDataArguments.m_pixelHeight;
|
||||||
@@ -2276,6 +2288,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
case CMD_SYNC_BODY_INFO:
|
case CMD_SYNC_BODY_INFO:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_SYNC_BODY_INFO");
|
||||||
|
|
||||||
int numHandles = m_data->getNumHandles();
|
int numHandles = m_data->getNumHandles();
|
||||||
int actualNumBodies = 0;
|
int actualNumBodies = 0;
|
||||||
for (int i=0;i<numHandles;i++)
|
for (int i=0;i<numHandles;i++)
|
||||||
@@ -2304,6 +2318,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_REQUEST_BODY_INFO:
|
case CMD_REQUEST_BODY_INFO:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_REQUEST_BODY_INFO");
|
||||||
|
|
||||||
const SdfRequestInfoArgs& sdfInfoArgs = clientCmd.m_sdfRequestInfoArgs;
|
const SdfRequestInfoArgs& sdfInfoArgs = clientCmd.m_sdfRequestInfoArgs;
|
||||||
//stream info into memory
|
//stream info into memory
|
||||||
int streamSizeInBytes = createBodyInfoStream(sdfInfoArgs.m_bodyUniqueId, bufferServerToClient, bufferSizeInBytes);
|
int streamSizeInBytes = createBodyInfoStream(sdfInfoArgs.m_bodyUniqueId, bufferServerToClient, bufferSizeInBytes);
|
||||||
@@ -2317,6 +2333,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_SAVE_WORLD:
|
case CMD_SAVE_WORLD:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_SAVE_WORLD");
|
||||||
|
|
||||||
///this is a very rudimentary way to save the state of the world, for scene authoring
|
///this is a very rudimentary way to save the state of the world, for scene authoring
|
||||||
///many todo's, for example save the state of motor controllers etc.
|
///many todo's, for example save the state of motor controllers etc.
|
||||||
|
|
||||||
@@ -2552,6 +2570,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_LOAD_SDF:
|
case CMD_LOAD_SDF:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_LOAD_SDF");
|
||||||
|
|
||||||
const SdfArgs& sdfArgs = clientCmd.m_sdfArguments;
|
const SdfArgs& sdfArgs = clientCmd.m_sdfArguments;
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
@@ -2584,7 +2604,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_LOAD_URDF:
|
case CMD_LOAD_URDF:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_LOAD_URDF");
|
||||||
const UrdfArgs& urdfArgs = clientCmd.m_urdfArguments;
|
const UrdfArgs& urdfArgs = clientCmd.m_urdfArguments;
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
@@ -2600,6 +2620,11 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
initialPos[1] = urdfArgs.m_initialPosition[1];
|
initialPos[1] = urdfArgs.m_initialPosition[1];
|
||||||
initialPos[2] = urdfArgs.m_initialPosition[2];
|
initialPos[2] = urdfArgs.m_initialPosition[2];
|
||||||
}
|
}
|
||||||
|
int urdfFlags = 0;
|
||||||
|
if (clientCmd.m_updateFlags & URDF_ARGS_HAS_CUSTOM_URDF_FLAGS)
|
||||||
|
{
|
||||||
|
urdfFlags = urdfArgs.m_urdfFlags;
|
||||||
|
}
|
||||||
if (clientCmd.m_updateFlags & URDF_ARGS_INITIAL_ORIENTATION)
|
if (clientCmd.m_updateFlags & URDF_ARGS_INITIAL_ORIENTATION)
|
||||||
{
|
{
|
||||||
initialOrn[0] = urdfArgs.m_initialOrientation[0];
|
initialOrn[0] = urdfArgs.m_initialOrientation[0];
|
||||||
@@ -2613,8 +2638,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
//load the actual URDF and send a report: completed or failed
|
//load the actual URDF and send a report: completed or failed
|
||||||
bool completedOk = loadUrdf(urdfArgs.m_urdfFileName,
|
bool completedOk = loadUrdf(urdfArgs.m_urdfFileName,
|
||||||
initialPos,initialOrn,
|
initialPos,initialOrn,
|
||||||
useMultiBody, useFixedBase,&bodyUniqueId, bufferServerToClient, bufferSizeInBytes);
|
useMultiBody, useFixedBase,&bodyUniqueId, bufferServerToClient, bufferSizeInBytes, urdfFlags);
|
||||||
|
|
||||||
|
|
||||||
if (completedOk)
|
if (completedOk)
|
||||||
{
|
{
|
||||||
@@ -2691,6 +2715,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_CREATE_SENSOR:
|
case CMD_CREATE_SENSOR:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_CREATE_SENSOR");
|
||||||
|
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
b3Printf("Processed CMD_CREATE_SENSOR");
|
b3Printf("Processed CMD_CREATE_SENSOR");
|
||||||
@@ -2759,6 +2785,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_SEND_DESIRED_STATE:
|
case CMD_SEND_DESIRED_STATE:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_SEND_DESIRED_STATE");
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
b3Printf("Processed CMD_SEND_DESIRED_STATE");
|
b3Printf("Processed CMD_SEND_DESIRED_STATE");
|
||||||
@@ -2951,6 +2978,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_REQUEST_ACTUAL_STATE:
|
case CMD_REQUEST_ACTUAL_STATE:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_REQUEST_ACTUAL_STATE");
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
b3Printf("Sending the actual state (Q,U)");
|
b3Printf("Sending the actual state (Q,U)");
|
||||||
@@ -3024,6 +3052,20 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
serverCmd.m_sendActualStateArgs.m_actualStateQdot[5] = mb->getBaseOmega()[2];
|
serverCmd.m_sendActualStateArgs.m_actualStateQdot[5] = mb->getBaseOmega()[2];
|
||||||
totalDegreeOfFreedomU += 6;//3 linear and 3 angular DOF
|
totalDegreeOfFreedomU += 6;//3 linear and 3 angular DOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
btAlignedObjectArray<btVector3> omega;
|
||||||
|
btAlignedObjectArray<btVector3> linVel;
|
||||||
|
|
||||||
|
bool computeLinkVelocities = ((clientCmd.m_updateFlags & ACTUAL_STATE_COMPUTE_LINKVELOCITY)!=0);
|
||||||
|
if (computeLinkVelocities)
|
||||||
|
{
|
||||||
|
omega.resize(mb->getNumLinks()+1);
|
||||||
|
linVel.resize(mb->getNumLinks()+1);
|
||||||
|
{
|
||||||
|
B3_PROFILE("compTreeLinkVelocities");
|
||||||
|
mb->compTreeLinkVelocities(&omega[0], &linVel[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
for (int l=0;l<mb->getNumLinks();l++)
|
for (int l=0;l<mb->getNumLinks();l++)
|
||||||
{
|
{
|
||||||
for (int d=0;d<mb->getLink(l).m_posVarCount;d++)
|
for (int d=0;d<mb->getLink(l).m_posVarCount;d++)
|
||||||
@@ -3087,6 +3129,24 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
serverCmd.m_sendActualStateArgs.m_linkState[l*7+5] = linkCOMRotation.z();
|
serverCmd.m_sendActualStateArgs.m_linkState[l*7+5] = linkCOMRotation.z();
|
||||||
serverCmd.m_sendActualStateArgs.m_linkState[l*7+6] = linkCOMRotation.w();
|
serverCmd.m_sendActualStateArgs.m_linkState[l*7+6] = linkCOMRotation.w();
|
||||||
|
|
||||||
|
|
||||||
|
btVector3 worldLinVel(0,0,0);
|
||||||
|
btVector3 worldAngVel(0,0,0);
|
||||||
|
|
||||||
|
if (computeLinkVelocities)
|
||||||
|
{
|
||||||
|
const btMatrix3x3& linkRotMat = mb->getLink(l).m_cachedWorldTransform.getBasis();
|
||||||
|
worldLinVel = linkRotMat * linVel[l+1];
|
||||||
|
worldAngVel = linkRotMat * omega[l+1];
|
||||||
|
}
|
||||||
|
|
||||||
|
serverCmd.m_sendActualStateArgs.m_linkWorldVelocities[l*6+0] = worldLinVel[0];
|
||||||
|
serverCmd.m_sendActualStateArgs.m_linkWorldVelocities[l*6+1] = worldLinVel[1];
|
||||||
|
serverCmd.m_sendActualStateArgs.m_linkWorldVelocities[l*6+2] = worldLinVel[2];
|
||||||
|
serverCmd.m_sendActualStateArgs.m_linkWorldVelocities[l*6+3] = worldAngVel[0];
|
||||||
|
serverCmd.m_sendActualStateArgs.m_linkWorldVelocities[l*6+4] = worldAngVel[1];
|
||||||
|
serverCmd.m_sendActualStateArgs.m_linkWorldVelocities[l*6+5] = worldAngVel[2];
|
||||||
|
|
||||||
serverCmd.m_sendActualStateArgs.m_linkLocalInertialFrames[l*7+0] = linkLocalInertialOrigin.getX();
|
serverCmd.m_sendActualStateArgs.m_linkLocalInertialFrames[l*7+0] = linkLocalInertialOrigin.getX();
|
||||||
serverCmd.m_sendActualStateArgs.m_linkLocalInertialFrames[l*7+1] = linkLocalInertialOrigin.getY();
|
serverCmd.m_sendActualStateArgs.m_linkLocalInertialFrames[l*7+1] = linkLocalInertialOrigin.getY();
|
||||||
serverCmd.m_sendActualStateArgs.m_linkLocalInertialFrames[l*7+2] = linkLocalInertialOrigin.getZ();
|
serverCmd.m_sendActualStateArgs.m_linkLocalInertialFrames[l*7+2] = linkLocalInertialOrigin.getZ();
|
||||||
@@ -3157,6 +3217,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_STEP_FORWARD_SIMULATION:
|
case CMD_STEP_FORWARD_SIMULATION:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_STEP_FORWARD_SIMULATION");
|
||||||
|
|
||||||
|
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
@@ -3191,6 +3253,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
case CMD_REQUEST_INTERNAL_DATA:
|
case CMD_REQUEST_INTERNAL_DATA:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_REQUEST_INTERNAL_DATA");
|
||||||
|
|
||||||
//todo: also check version etc?
|
//todo: also check version etc?
|
||||||
|
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
@@ -3213,6 +3277,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
};
|
};
|
||||||
case CMD_SEND_PHYSICS_SIMULATION_PARAMETERS:
|
case CMD_SEND_PHYSICS_SIMULATION_PARAMETERS:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_SEND_PHYSICS_SIMULATION_PARAMETERS");
|
||||||
|
|
||||||
if (clientCmd.m_updateFlags&SIM_PARAM_UPDATE_DELTA_TIME)
|
if (clientCmd.m_updateFlags&SIM_PARAM_UPDATE_DELTA_TIME)
|
||||||
{
|
{
|
||||||
m_data->m_physicsDeltaTime = clientCmd.m_physSimParamArgs.m_deltaTime;
|
m_data->m_physicsDeltaTime = clientCmd.m_physSimParamArgs.m_deltaTime;
|
||||||
@@ -3288,6 +3354,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
};
|
};
|
||||||
case CMD_INIT_POSE:
|
case CMD_INIT_POSE:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_INIT_POSE");
|
||||||
|
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
b3Printf("Server Init Pose not implemented yet");
|
b3Printf("Server Init Pose not implemented yet");
|
||||||
@@ -3436,6 +3504,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
case CMD_RESET_SIMULATION:
|
case CMD_RESET_SIMULATION:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_RESET_SIMULATION");
|
||||||
|
|
||||||
resetSimulation();
|
resetSimulation();
|
||||||
|
|
||||||
@@ -3447,6 +3516,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
case CMD_CREATE_RIGID_BODY:
|
case CMD_CREATE_RIGID_BODY:
|
||||||
case CMD_CREATE_BOX_COLLISION_SHAPE:
|
case CMD_CREATE_BOX_COLLISION_SHAPE:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_CREATE_RIGID_BODY");
|
||||||
|
|
||||||
btVector3 halfExtents(1,1,1);
|
btVector3 halfExtents(1,1,1);
|
||||||
if (clientCmd.m_updateFlags & BOX_SHAPE_HAS_HALF_EXTENTS)
|
if (clientCmd.m_updateFlags & BOX_SHAPE_HAS_HALF_EXTENTS)
|
||||||
{
|
{
|
||||||
@@ -3581,6 +3652,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_PICK_BODY:
|
case CMD_PICK_BODY:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_PICK_BODY");
|
||||||
|
|
||||||
pickBody(btVector3(clientCmd.m_pickBodyArguments.m_rayFromWorld[0],
|
pickBody(btVector3(clientCmd.m_pickBodyArguments.m_rayFromWorld[0],
|
||||||
clientCmd.m_pickBodyArguments.m_rayFromWorld[1],
|
clientCmd.m_pickBodyArguments.m_rayFromWorld[1],
|
||||||
clientCmd.m_pickBodyArguments.m_rayFromWorld[2]),
|
clientCmd.m_pickBodyArguments.m_rayFromWorld[2]),
|
||||||
@@ -3596,6 +3669,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_MOVE_PICKED_BODY:
|
case CMD_MOVE_PICKED_BODY:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_MOVE_PICKED_BODY");
|
||||||
|
|
||||||
movePickedBody(btVector3(clientCmd.m_pickBodyArguments.m_rayFromWorld[0],
|
movePickedBody(btVector3(clientCmd.m_pickBodyArguments.m_rayFromWorld[0],
|
||||||
clientCmd.m_pickBodyArguments.m_rayFromWorld[1],
|
clientCmd.m_pickBodyArguments.m_rayFromWorld[1],
|
||||||
clientCmd.m_pickBodyArguments.m_rayFromWorld[2]),
|
clientCmd.m_pickBodyArguments.m_rayFromWorld[2]),
|
||||||
@@ -3610,6 +3685,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_REMOVE_PICKING_CONSTRAINT_BODY:
|
case CMD_REMOVE_PICKING_CONSTRAINT_BODY:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_REMOVE_PICKING_CONSTRAINT_BODY");
|
||||||
removePickingConstraint();
|
removePickingConstraint();
|
||||||
|
|
||||||
SharedMemoryStatus& serverCmd =serverStatusOut;
|
SharedMemoryStatus& serverCmd =serverStatusOut;
|
||||||
@@ -3619,6 +3695,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_REQUEST_AABB_OVERLAP:
|
case CMD_REQUEST_AABB_OVERLAP:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_REQUEST_AABB_OVERLAP");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
int curObjectIndex = clientCmd.m_requestOverlappingObjectsArgs.m_startingOverlappingObjectIndex;
|
int curObjectIndex = clientCmd.m_requestOverlappingObjectsArgs.m_startingOverlappingObjectIndex;
|
||||||
|
|
||||||
@@ -3676,6 +3753,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
case CMD_CONFIGURE_OPENGL_VISUALIZER:
|
case CMD_CONFIGURE_OPENGL_VISUALIZER:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_CONFIGURE_OPENGL_VISUALIZER");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
serverCmd.m_type =CMD_CLIENT_COMMAND_COMPLETED;
|
serverCmd.m_type =CMD_CLIENT_COMMAND_COMPLETED;
|
||||||
|
|
||||||
@@ -3699,6 +3777,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
case CMD_REQUEST_CONTACT_POINT_INFORMATION:
|
case CMD_REQUEST_CONTACT_POINT_INFORMATION:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_REQUEST_CONTACT_POINT_INFORMATION");
|
||||||
SharedMemoryStatus& serverCmd =serverStatusOut;
|
SharedMemoryStatus& serverCmd =serverStatusOut;
|
||||||
serverCmd.m_sendContactPointArgs.m_numContactPointsCopied = 0;
|
serverCmd.m_sendContactPointArgs.m_numContactPointsCopied = 0;
|
||||||
|
|
||||||
@@ -3738,6 +3817,12 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
{
|
{
|
||||||
linkIndexB = mblB->m_link;
|
linkIndexB = mblB->m_link;
|
||||||
objectIndexB = mblB->m_multiBody->getUserIndex2();
|
objectIndexB = mblB->m_multiBody->getUserIndex2();
|
||||||
|
if (
|
||||||
|
(clientCmd.m_updateFlags & CMD_REQUEST_CONTACT_POINT_HAS_LINK_INDEX_B_FILTER) &&
|
||||||
|
clientCmd.m_requestContactPointArguments.m_linkIndexBIndexFilter != linkIndexB)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int objectIndexA = -1;
|
int objectIndexA = -1;
|
||||||
@@ -3750,8 +3835,13 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
if (mblA && mblA->m_multiBody)
|
if (mblA && mblA->m_multiBody)
|
||||||
{
|
{
|
||||||
linkIndexA = mblA->m_link;
|
linkIndexA = mblA->m_link;
|
||||||
|
|
||||||
objectIndexA = mblA->m_multiBody->getUserIndex2();
|
objectIndexA = mblA->m_multiBody->getUserIndex2();
|
||||||
|
if (
|
||||||
|
(clientCmd.m_updateFlags & CMD_REQUEST_CONTACT_POINT_HAS_LINK_INDEX_A_FILTER) &&
|
||||||
|
clientCmd.m_requestContactPointArguments.m_linkIndexAIndexFilter != linkIndexA)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
btAssert(bodyA || mblA);
|
btAssert(bodyA || mblA);
|
||||||
@@ -4009,6 +4099,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_CALCULATE_INVERSE_DYNAMICS:
|
case CMD_CALCULATE_INVERSE_DYNAMICS:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_CALCULATE_INVERSE_DYNAMICS");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
InternalBodyHandle* bodyHandle = m_data->getHandle(clientCmd.m_calculateInverseDynamicsArguments.m_bodyUniqueId);
|
InternalBodyHandle* bodyHandle = m_data->getHandle(clientCmd.m_calculateInverseDynamicsArguments.m_bodyUniqueId);
|
||||||
if (bodyHandle && bodyHandle->m_multiBody)
|
if (bodyHandle && bodyHandle->m_multiBody)
|
||||||
@@ -4059,6 +4150,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_CALCULATE_JACOBIAN:
|
case CMD_CALCULATE_JACOBIAN:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_CALCULATE_JACOBIAN");
|
||||||
|
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
InternalBodyHandle* bodyHandle = m_data->getHandle(clientCmd.m_calculateJacobianArguments.m_bodyUniqueId);
|
InternalBodyHandle* bodyHandle = m_data->getHandle(clientCmd.m_calculateJacobianArguments.m_bodyUniqueId);
|
||||||
if (bodyHandle && bodyHandle->m_multiBody)
|
if (bodyHandle && bodyHandle->m_multiBody)
|
||||||
@@ -4115,6 +4208,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_APPLY_EXTERNAL_FORCE:
|
case CMD_APPLY_EXTERNAL_FORCE:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_APPLY_EXTERNAL_FORCE");
|
||||||
|
|
||||||
if (m_data->m_verboseOutput)
|
if (m_data->m_verboseOutput)
|
||||||
{
|
{
|
||||||
b3Printf("CMD_APPLY_EXTERNAL_FORCE clientCmd = %d\n", clientCmd.m_sequenceNumber);
|
b3Printf("CMD_APPLY_EXTERNAL_FORCE clientCmd = %d\n", clientCmd.m_sequenceNumber);
|
||||||
@@ -4214,6 +4309,8 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_USER_CONSTRAINT:
|
case CMD_USER_CONSTRAINT:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_USER_CONSTRAINT");
|
||||||
|
|
||||||
SharedMemoryStatus& serverCmd =serverStatusOut;
|
SharedMemoryStatus& serverCmd =serverStatusOut;
|
||||||
serverCmd.m_type = CMD_USER_CONSTRAINT_FAILED;
|
serverCmd.m_type = CMD_USER_CONSTRAINT_FAILED;
|
||||||
hasStatus = true;
|
hasStatus = true;
|
||||||
@@ -4444,6 +4541,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_CALCULATE_INVERSE_KINEMATICS:
|
case CMD_CALCULATE_INVERSE_KINEMATICS:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_CALCULATE_INVERSE_KINEMATICS");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
serverCmd.m_type = CMD_CALCULATE_INVERSE_KINEMATICS_FAILED;
|
serverCmd.m_type = CMD_CALCULATE_INVERSE_KINEMATICS_FAILED;
|
||||||
|
|
||||||
@@ -4613,7 +4711,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_REQUEST_VISUAL_SHAPE_INFO:
|
case CMD_REQUEST_VISUAL_SHAPE_INFO:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_REQUEST_VISUAL_SHAPE_INFO");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
serverCmd.m_type = CMD_VISUAL_SHAPE_INFO_FAILED;
|
serverCmd.m_type = CMD_VISUAL_SHAPE_INFO_FAILED;
|
||||||
//retrieve the visual shape information for a specific body
|
//retrieve the visual shape information for a specific body
|
||||||
@@ -4642,6 +4740,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_UPDATE_VISUAL_SHAPE:
|
case CMD_UPDATE_VISUAL_SHAPE:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_UPDATE_VISUAL_SHAPE");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
serverCmd.m_type = CMD_VISUAL_SHAPE_UPDATE_FAILED;
|
serverCmd.m_type = CMD_VISUAL_SHAPE_UPDATE_FAILED;
|
||||||
|
|
||||||
@@ -4654,6 +4753,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
case CMD_LOAD_TEXTURE:
|
case CMD_LOAD_TEXTURE:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_LOAD_TEXTURE");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
serverCmd.m_type = CMD_LOAD_TEXTURE_FAILED;
|
serverCmd.m_type = CMD_LOAD_TEXTURE_FAILED;
|
||||||
|
|
||||||
@@ -4673,7 +4773,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
case CMD_LOAD_BULLET:
|
case CMD_LOAD_BULLET:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_LOAD_BULLET");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
btBulletWorldImporter* importer = new btBulletWorldImporter(m_data->m_dynamicsWorld);
|
btBulletWorldImporter* importer = new btBulletWorldImporter(m_data->m_dynamicsWorld);
|
||||||
|
|
||||||
@@ -4744,6 +4844,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
case CMD_SAVE_BULLET:
|
case CMD_SAVE_BULLET:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_SAVE_BULLET");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
|
|
||||||
FILE* f = fopen(clientCmd.m_fileArguments.m_fileName, "wb");
|
FILE* f = fopen(clientCmd.m_fileArguments.m_fileName, "wb");
|
||||||
@@ -4763,6 +4864,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
case CMD_LOAD_MJCF:
|
case CMD_LOAD_MJCF:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_LOAD_MJCF");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
serverCmd.m_type = CMD_MJCF_LOADING_FAILED;
|
serverCmd.m_type = CMD_MJCF_LOADING_FAILED;
|
||||||
const MjcfArgs& mjcfArgs = clientCmd.m_mjcfArguments;
|
const MjcfArgs& mjcfArgs = clientCmd.m_mjcfArguments;
|
||||||
@@ -4797,6 +4899,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
|
|
||||||
case CMD_USER_DEBUG_DRAW:
|
case CMD_USER_DEBUG_DRAW:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_USER_DEBUG_DRAW");
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
serverCmd.m_type = CMD_USER_DEBUG_DRAW_FAILED;
|
serverCmd.m_type = CMD_USER_DEBUG_DRAW_FAILED;
|
||||||
hasStatus = true;
|
hasStatus = true;
|
||||||
@@ -4919,6 +5022,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
|
|||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
BT_PROFILE("CMD_UNKNOWN");
|
||||||
b3Error("Unknown command encountered");
|
b3Error("Unknown command encountered");
|
||||||
|
|
||||||
SharedMemoryStatus& serverCmd =serverStatusOut;
|
SharedMemoryStatus& serverCmd =serverStatusOut;
|
||||||
@@ -5313,7 +5417,7 @@ void PhysicsServerCommandProcessor::createDefaultRobotAssets()
|
|||||||
btVector3 spawnDir = mat.getColumn(0);
|
btVector3 spawnDir = mat.getColumn(0);
|
||||||
btVector3 shiftPos = spawnDir*spawnDistance;
|
btVector3 shiftPos = spawnDir*spawnDistance;
|
||||||
btVector3 spawnPos = gVRGripperPos + shiftPos;
|
btVector3 spawnPos = gVRGripperPos + shiftPos;
|
||||||
loadUrdf("sphere_small.urdf", spawnPos, gVRGripperOrn, true, false, &bodyId, &gBufferServerToClient[0], gBufferServerToClient.size());
|
loadUrdf("sphere_small.urdf", spawnPos, gVRGripperOrn, true, false, &bodyId, &gBufferServerToClient[0], gBufferServerToClient.size(),0);
|
||||||
//loadUrdf("lego/lego.urdf", spawnPos, gVRGripperOrn, true, false, &bodyId, &gBufferServerToClient[0], gBufferServerToClient.size());
|
//loadUrdf("lego/lego.urdf", spawnPos, gVRGripperOrn, true, false, &bodyId, &gBufferServerToClient[0], gBufferServerToClient.size());
|
||||||
m_data->m_sphereId = bodyId;
|
m_data->m_sphereId = bodyId;
|
||||||
InteralBodyData* parentBody = m_data->getHandle(bodyId);
|
InteralBodyData* parentBody = m_data->getHandle(bodyId);
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ protected:
|
|||||||
bool loadSdf(const char* fileName, char* bufferServerToClient, int bufferSizeInBytes, bool useMultiBody, int flags);
|
bool loadSdf(const char* fileName, char* bufferServerToClient, int bufferSizeInBytes, bool useMultiBody, int flags);
|
||||||
|
|
||||||
bool loadUrdf(const char* fileName, const class btVector3& pos, const class btQuaternion& orn,
|
bool loadUrdf(const char* fileName, const class btVector3& pos, const class btQuaternion& orn,
|
||||||
bool useMultiBody, bool useFixedBase, int* bodyUniqueIdPtr, char* bufferServerToClient, int bufferSizeInBytes);
|
bool useMultiBody, bool useFixedBase, int* bodyUniqueIdPtr, char* bufferServerToClient, int bufferSizeInBytes, int flags=0);
|
||||||
|
|
||||||
bool loadMjcf(const char* fileName, char* bufferServerToClient, int bufferSizeInBytes, bool useMultiBody, int flags);
|
bool loadMjcf(const char* fileName, char* bufferServerToClient, int bufferSizeInBytes, bool useMultiBody, int flags);
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
#include "../CommonInterfaces/CommonParameterInterface.h"
|
#include "../CommonInterfaces/CommonParameterInterface.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//@todo(erwincoumans) those globals are hacks for a VR demo, move this to Python/pybullet!
|
//@todo(erwincoumans) those globals are hacks for a VR demo, move this to Python/pybullet!
|
||||||
extern btVector3 gLastPickPos;
|
extern btVector3 gLastPickPos;
|
||||||
|
|
||||||
@@ -305,16 +304,16 @@ void MotionThreadFunc(void* userPtr,void* lsMemory)
|
|||||||
|
|
||||||
double deltaTimeInSeconds = 0;
|
double deltaTimeInSeconds = 0;
|
||||||
int numCmdSinceSleep1ms = 0;
|
int numCmdSinceSleep1ms = 0;
|
||||||
|
unsigned long long int prevTime = clock.getTimeMicroseconds();
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
BT_PROFILE("loop");
|
|
||||||
|
|
||||||
{
|
{
|
||||||
BT_PROFILE("usleep(0)");
|
|
||||||
b3Clock::usleep(0);
|
b3Clock::usleep(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
if (gMaxNumCmdPer1ms>0)
|
if (gMaxNumCmdPer1ms>0)
|
||||||
{
|
{
|
||||||
if (numCmdSinceSleep1ms>gMaxNumCmdPer1ms)
|
if (numCmdSinceSleep1ms>gMaxNumCmdPer1ms)
|
||||||
@@ -330,8 +329,17 @@ void MotionThreadFunc(void* userPtr,void* lsMemory)
|
|||||||
sleepClock.reset();
|
sleepClock.reset();
|
||||||
numCmdSinceSleep1ms = 0;
|
numCmdSinceSleep1ms = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long int curTime = clock.getTimeMicroseconds();
|
||||||
|
unsigned long long int dtMicro = curTime - prevTime;
|
||||||
|
prevTime = curTime;
|
||||||
|
#if 1
|
||||||
|
double dt = double(dtMicro)/1000000.;
|
||||||
|
#else
|
||||||
double dt = double(clock.getTimeMicroseconds())/1000000.;
|
double dt = double(clock.getTimeMicroseconds())/1000000.;
|
||||||
clock.reset();
|
clock.reset();
|
||||||
|
#endif
|
||||||
deltaTimeInSeconds+= dt;
|
deltaTimeInSeconds+= dt;
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -440,7 +448,6 @@ void MotionThreadFunc(void* userPtr,void* lsMemory)
|
|||||||
|
|
||||||
args->m_csGUI->unlock();
|
args->m_csGUI->unlock();
|
||||||
{
|
{
|
||||||
BT_PROFILE("stepSimulationRealTime");
|
|
||||||
args->m_physicsServerPtr->stepSimulationRealTime(deltaTimeInSeconds, args->m_sendVrControllerEvents,numSendVrControllers, keyEvents, args->m_sendKeyEvents.size());
|
args->m_physicsServerPtr->stepSimulationRealTime(deltaTimeInSeconds, args->m_sendVrControllerEvents,numSendVrControllers, keyEvents, args->m_sendKeyEvents.size());
|
||||||
}
|
}
|
||||||
deltaTimeInSeconds = 0;
|
deltaTimeInSeconds = 0;
|
||||||
@@ -478,7 +485,6 @@ void MotionThreadFunc(void* userPtr,void* lsMemory)
|
|||||||
args->m_csGUI->unlock();
|
args->m_csGUI->unlock();
|
||||||
|
|
||||||
{
|
{
|
||||||
BT_PROFILE("processClientCommands");
|
|
||||||
args->m_physicsServerPtr->processClientCommands();
|
args->m_physicsServerPtr->processClientCommands();
|
||||||
numCmdSinceSleep1ms++;
|
numCmdSinceSleep1ms++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -252,6 +252,7 @@ void PhysicsServerSharedMemory::processClientCommands()
|
|||||||
if (m_data->m_testBlocks[block]->m_numClientCommands> m_data->m_testBlocks[block]->m_numProcessedClientCommands)
|
if (m_data->m_testBlocks[block]->m_numClientCommands> m_data->m_testBlocks[block]->m_numProcessedClientCommands)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
BT_PROFILE("processClientCommand");
|
||||||
|
|
||||||
//until we implement a proper ring buffer, we assume always maximum of 1 outstanding commands
|
//until we implement a proper ring buffer, we assume always maximum of 1 outstanding commands
|
||||||
btAssert(m_data->m_testBlocks[block]->m_numClientCommands==m_data->m_testBlocks[block]->m_numProcessedClientCommands+1);
|
btAssert(m_data->m_testBlocks[block]->m_numClientCommands==m_data->m_testBlocks[block]->m_numProcessedClientCommands+1);
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ enum EnumUrdfArgsUpdateFlags
|
|||||||
URDF_ARGS_INITIAL_ORIENTATION=4,
|
URDF_ARGS_INITIAL_ORIENTATION=4,
|
||||||
URDF_ARGS_USE_MULTIBODY=8,
|
URDF_ARGS_USE_MULTIBODY=8,
|
||||||
URDF_ARGS_USE_FIXED_BASE=16,
|
URDF_ARGS_USE_FIXED_BASE=16,
|
||||||
|
URDF_ARGS_HAS_CUSTOM_URDF_FLAGS = 32
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -89,6 +90,7 @@ struct UrdfArgs
|
|||||||
double m_initialOrientation[4];
|
double m_initialOrientation[4];
|
||||||
int m_useMultiBody;
|
int m_useMultiBody;
|
||||||
int m_useFixedBase;
|
int m_useFixedBase;
|
||||||
|
int m_urdfFlags;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MjcfArgs
|
struct MjcfArgs
|
||||||
@@ -381,6 +383,7 @@ struct SendActualStateArgs
|
|||||||
double m_jointMotorForce[MAX_DEGREE_OF_FREEDOM];
|
double m_jointMotorForce[MAX_DEGREE_OF_FREEDOM];
|
||||||
|
|
||||||
double m_linkState[7*MAX_NUM_LINKS];
|
double m_linkState[7*MAX_NUM_LINKS];
|
||||||
|
double m_linkWorldVelocities[6*MAX_NUM_LINKS];//linear velocity and angular velocity in world space (x/y/z each).
|
||||||
double m_linkLocalInertialFrames[7*MAX_NUM_LINKS];
|
double m_linkLocalInertialFrames[7*MAX_NUM_LINKS];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#include "PhysicsClientSharedMemory.h"
|
#include "PhysicsClientSharedMemory.h"
|
||||||
#include"../ExampleBrowser/InProcessExampleBrowser.h"
|
#include"../ExampleBrowser/InProcessExampleBrowser.h"
|
||||||
|
|
||||||
|
#include "Bullet3Common/b3Logging.h"
|
||||||
class InProcessPhysicsClientSharedMemoryMainThread : public PhysicsClientSharedMemory
|
class InProcessPhysicsClientSharedMemoryMainThread : public PhysicsClientSharedMemory
|
||||||
{
|
{
|
||||||
btInProcessExampleBrowserMainThreadInternalData* m_data;
|
btInProcessExampleBrowserMainThreadInternalData* m_data;
|
||||||
@@ -38,19 +38,34 @@ public:
|
|||||||
|
|
||||||
// return non-null if there is a status, nullptr otherwise
|
// return non-null if there is a status, nullptr otherwise
|
||||||
virtual const struct SharedMemoryStatus* processServerStatus()
|
virtual const struct SharedMemoryStatus* processServerStatus()
|
||||||
|
{
|
||||||
|
|
||||||
{
|
{
|
||||||
if (btIsExampleBrowserMainThreadTerminated(m_data))
|
if (btIsExampleBrowserMainThreadTerminated(m_data))
|
||||||
{
|
{
|
||||||
PhysicsClientSharedMemory::disconnectSharedMemory();
|
PhysicsClientSharedMemory::disconnectSharedMemory();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
unsigned long int ms = m_clock.getTimeMilliseconds();
|
unsigned long int ms = m_clock.getTimeMilliseconds();
|
||||||
if (ms>20)
|
if (ms>20)
|
||||||
{
|
{
|
||||||
|
B3_PROFILE("m_clock.reset()");
|
||||||
|
|
||||||
m_clock.reset();
|
m_clock.reset();
|
||||||
btUpdateInProcessExampleBrowserMainThread(m_data);
|
btUpdateInProcessExampleBrowserMainThread(m_data);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
b3Clock::usleep(0);
|
b3Clock::usleep(0);
|
||||||
return PhysicsClientSharedMemory::processServerStatus();
|
}
|
||||||
|
const SharedMemoryStatus* stat = 0;
|
||||||
|
|
||||||
|
{
|
||||||
|
stat = PhysicsClientSharedMemory::processServerStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
return stat;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#define SHARED_MEMORY_KEY 12347
|
#define SHARED_MEMORY_KEY 12347
|
||||||
///increase the SHARED_MEMORY_MAGIC_NUMBER whenever incompatible changes are made in the structures
|
///increase the SHARED_MEMORY_MAGIC_NUMBER whenever incompatible changes are made in the structures
|
||||||
///my convention is year/month/day/rev
|
///my convention is year/month/day/rev
|
||||||
#define SHARED_MEMORY_MAGIC_NUMBER 201703010
|
#define SHARED_MEMORY_MAGIC_NUMBER 201703024
|
||||||
|
|
||||||
enum EnumSharedMemoryClientCommand
|
enum EnumSharedMemoryClientCommand
|
||||||
{
|
{
|
||||||
@@ -175,6 +175,10 @@ struct b3JointInfo
|
|||||||
int m_flags;
|
int m_flags;
|
||||||
double m_jointDamping;
|
double m_jointDamping;
|
||||||
double m_jointFriction;
|
double m_jointFriction;
|
||||||
|
double m_jointLowerLimit;
|
||||||
|
double m_jointUpperLimit;
|
||||||
|
double m_jointMaxForce;
|
||||||
|
double m_jointMaxVelocity;
|
||||||
double m_parentFrame[7]; // position and orientation (quaternion)
|
double m_parentFrame[7]; // position and orientation (quaternion)
|
||||||
double m_childFrame[7]; // ^^^
|
double m_childFrame[7]; // ^^^
|
||||||
double m_jointAxis[3]; // joint axis in parent local frame
|
double m_jointAxis[3]; // joint axis in parent local frame
|
||||||
@@ -378,6 +382,11 @@ struct b3VisualShapeInformation
|
|||||||
struct b3VisualShapeData* m_visualShapeData;
|
struct b3VisualShapeData* m_visualShapeData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum eLinkStateFlags
|
||||||
|
{
|
||||||
|
ACTUAL_STATE_COMPUTE_LINKVELOCITY=1
|
||||||
|
};
|
||||||
|
|
||||||
///b3LinkState provides extra information such as the Cartesian world coordinates
|
///b3LinkState provides extra information such as the Cartesian world coordinates
|
||||||
///center of mass (COM) of the link, relative to the world reference frame.
|
///center of mass (COM) of the link, relative to the world reference frame.
|
||||||
///Orientation is a quaternion x,y,z,w
|
///Orientation is a quaternion x,y,z,w
|
||||||
@@ -395,6 +404,10 @@ struct b3LinkState
|
|||||||
///world position and orientation of the (URDF) link frame
|
///world position and orientation of the (URDF) link frame
|
||||||
double m_worldLinkFramePosition[3];
|
double m_worldLinkFramePosition[3];
|
||||||
double m_worldLinkFrameOrientation[4];
|
double m_worldLinkFrameOrientation[4];
|
||||||
|
|
||||||
|
double m_worldLinearVelocity[3]; //only valid when ACTUAL_STATE_COMPUTE_LINKVELOCITY is set (b3RequestActualStateCommandComputeLinkVelocity)
|
||||||
|
double m_worldAngularVelocity[3]; //only valid when ACTUAL_STATE_COMPUTE_LINKVELOCITY is set (b3RequestActualStateCommandComputeLinkVelocity)
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//todo: discuss and decide about control mode and combinations
|
//todo: discuss and decide about control mode and combinations
|
||||||
@@ -435,4 +448,9 @@ enum eCONNECT_METHOD {
|
|||||||
eCONNECT_TCP = 5,
|
eCONNECT_TCP = 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum eURDF_Flags
|
||||||
|
{
|
||||||
|
URDF_USE_INERTIA_FROM_FILE=2,//sync with URDF2Bullet.h 'ConvertURDFFlags'
|
||||||
|
};
|
||||||
|
|
||||||
#endif//SHARED_MEMORY_PUBLIC_H
|
#endif//SHARED_MEMORY_PUBLIC_H
|
||||||
@@ -220,7 +220,7 @@ void convertURDFToVisualShape(const UrdfShape* visual, const char* urdfPathPrefi
|
|||||||
rad = visual->m_geometry.m_capsuleRadius;
|
rad = visual->m_geometry.m_capsuleRadius;
|
||||||
} else {
|
} else {
|
||||||
tr = visual->m_linkLocalFrame;
|
tr = visual->m_linkLocalFrame;
|
||||||
len = visual->m_geometry.m_capsuleHalfHeight;
|
len = visual->m_geometry.m_capsuleHeight;
|
||||||
rad = visual->m_geometry.m_capsuleRadius;
|
rad = visual->m_geometry.m_capsuleRadius;
|
||||||
}
|
}
|
||||||
visualShapeOut.m_localVisualFrame[0] = tr.getOrigin()[0];
|
visualShapeOut.m_localVisualFrame[0] = tr.getOrigin()[0];
|
||||||
@@ -414,6 +414,11 @@ void convertURDFToVisualShape(const UrdfShape* visual, const char* urdfPathPrefi
|
|||||||
break;
|
break;
|
||||||
} // case mesh
|
} // case mesh
|
||||||
|
|
||||||
|
case URDF_GEOM_PLANE:
|
||||||
|
// TODO: plane in tiny renderer
|
||||||
|
// TODO: export visualShapeOut for external render
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
b3Warning("TinyRenderer: unknown visual geometry type %i\n", visual->m_geometry.m_type);
|
b3Warning("TinyRenderer: unknown visual geometry type %i\n", visual->m_geometry.m_type);
|
||||||
|
|||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -693,8 +693,9 @@ static PyObject* pybullet_setPhysicsEngineParameter(PyObject* self, PyObject* ar
|
|||||||
static PyObject* pybullet_loadURDF(PyObject* self, PyObject* args, PyObject* keywds)
|
static PyObject* pybullet_loadURDF(PyObject* self, PyObject* args, PyObject* keywds)
|
||||||
{
|
{
|
||||||
int physicsClientId = 0;
|
int physicsClientId = 0;
|
||||||
|
int flags = 0;
|
||||||
|
|
||||||
static char* kwlist[] = {"fileName", "basePosition", "baseOrientation", "useMaximalCoordinates", "useFixedBase", "physicsClientId", NULL};
|
static char* kwlist[] = {"fileName", "basePosition", "baseOrientation", "useMaximalCoordinates", "useFixedBase", "flags","physicsClientId", NULL};
|
||||||
|
|
||||||
static char* kwlistBackwardCompatible4[] = {"fileName", "startPosX", "startPosY", "startPosZ", NULL};
|
static char* kwlistBackwardCompatible4[] = {"fileName", "startPosX", "startPosY", "startPosZ", NULL};
|
||||||
static char* kwlistBackwardCompatible8[] = {"fileName", "startPosX", "startPosY", "startPosZ", "startOrnX", "startOrnY", "startOrnZ", "startOrnW", NULL};
|
static char* kwlistBackwardCompatible8[] = {"fileName", "startPosX", "startPosY", "startPosZ", "startOrnX", "startOrnY", "startOrnZ", "startOrnW", NULL};
|
||||||
@@ -741,7 +742,7 @@ static PyObject* pybullet_loadURDF(PyObject* self, PyObject* args, PyObject* key
|
|||||||
double basePos[3];
|
double basePos[3];
|
||||||
double baseOrn[4];
|
double baseOrn[4];
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, keywds, "s|OOiii", kwlist, &urdfFileName, &basePosObj, &baseOrnObj, &useMaximalCoordinates, &useFixedBase, &physicsClientId))
|
if (!PyArg_ParseTupleAndKeywords(args, keywds, "s|OOiiii", kwlist, &urdfFileName, &basePosObj, &baseOrnObj, &useMaximalCoordinates, &useFixedBase, &flags, &physicsClientId))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -790,6 +791,8 @@ static PyObject* pybullet_loadURDF(PyObject* self, PyObject* args, PyObject* key
|
|||||||
b3SharedMemoryCommandHandle command =
|
b3SharedMemoryCommandHandle command =
|
||||||
b3LoadUrdfCommandInit(sm, urdfFileName);
|
b3LoadUrdfCommandInit(sm, urdfFileName);
|
||||||
|
|
||||||
|
b3LoadUrdfCommandSetFlags(command,flags);
|
||||||
|
|
||||||
// setting the initial position, orientation and other arguments are
|
// setting the initial position, orientation and other arguments are
|
||||||
// optional
|
// optional
|
||||||
b3LoadUrdfCommandSetStartPosition(command, startPosX, startPosY, startPosZ);
|
b3LoadUrdfCommandSetStartPosition(command, startPosX, startPosY, startPosZ);
|
||||||
@@ -2076,7 +2079,7 @@ static PyObject* pybullet_getJointInfo(PyObject* self, PyObject* args, PyObject*
|
|||||||
|
|
||||||
int bodyUniqueId = -1;
|
int bodyUniqueId = -1;
|
||||||
int jointIndex = -1;
|
int jointIndex = -1;
|
||||||
int jointInfoSize = 8; // size of struct b3JointInfo
|
int jointInfoSize = 12; // size of struct b3JointInfo
|
||||||
b3PhysicsClientHandle sm = 0;
|
b3PhysicsClientHandle sm = 0;
|
||||||
int physicsClientId = 0;
|
int physicsClientId = 0;
|
||||||
static char* kwlist[] = {"bodyUniqueId", "jointIndex", "physicsClientId", NULL};
|
static char* kwlist[] = {"bodyUniqueId", "jointIndex", "physicsClientId", NULL};
|
||||||
@@ -2120,6 +2123,15 @@ static PyObject* pybullet_getJointInfo(PyObject* self, PyObject* args, PyObject*
|
|||||||
PyFloat_FromDouble(info.m_jointDamping));
|
PyFloat_FromDouble(info.m_jointDamping));
|
||||||
PyTuple_SetItem(pyListJointInfo, 7,
|
PyTuple_SetItem(pyListJointInfo, 7,
|
||||||
PyFloat_FromDouble(info.m_jointFriction));
|
PyFloat_FromDouble(info.m_jointFriction));
|
||||||
|
PyTuple_SetItem(pyListJointInfo, 8,
|
||||||
|
PyFloat_FromDouble(info.m_jointLowerLimit));
|
||||||
|
PyTuple_SetItem(pyListJointInfo, 9,
|
||||||
|
PyFloat_FromDouble(info.m_jointUpperLimit));
|
||||||
|
PyTuple_SetItem(pyListJointInfo, 10,
|
||||||
|
PyFloat_FromDouble(info.m_jointMaxForce));
|
||||||
|
PyTuple_SetItem(pyListJointInfo, 11,
|
||||||
|
PyFloat_FromDouble(info.m_jointMaxVelocity));
|
||||||
|
|
||||||
return pyListJointInfo;
|
return pyListJointInfo;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -2247,17 +2259,21 @@ static PyObject* pybullet_getLinkState(PyObject* self, PyObject* args, PyObject*
|
|||||||
PyObject* pyLinkStateLocalInertialOrientation;
|
PyObject* pyLinkStateLocalInertialOrientation;
|
||||||
PyObject* pyLinkStateWorldLinkFramePosition;
|
PyObject* pyLinkStateWorldLinkFramePosition;
|
||||||
PyObject* pyLinkStateWorldLinkFrameOrientation;
|
PyObject* pyLinkStateWorldLinkFrameOrientation;
|
||||||
|
PyObject* pyLinkStateWorldLinkLinearVelocity;
|
||||||
|
PyObject* pyLinkStateWorldLinkAngularVelocity;
|
||||||
|
|
||||||
struct b3LinkState linkState;
|
struct b3LinkState linkState;
|
||||||
|
|
||||||
int bodyUniqueId = -1;
|
int bodyUniqueId = -1;
|
||||||
int linkIndex = -1;
|
int linkIndex = -1;
|
||||||
|
int computeLinkVelocity = 0;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
b3PhysicsClientHandle sm = 0;
|
b3PhysicsClientHandle sm = 0;
|
||||||
|
|
||||||
int physicsClientId = 0;
|
int physicsClientId = 0;
|
||||||
static char* kwlist[] = {"bodyUniqueId", "linkIndex", "physicsClientId", NULL};
|
static char* kwlist[] = {"bodyUniqueId", "linkIndex", "computeLinkVelocity", "physicsClientId", NULL};
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, keywds, "ii|i", kwlist, &bodyUniqueId, &linkIndex, &physicsClientId))
|
if (!PyArg_ParseTupleAndKeywords(args, keywds, "ii|ii", kwlist, &bodyUniqueId, &linkIndex,&computeLinkVelocity, &physicsClientId))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -2287,6 +2303,12 @@ static PyObject* pybullet_getLinkState(PyObject* self, PyObject* args, PyObject*
|
|||||||
|
|
||||||
cmd_handle =
|
cmd_handle =
|
||||||
b3RequestActualStateCommandInit(sm, bodyUniqueId);
|
b3RequestActualStateCommandInit(sm, bodyUniqueId);
|
||||||
|
|
||||||
|
if (computeLinkVelocity)
|
||||||
|
{
|
||||||
|
b3RequestActualStateCommandComputeLinkVelocity(cmd_handle,computeLinkVelocity);
|
||||||
|
}
|
||||||
|
|
||||||
status_handle =
|
status_handle =
|
||||||
b3SubmitClientCommandAndWaitStatus(sm, cmd_handle);
|
b3SubmitClientCommandAndWaitStatus(sm, cmd_handle);
|
||||||
|
|
||||||
@@ -2341,7 +2363,16 @@ static PyObject* pybullet_getLinkState(PyObject* self, PyObject* args, PyObject*
|
|||||||
PyFloat_FromDouble(linkState.m_worldLinkFrameOrientation[i]));
|
PyFloat_FromDouble(linkState.m_worldLinkFrameOrientation[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (computeLinkVelocity)
|
||||||
|
{
|
||||||
|
pyLinkState = PyTuple_New(8);
|
||||||
|
} else
|
||||||
|
{
|
||||||
pyLinkState = PyTuple_New(6);
|
pyLinkState = PyTuple_New(6);
|
||||||
|
}
|
||||||
|
|
||||||
PyTuple_SetItem(pyLinkState, 0, pyLinkStateWorldPosition);
|
PyTuple_SetItem(pyLinkState, 0, pyLinkStateWorldPosition);
|
||||||
PyTuple_SetItem(pyLinkState, 1, pyLinkStateWorldOrientation);
|
PyTuple_SetItem(pyLinkState, 1, pyLinkStateWorldOrientation);
|
||||||
PyTuple_SetItem(pyLinkState, 2, pyLinkStateLocalInertialPosition);
|
PyTuple_SetItem(pyLinkState, 2, pyLinkStateLocalInertialPosition);
|
||||||
@@ -2349,6 +2380,20 @@ static PyObject* pybullet_getLinkState(PyObject* self, PyObject* args, PyObject*
|
|||||||
PyTuple_SetItem(pyLinkState, 4, pyLinkStateWorldLinkFramePosition);
|
PyTuple_SetItem(pyLinkState, 4, pyLinkStateWorldLinkFramePosition);
|
||||||
PyTuple_SetItem(pyLinkState, 5, pyLinkStateWorldLinkFrameOrientation);
|
PyTuple_SetItem(pyLinkState, 5, pyLinkStateWorldLinkFrameOrientation);
|
||||||
|
|
||||||
|
if (computeLinkVelocity)
|
||||||
|
{
|
||||||
|
pyLinkStateWorldLinkLinearVelocity = PyTuple_New(3);
|
||||||
|
pyLinkStateWorldLinkAngularVelocity = PyTuple_New(3);
|
||||||
|
for (i = 0; i < 3; ++i)
|
||||||
|
{
|
||||||
|
PyTuple_SetItem(pyLinkStateWorldLinkLinearVelocity, i,
|
||||||
|
PyFloat_FromDouble(linkState.m_worldLinearVelocity[i]));
|
||||||
|
PyTuple_SetItem(pyLinkStateWorldLinkAngularVelocity, i,
|
||||||
|
PyFloat_FromDouble(linkState.m_worldAngularVelocity[i]));
|
||||||
|
}
|
||||||
|
PyTuple_SetItem(pyLinkState, 6, pyLinkStateWorldLinkLinearVelocity);
|
||||||
|
PyTuple_SetItem(pyLinkState, 7, pyLinkStateWorldLinkAngularVelocity);
|
||||||
|
}
|
||||||
return pyLinkState;
|
return pyLinkState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3875,15 +3920,13 @@ static PyObject* pybullet_getCameraImage(PyObject* self, PyObject* args, PyObjec
|
|||||||
b3RequestCameraImageSetLightDiffuseCoeff(command, lightDiffuseCoeff);
|
b3RequestCameraImageSetLightDiffuseCoeff(command, lightDiffuseCoeff);
|
||||||
b3RequestCameraImageSetLightSpecularCoeff(command, lightSpecularCoeff);
|
b3RequestCameraImageSetLightSpecularCoeff(command, lightSpecularCoeff);
|
||||||
|
|
||||||
b3RequestCameraImageSelectRenderer(command, renderer);
|
b3RequestCameraImageSelectRenderer(command, renderer);//renderer could be ER_BULLET_HARDWARE_OPENGL
|
||||||
|
|
||||||
if (b3CanSubmitCommand(sm))
|
if (b3CanSubmitCommand(sm))
|
||||||
{
|
{
|
||||||
b3SharedMemoryStatusHandle statusHandle;
|
b3SharedMemoryStatusHandle statusHandle;
|
||||||
int statusType;
|
int statusType;
|
||||||
|
|
||||||
// b3RequestCameraImageSelectRenderer(command,ER_BULLET_HARDWARE_OPENGL);
|
|
||||||
|
|
||||||
statusHandle = b3SubmitClientCommandAndWaitStatus(sm, command);
|
statusHandle = b3SubmitClientCommandAndWaitStatus(sm, command);
|
||||||
statusType = b3GetStatusType(statusHandle);
|
statusType = b3GetStatusType(statusHandle);
|
||||||
if (statusType == CMD_CAMERA_IMAGE_COMPLETED)
|
if (statusType == CMD_CAMERA_IMAGE_COMPLETED)
|
||||||
@@ -4308,7 +4351,6 @@ static PyObject* pybullet_renderImageObsolete(PyObject* self, PyObject* args)
|
|||||||
b3SharedMemoryStatusHandle statusHandle;
|
b3SharedMemoryStatusHandle statusHandle;
|
||||||
int statusType;
|
int statusType;
|
||||||
|
|
||||||
// b3RequestCameraImageSelectRenderer(command,ER_BULLET_HARDWARE_OPENGL);
|
|
||||||
|
|
||||||
statusHandle = b3SubmitClientCommandAndWaitStatus(sm, command);
|
statusHandle = b3SubmitClientCommandAndWaitStatus(sm, command);
|
||||||
statusType = b3GetStatusType(statusHandle);
|
statusType = b3GetStatusType(statusHandle);
|
||||||
@@ -5381,6 +5423,8 @@ initpybullet(void)
|
|||||||
PyModule_AddIntConstant(m, "ER_TINY_RENDERER", ER_TINY_RENDERER);
|
PyModule_AddIntConstant(m, "ER_TINY_RENDERER", ER_TINY_RENDERER);
|
||||||
PyModule_AddIntConstant(m, "ER_BULLET_HARDWARE_OPENGL", ER_BULLET_HARDWARE_OPENGL);
|
PyModule_AddIntConstant(m, "ER_BULLET_HARDWARE_OPENGL", ER_BULLET_HARDWARE_OPENGL);
|
||||||
|
|
||||||
|
PyModule_AddIntConstant(m, "URDF_USE_INERTIA_FROM_FILE", URDF_USE_INERTIA_FROM_FILE);
|
||||||
|
|
||||||
PyModule_AddIntConstant(m, "B3G_F1", B3G_F1);
|
PyModule_AddIntConstant(m, "B3G_F1", B3G_F1);
|
||||||
PyModule_AddIntConstant(m, "B3G_F2", B3G_F2);
|
PyModule_AddIntConstant(m, "B3G_F2", B3G_F2);
|
||||||
PyModule_AddIntConstant(m, "B3G_F3", B3G_F3);
|
PyModule_AddIntConstant(m, "B3G_F3", B3G_F3);
|
||||||
|
|||||||
@@ -1965,6 +1965,10 @@ const char* btMultiBody::serialize(void* dataBuffer, class btSerializer* seriali
|
|||||||
memPtr->m_parentIndex = getLink(i).m_parent;
|
memPtr->m_parentIndex = getLink(i).m_parent;
|
||||||
memPtr->m_jointDamping = getLink(i).m_jointDamping;
|
memPtr->m_jointDamping = getLink(i).m_jointDamping;
|
||||||
memPtr->m_jointFriction = getLink(i).m_jointFriction;
|
memPtr->m_jointFriction = getLink(i).m_jointFriction;
|
||||||
|
memPtr->m_jointLowerLimit = getLink(i).m_jointLowerLimit;
|
||||||
|
memPtr->m_jointUpperLimit = getLink(i).m_jointUpperLimit;
|
||||||
|
memPtr->m_jointMaxForce = getLink(i).m_jointMaxForce;
|
||||||
|
memPtr->m_jointMaxVelocity = getLink(i).m_jointMaxVelocity;
|
||||||
|
|
||||||
getLink(i).m_eVector.serialize(memPtr->m_parentComToThisComOffset);
|
getLink(i).m_eVector.serialize(memPtr->m_parentComToThisComOffset);
|
||||||
getLink(i).m_dVector.serialize(memPtr->m_thisPivotToThisComOffset);
|
getLink(i).m_dVector.serialize(memPtr->m_thisPivotToThisComOffset);
|
||||||
|
|||||||
@@ -728,6 +728,10 @@ struct btMultiBodyLinkDoubleData
|
|||||||
|
|
||||||
double m_jointDamping;
|
double m_jointDamping;
|
||||||
double m_jointFriction;
|
double m_jointFriction;
|
||||||
|
double m_jointLowerLimit;
|
||||||
|
double m_jointUpperLimit;
|
||||||
|
double m_jointMaxForce;
|
||||||
|
double m_jointMaxVelocity;
|
||||||
|
|
||||||
char *m_linkName;
|
char *m_linkName;
|
||||||
char *m_jointName;
|
char *m_jointName;
|
||||||
@@ -757,6 +761,10 @@ struct btMultiBodyLinkFloatData
|
|||||||
int m_posVarCount;
|
int m_posVarCount;
|
||||||
float m_jointDamping;
|
float m_jointDamping;
|
||||||
float m_jointFriction;
|
float m_jointFriction;
|
||||||
|
float m_jointLowerLimit;
|
||||||
|
float m_jointUpperLimit;
|
||||||
|
float m_jointMaxForce;
|
||||||
|
float m_jointMaxVelocity;
|
||||||
|
|
||||||
char *m_linkName;
|
char *m_linkName;
|
||||||
char *m_jointName;
|
char *m_jointName;
|
||||||
|
|||||||
@@ -136,6 +136,10 @@ btVector3 m_appliedConstraintForce; // In WORLD frame
|
|||||||
|
|
||||||
btScalar m_jointDamping; //todo: implement this internally. It is unused for now, it is set by a URDF loader. User can apply manual damping.
|
btScalar m_jointDamping; //todo: implement this internally. It is unused for now, it is set by a URDF loader. User can apply manual damping.
|
||||||
btScalar m_jointFriction; //todo: implement this internally. It is unused for now, it is set by a URDF loader. User can apply manual friction using a velocity motor.
|
btScalar m_jointFriction; //todo: implement this internally. It is unused for now, it is set by a URDF loader. User can apply manual friction using a velocity motor.
|
||||||
|
btScalar m_jointLowerLimit; //todo: implement this internally. It is unused for now, it is set by a URDF loader.
|
||||||
|
btScalar m_jointUpperLimit; //todo: implement this internally. It is unused for now, it is set by a URDF loader.
|
||||||
|
btScalar m_jointMaxForce; //todo: implement this internally. It is unused for now, it is set by a URDF loader.
|
||||||
|
btScalar m_jointMaxVelocity;//todo: implement this internally. It is unused for now, it is set by a URDF loader.
|
||||||
|
|
||||||
// ctor: set some sensible defaults
|
// ctor: set some sensible defaults
|
||||||
btMultibodyLink()
|
btMultibodyLink()
|
||||||
@@ -153,7 +157,11 @@ btVector3 m_appliedConstraintForce; // In WORLD frame
|
|||||||
m_jointName(0),
|
m_jointName(0),
|
||||||
m_userPtr(0),
|
m_userPtr(0),
|
||||||
m_jointDamping(0),
|
m_jointDamping(0),
|
||||||
m_jointFriction(0)
|
m_jointFriction(0),
|
||||||
|
m_jointLowerLimit(0),
|
||||||
|
m_jointUpperLimit(0),
|
||||||
|
m_jointMaxForce(0),
|
||||||
|
m_jointMaxVelocity(0)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_inertiaLocal.setValue(1, 1, 1);
|
m_inertiaLocal.setValue(1, 1, 1);
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ SET(LinearMath_SRCS
|
|||||||
btPolarDecomposition.cpp
|
btPolarDecomposition.cpp
|
||||||
btQuickprof.cpp
|
btQuickprof.cpp
|
||||||
btSerializer.cpp
|
btSerializer.cpp
|
||||||
|
btSerializer64.cpp
|
||||||
btThreads.cpp
|
btThreads.cpp
|
||||||
btVector3.cpp
|
btVector3.cpp
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -518,7 +518,7 @@ CProfileIterator * CProfileManager::Get_Iterator( void )
|
|||||||
{
|
{
|
||||||
|
|
||||||
int threadIndex = btQuickprofGetCurrentThreadIndex2();
|
int threadIndex = btQuickprofGetCurrentThreadIndex2();
|
||||||
if (threadIndex<0)
|
if ((threadIndex<0) || threadIndex >= BT_QUICKPROF_MAX_THREAD_COUNT)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return new CProfileIterator( &gRoots[threadIndex]);
|
return new CProfileIterator( &gRoots[threadIndex]);
|
||||||
@@ -549,7 +549,7 @@ void CProfileManager::CleanupMemory(void)
|
|||||||
void CProfileManager::Start_Profile( const char * name )
|
void CProfileManager::Start_Profile( const char * name )
|
||||||
{
|
{
|
||||||
int threadIndex = btQuickprofGetCurrentThreadIndex2();
|
int threadIndex = btQuickprofGetCurrentThreadIndex2();
|
||||||
if (threadIndex<0)
|
if ((threadIndex<0) || threadIndex >= BT_QUICKPROF_MAX_THREAD_COUNT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (name != gCurrentNodes[threadIndex]->Get_Name()) {
|
if (name != gCurrentNodes[threadIndex]->Get_Name()) {
|
||||||
@@ -566,7 +566,7 @@ void CProfileManager::Start_Profile( const char * name )
|
|||||||
void CProfileManager::Stop_Profile( void )
|
void CProfileManager::Stop_Profile( void )
|
||||||
{
|
{
|
||||||
int threadIndex = btQuickprofGetCurrentThreadIndex2();
|
int threadIndex = btQuickprofGetCurrentThreadIndex2();
|
||||||
if (threadIndex<0)
|
if ((threadIndex<0) || threadIndex >= BT_QUICKPROF_MAX_THREAD_COUNT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Return will indicate whether we should back up to our parent (we may
|
// Return will indicate whether we should back up to our parent (we may
|
||||||
@@ -590,7 +590,7 @@ void CProfileManager::Reset( void )
|
|||||||
{
|
{
|
||||||
gProfileClock.reset();
|
gProfileClock.reset();
|
||||||
int threadIndex = btQuickprofGetCurrentThreadIndex2();
|
int threadIndex = btQuickprofGetCurrentThreadIndex2();
|
||||||
if (threadIndex<0)
|
if ((threadIndex<0) || threadIndex >= BT_QUICKPROF_MAX_THREAD_COUNT)
|
||||||
return;
|
return;
|
||||||
gRoots[threadIndex].Reset();
|
gRoots[threadIndex].Reset();
|
||||||
gRoots[threadIndex].Call();
|
gRoots[threadIndex].Call();
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ subject to the following restrictions:
|
|||||||
#include <float.h>
|
#include <float.h>
|
||||||
|
|
||||||
/* SVN $Revision$ on $Date$ from http://bullet.googlecode.com*/
|
/* SVN $Revision$ on $Date$ from http://bullet.googlecode.com*/
|
||||||
#define BT_BULLET_VERSION 286
|
#define BT_BULLET_VERSION 287
|
||||||
|
|
||||||
inline int btGetVersion()
|
inline int btGetVersion()
|
||||||
{
|
{
|
||||||
|
|||||||
+285
-875
File diff suppressed because it is too large.
Load diff
@@ -26,7 +26,7 @@ subject to the following restrictions:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
///only the 32bit versions for now
|
|
||||||
extern char sBulletDNAstr[];
|
extern char sBulletDNAstr[];
|
||||||
extern int sBulletDNAlen;
|
extern int sBulletDNAlen;
|
||||||
extern char sBulletDNAstr64[];
|
extern char sBulletDNAstr64[];
|
||||||
@@ -505,7 +505,7 @@ public:
|
|||||||
|
|
||||||
buffer[9] = '2';
|
buffer[9] = '2';
|
||||||
buffer[10] = '8';
|
buffer[10] = '8';
|
||||||
buffer[11] = '6';
|
buffer[11] = '7';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,599 @@
|
|||||||
|
char sBulletDNAstr64[]= {
|
||||||
|
char(83),char(68),char(78),char(65),char(78),char(65),char(77),char(69),char(-124),char(1),char(0),char(0),char(109),char(95),char(115),char(105),char(122),char(101),char(0),char(109),
|
||||||
|
char(95),char(99),char(97),char(112),char(97),char(99),char(105),char(116),char(121),char(0),char(42),char(109),char(95),char(100),char(97),char(116),char(97),char(0),char(109),char(95),
|
||||||
|
char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(115),char(0),char(109),char(95),char(99),char(111),
|
||||||
|
char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110),
|
||||||
|
char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(115),char(0),char(42),char(102),char(105),char(114),char(115),char(116),char(0),char(42),char(108),char(97),char(115),
|
||||||
|
char(116),char(0),char(109),char(95),char(102),char(108),char(111),char(97),char(116),char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(108),char(91),char(51),
|
||||||
|
char(93),char(0),char(109),char(95),char(98),char(97),char(115),char(105),char(115),char(0),char(109),char(95),char(111),char(114),char(105),char(103),char(105),char(110),char(0),char(109),
|
||||||
|
char(95),char(114),char(111),char(111),char(116),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98),
|
||||||
|
char(116),char(114),char(101),char(101),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),
|
||||||
|
char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(91),char(51),char(93),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),
|
||||||
|
char(101),char(100),char(65),char(97),char(98),char(98),char(77),char(97),char(120),char(91),char(51),char(93),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77),
|
||||||
|
char(105),char(110),char(79),char(114),char(103),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77),char(97),char(120),char(79),char(114),char(103),char(0),char(109),
|
||||||
|
char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98),char(80),char(97),
|
||||||
|
char(114),char(116),char(0),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),
|
||||||
|
char(95),char(112),char(97),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101),
|
||||||
|
char(120),char(79),char(114),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(98),
|
||||||
|
char(118),char(104),char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(0),char(109),char(95),char(98),char(118),char(104),char(65),char(97),char(98),char(98),char(77),
|
||||||
|
char(97),char(120),char(0),char(109),char(95),char(98),char(118),char(104),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110),
|
||||||
|
char(0),char(109),char(95),char(99),char(117),char(114),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(117),char(115),
|
||||||
|
char(101),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(110),char(117),char(109),char(67),
|
||||||
|
char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(76),char(101),char(97),char(102),char(78),char(111),char(100),char(101),char(115),char(0),char(109),
|
||||||
|
char(95),char(110),char(117),char(109),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117),
|
||||||
|
char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(99),char(111),char(110),char(116),char(105),char(103),char(117),char(111),
|
||||||
|
char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),
|
||||||
|
char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116),
|
||||||
|
char(114),char(0),char(42),char(109),char(95),char(115),char(117),char(98),char(84),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(80),char(116),char(114),char(0),
|
||||||
|
char(109),char(95),char(116),char(114),char(97),char(118),char(101),char(114),char(115),char(97),char(108),char(77),char(111),char(100),char(101),char(0),char(109),char(95),char(110),char(117),
|
||||||
|
char(109),char(83),char(117),char(98),char(116),char(114),char(101),char(101),char(72),char(101),char(97),char(100),char(101),char(114),char(115),char(0),char(42),char(109),char(95),char(110),
|
||||||
|
char(97),char(109),char(101),char(0),char(109),char(95),char(115),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(112),char(97),
|
||||||
|
char(100),char(100),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),
|
||||||
|
char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(83),char(99),char(97),
|
||||||
|
char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(108),char(97),char(110),char(101),char(78),char(111),char(114),char(109),char(97),char(108),char(0),char(109),
|
||||||
|
char(95),char(112),char(108),char(97),char(110),char(101),char(67),char(111),char(110),char(115),char(116),char(97),char(110),char(116),char(0),char(109),char(95),char(105),char(109),char(112),
|
||||||
|
char(108),char(105),char(99),char(105),char(116),char(83),char(104),char(97),char(112),char(101),char(68),char(105),char(109),char(101),char(110),char(115),char(105),char(111),char(110),char(115),
|
||||||
|
char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(109),
|
||||||
|
char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(111),char(115),char(0),char(109),char(95),char(114),char(97),char(100),
|
||||||
|
char(105),char(117),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(118),char(101),char(120),char(73),char(110),char(116),char(101),char(114),char(110),char(97),char(108),
|
||||||
|
char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(42),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(80),char(111),
|
||||||
|
char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),char(108),char(111),char(99),
|
||||||
|
char(97),char(108),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(83),char(105),char(122),char(101),char(0),
|
||||||
|
char(109),char(95),char(118),char(97),char(108),char(117),char(101),char(0),char(109),char(95),char(112),char(97),char(100),char(91),char(50),char(93),char(0),char(109),char(95),char(118),
|
||||||
|
char(97),char(108),char(117),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(112),char(97),char(100),char(0),char(42),char(109),char(95),char(118),char(101),
|
||||||
|
char(114),char(116),char(105),char(99),char(101),char(115),char(51),char(102),char(0),char(42),char(109),char(95),char(118),char(101),char(114),char(116),char(105),char(99),char(101),char(115),
|
||||||
|
char(51),char(100),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(51),char(50),char(0),char(42),char(109),char(95),char(51),
|
||||||
|
char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(42),char(109),char(95),char(51),char(105),char(110),char(100),char(105),char(99),char(101),
|
||||||
|
char(115),char(56),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(109),char(95),char(110),char(117),
|
||||||
|
char(109),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(86),char(101),char(114),char(116),
|
||||||
|
char(105),char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(109),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(115),char(80),char(116),char(114),
|
||||||
|
char(0),char(109),char(95),char(115),char(99),char(97),char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(101),char(115),char(104),
|
||||||
|
char(80),char(97),char(114),char(116),char(115),char(0),char(109),char(95),char(109),char(101),char(115),char(104),char(73),char(110),char(116),char(101),char(114),char(102),char(97),char(99),
|
||||||
|
char(101),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(70),char(108),char(111),char(97),char(116),char(66),
|
||||||
|
char(118),char(104),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(68),char(111),char(117),char(98),char(108),
|
||||||
|
char(101),char(66),char(118),char(104),char(0),char(42),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111),
|
||||||
|
char(77),char(97),char(112),char(0),char(109),char(95),char(112),char(97),char(100),char(51),char(91),char(52),char(93),char(0),char(109),char(95),char(116),char(114),char(105),char(109),
|
||||||
|
char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(116),char(114),char(97),char(110),char(115),
|
||||||
|
char(102),char(111),char(114),char(109),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(0),char(109),
|
||||||
|
char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(99),char(104),
|
||||||
|
char(105),char(108),char(100),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),
|
||||||
|
char(97),char(112),char(101),char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(104),char(105),char(108),char(100),char(83),char(104),char(97),
|
||||||
|
char(112),char(101),char(115),char(0),char(109),char(95),char(117),char(112),char(65),char(120),char(105),char(115),char(0),char(109),char(95),char(117),char(112),char(73),char(110),char(100),
|
||||||
|
char(101),char(120),char(0),char(109),char(95),char(102),char(108),char(97),char(103),char(115),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(48),char(86),
|
||||||
|
char(49),char(65),char(110),char(103),char(108),char(101),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(49),char(86),char(50),char(65),char(110),char(103),
|
||||||
|
char(108),char(101),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(50),char(86),char(48),char(65),char(110),char(103),char(108),char(101),char(0),char(42),
|
||||||
|
char(109),char(95),char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108),char(101),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(110),char(101),
|
||||||
|
char(120),char(116),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(118),char(97),char(108),char(117),char(101),char(65),char(114),char(114),char(97),char(121),char(80),
|
||||||
|
char(116),char(114),char(0),char(42),char(109),char(95),char(107),char(101),char(121),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),
|
||||||
|
char(99),char(111),char(110),char(118),char(101),char(120),char(69),char(112),char(115),char(105),char(108),char(111),char(110),char(0),char(109),char(95),char(112),char(108),char(97),char(110),
|
||||||
|
char(97),char(114),char(69),char(112),char(115),char(105),char(108),char(111),char(110),char(0),char(109),char(95),char(101),char(113),char(117),char(97),char(108),char(86),char(101),char(114),
|
||||||
|
char(116),char(101),char(120),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(68),
|
||||||
|
char(105),char(115),char(116),char(97),char(110),char(99),char(101),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(122),
|
||||||
|
char(101),char(114),char(111),char(65),char(114),char(101),char(97),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(110),
|
||||||
|
char(101),char(120),char(116),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108),char(101),char(83),
|
||||||
|
char(105),char(122),char(101),char(0),char(109),char(95),char(110),char(117),char(109),char(86),char(97),char(108),char(117),char(101),char(115),char(0),char(109),char(95),char(110),char(117),
|
||||||
|
char(109),char(75),char(101),char(121),char(115),char(0),char(109),char(95),char(103),char(105),char(109),char(112),char(97),char(99),char(116),char(83),char(117),char(98),char(84),char(121),
|
||||||
|
char(112),char(101),char(0),char(42),char(109),char(95),char(117),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),
|
||||||
|
char(70),char(108),char(111),char(97),char(116),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(117),char(110),char(115),char(99),char(97),char(108),char(101),char(100),
|
||||||
|
char(80),char(111),char(105),char(110),char(116),char(115),char(68),char(111),char(117),char(98),char(108),char(101),char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),
|
||||||
|
char(109),char(85),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(112),char(97),
|
||||||
|
char(100),char(100),char(105),char(110),char(103),char(51),char(91),char(52),char(93),char(0),char(42),char(109),char(95),char(98),char(114),char(111),char(97),char(100),char(112),char(104),
|
||||||
|
char(97),char(115),char(101),char(72),char(97),char(110),char(100),char(108),char(101),char(0),char(42),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),
|
||||||
|
char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0),char(42),char(109),char(95),char(114),char(111),char(111),char(116),char(67),char(111),char(108),char(108),char(105),
|
||||||
|
char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0),char(109),char(95),char(119),char(111),char(114),char(108),char(100),char(84),char(114),char(97),
|
||||||
|
char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),
|
||||||
|
char(111),char(110),char(87),char(111),char(114),char(108),char(100),char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105),
|
||||||
|
char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(76),char(105),char(110),char(101),char(97),char(114),char(86),char(101),
|
||||||
|
char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),
|
||||||
|
char(111),char(110),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),
|
||||||
|
char(97),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105),char(99),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),
|
||||||
|
char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(99),char(116),char(80),char(114),char(111),char(99),char(101),char(115),char(115),char(105),char(110),char(103),char(84),
|
||||||
|
char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(100),char(101),char(97),char(99),char(116),char(105),char(118),char(97),char(116),
|
||||||
|
char(105),char(111),char(110),char(84),char(105),char(109),char(101),char(0),char(109),char(95),char(102),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),
|
||||||
|
char(95),char(114),char(111),char(108),char(108),char(105),char(110),char(103),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),
|
||||||
|
char(111),char(110),char(116),char(97),char(99),char(116),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(99),char(111),char(110),char(116),
|
||||||
|
char(97),char(99),char(116),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),
|
||||||
|
char(116),char(117),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(104),char(105),char(116),char(70),char(114),char(97),char(99),char(116),char(105),char(111),char(110),
|
||||||
|
char(0),char(109),char(95),char(99),char(99),char(100),char(83),char(119),char(101),char(112),char(116),char(83),char(112),char(104),char(101),char(114),char(101),char(82),char(97),char(100),
|
||||||
|
char(105),char(117),char(115),char(0),char(109),char(95),char(99),char(99),char(100),char(77),char(111),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),
|
||||||
|
char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(104),char(97),char(115),char(65),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105),
|
||||||
|
char(99),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),
|
||||||
|
char(110),char(70),char(108),char(97),char(103),char(115),char(0),char(109),char(95),char(105),char(115),char(108),char(97),char(110),char(100),char(84),char(97),char(103),char(49),char(0),
|
||||||
|
char(109),char(95),char(99),char(111),char(109),char(112),char(97),char(110),char(105),char(111),char(110),char(73),char(100),char(0),char(109),char(95),char(97),char(99),char(116),char(105),
|
||||||
|
char(118),char(97),char(116),char(105),char(111),char(110),char(83),char(116),char(97),char(116),char(101),char(49),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),
|
||||||
|
char(110),char(97),char(108),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(99),char(104),char(101),char(99),char(107),char(67),char(111),char(108),char(108),char(105),
|
||||||
|
char(100),char(101),char(87),char(105),char(116),char(104),char(0),char(109),char(95),char(116),char(97),char(117),char(0),char(109),char(95),char(100),char(97),char(109),char(112),char(105),
|
||||||
|
char(110),char(103),char(0),char(109),char(95),char(116),char(105),char(109),char(101),char(83),char(116),char(101),char(112),char(0),char(109),char(95),char(109),char(97),char(120),char(69),
|
||||||
|
char(114),char(114),char(111),char(114),char(82),char(101),char(100),char(117),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(115),char(111),char(114),char(0),
|
||||||
|
char(109),char(95),char(101),char(114),char(112),char(0),char(109),char(95),char(101),char(114),char(112),char(50),char(0),char(109),char(95),char(103),char(108),char(111),char(98),char(97),
|
||||||
|
char(108),char(67),char(102),char(109),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(80),
|
||||||
|
char(101),char(110),char(101),char(116),char(114),char(97),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),
|
||||||
|
char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(84),char(117),char(114),char(110),char(69),char(114),
|
||||||
|
char(112),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(108),char(111),char(112),char(0),char(109),char(95),char(119),char(97),char(114),
|
||||||
|
char(109),char(115),char(116),char(97),char(114),char(116),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(109),char(97),
|
||||||
|
char(120),char(71),char(121),char(114),char(111),char(115),char(99),char(111),char(112),char(105),char(99),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(115),
|
||||||
|
char(105),char(110),char(103),char(108),char(101),char(65),char(120),char(105),char(115),char(82),char(111),char(108),char(108),char(105),char(110),char(103),char(70),char(114),char(105),char(99),
|
||||||
|
char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(110),char(117),char(109),char(73),
|
||||||
|
char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(115),char(111),char(108),char(118),char(101),char(114),char(77),char(111),
|
||||||
|
char(100),char(101),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(110),char(103),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(82),
|
||||||
|
char(101),char(115),char(116),char(105),char(116),char(117),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),
|
||||||
|
char(109),char(95),char(109),char(105),char(110),char(105),char(109),char(117),char(109),char(83),char(111),char(108),char(118),char(101),char(114),char(66),char(97),char(116),char(99),char(104),
|
||||||
|
char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),
|
||||||
|
char(109),char(95),char(115),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(0),char(109),char(95),char(103),char(114),char(97),char(118),char(105),
|
||||||
|
char(116),char(121),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),
|
||||||
|
char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(105),char(110),char(118),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(84),char(101),char(110),
|
||||||
|
char(115),char(111),char(114),char(87),char(111),char(114),char(108),char(100),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(86),char(101),char(108),
|
||||||
|
char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(86),char(101),char(108),char(111),char(99),
|
||||||
|
char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(70),char(97),char(99),char(116),char(111),char(114),char(0),
|
||||||
|
char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(103),char(114),char(97),
|
||||||
|
char(118),char(105),char(116),char(121),char(95),char(97),char(99),char(99),char(101),char(108),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(0),char(109),char(95),
|
||||||
|
char(105),char(110),char(118),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(76),char(111),char(99),char(97),char(108),char(0),char(109),char(95),char(116),char(111),
|
||||||
|
char(116),char(97),char(108),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(116),char(111),char(116),char(97),char(108),char(84),char(111),char(114),char(113),
|
||||||
|
char(117),char(101),char(0),char(109),char(95),char(105),char(110),char(118),char(101),char(114),char(115),char(101),char(77),char(97),char(115),char(115),char(0),char(109),char(95),char(108),
|
||||||
|
char(105),char(110),char(101),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),
|
||||||
|
char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),
|
||||||
|
char(97),char(108),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(97),char(100),
|
||||||
|
char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(76),char(105),char(110),char(101),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),
|
||||||
|
char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),char(0),char(109),char(95),char(97),char(100),char(100),char(105),
|
||||||
|
char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),
|
||||||
|
char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),char(0),char(109),char(95),char(97),char(100),char(100),char(105),char(116),
|
||||||
|
char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(70),
|
||||||
|
char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(108),char(101),char(101),char(112),char(105),
|
||||||
|
char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),
|
||||||
|
char(114),char(83),char(108),char(101),char(101),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),
|
||||||
|
char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),
|
||||||
|
char(95),char(110),char(117),char(109),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(82),char(111),char(119),char(115),char(0),char(110),
|
||||||
|
char(117),char(98),char(0),char(42),char(109),char(95),char(114),char(98),char(65),char(0),char(42),char(109),char(95),char(114),char(98),char(66),char(0),char(109),char(95),char(111),
|
||||||
|
char(98),char(106),char(101),char(99),char(116),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111),char(110),char(115),
|
||||||
|
char(116),char(114),char(97),char(105),char(110),char(116),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111),char(110),
|
||||||
|
char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(73),char(100),char(0),char(109),char(95),char(110),char(101),char(101),char(100),char(115),char(70),char(101),char(101),
|
||||||
|
char(100),char(98),char(97),char(99),char(107),char(0),char(109),char(95),char(97),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117),char(108),
|
||||||
|
char(115),char(101),char(0),char(109),char(95),char(100),char(98),char(103),char(68),char(114),char(97),char(119),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(100),
|
||||||
|
char(105),char(115),char(97),char(98),char(108),char(101),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(115),char(66),char(101),char(116),char(119),
|
||||||
|
char(101),char(101),char(110),char(76),char(105),char(110),char(107),char(101),char(100),char(66),char(111),char(100),char(105),char(101),char(115),char(0),char(109),char(95),char(111),char(118),
|
||||||
|
char(101),char(114),char(114),char(105),char(100),char(101),char(78),char(117),char(109),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(116),char(101),char(114),char(97),
|
||||||
|
char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(98),char(114),char(101),char(97),char(107),char(105),char(110),char(103),char(73),char(109),char(112),char(117),
|
||||||
|
char(108),char(115),char(101),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(105),char(115),char(69),char(110),char(97),
|
||||||
|
char(98),char(108),char(101),char(100),char(0),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(116),char(121),
|
||||||
|
char(112),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(112),
|
||||||
|
char(105),char(118),char(111),char(116),char(73),char(110),char(65),char(0),char(109),char(95),char(112),char(105),char(118),char(111),char(116),char(73),char(110),char(66),char(0),char(109),
|
||||||
|
char(95),char(114),char(98),char(65),char(70),char(114),char(97),char(109),char(101),char(0),char(109),char(95),char(114),char(98),char(66),char(70),char(114),char(97),char(109),char(101),
|
||||||
|
char(0),char(109),char(95),char(117),char(115),char(101),char(82),char(101),char(102),char(101),char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),
|
||||||
|
char(65),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(79),char(110),char(108),char(121),char(0),char(109),char(95),char(101),char(110),
|
||||||
|
char(97),char(98),char(108),char(101),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(77),char(111),char(116),char(111),char(114),char(0),char(109),char(95),char(109),
|
||||||
|
char(111),char(116),char(111),char(114),char(84),char(97),char(114),char(103),char(101),char(116),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),
|
||||||
|
char(95),char(109),char(97),char(120),char(77),char(111),char(116),char(111),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(108),
|
||||||
|
char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(117),char(112),char(112),char(101),char(114),char(76),char(105),char(109),
|
||||||
|
char(105),char(116),char(0),char(109),char(95),char(108),char(105),char(109),char(105),char(116),char(83),char(111),char(102),char(116),char(110),char(101),char(115),char(115),char(0),char(109),
|
||||||
|
char(95),char(98),char(105),char(97),char(115),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(114),char(101),char(108),char(97),char(120),char(97),
|
||||||
|
char(116),char(105),char(111),char(110),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),
|
||||||
|
char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(115),char(119),char(105),char(110),char(103),char(83),char(112),char(97),char(110),char(49),char(0),char(109),char(95),
|
||||||
|
char(115),char(119),char(105),char(110),char(103),char(83),char(112),char(97),char(110),char(50),char(0),char(109),char(95),char(116),char(119),char(105),char(115),char(116),char(83),char(112),
|
||||||
|
char(97),char(110),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(85),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),
|
||||||
|
char(116),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(76),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),
|
||||||
|
char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(85),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),
|
||||||
|
char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(76),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),
|
||||||
|
char(0),char(109),char(95),char(117),char(115),char(101),char(76),char(105),char(110),char(101),char(97),char(114),char(82),char(101),char(102),char(101),char(114),char(101),char(110),char(99),
|
||||||
|
char(101),char(70),char(114),char(97),char(109),char(101),char(65),char(0),char(109),char(95),char(117),char(115),char(101),char(79),char(102),char(102),char(115),char(101),char(116),char(70),
|
||||||
|
char(111),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(114),char(97),char(109),char(101),char(0),char(109),char(95),
|
||||||
|
char(54),char(100),char(111),char(102),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(115),char(112),char(114),char(105),char(110),char(103),char(69),char(110),char(97),
|
||||||
|
char(98),char(108),char(101),char(100),char(91),char(54),char(93),char(0),char(109),char(95),char(101),char(113),char(117),char(105),char(108),char(105),char(98),char(114),char(105),char(117),
|
||||||
|
char(109),char(80),char(111),char(105),char(110),char(116),char(91),char(54),char(93),char(0),char(109),char(95),char(115),char(112),char(114),char(105),char(110),char(103),char(83),char(116),
|
||||||
|
char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(91),char(54),char(93),char(0),char(109),char(95),char(115),char(112),char(114),char(105),char(110),char(103),char(68),
|
||||||
|
char(97),char(109),char(112),char(105),char(110),char(103),char(91),char(54),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(66),char(111),
|
||||||
|
char(117),char(110),char(99),char(101),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(116),char(111),char(112),char(69),char(82),char(80),
|
||||||
|
char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(116),char(111),char(112),char(67),char(70),char(77),char(0),char(109),char(95),char(108),
|
||||||
|
char(105),char(110),char(101),char(97),char(114),char(77),char(111),char(116),char(111),char(114),char(69),char(82),char(80),char(0),char(109),char(95),char(108),char(105),char(110),char(101),
|
||||||
|
char(97),char(114),char(77),char(111),char(116),char(111),char(114),char(67),char(70),char(77),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(84),
|
||||||
|
char(97),char(114),char(103),char(101),char(116),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(108),char(105),char(110),char(101),
|
||||||
|
char(97),char(114),char(77),char(97),char(120),char(77),char(111),char(116),char(111),char(114),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(108),char(105),
|
||||||
|
char(110),char(101),char(97),char(114),char(83),char(101),char(114),char(118),char(111),char(84),char(97),char(114),char(103),char(101),char(116),char(0),char(109),char(95),char(108),char(105),
|
||||||
|
char(110),char(101),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),
|
||||||
|
char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),
|
||||||
|
char(103),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(69),char(113),char(117),char(105),char(108),char(105),char(98),char(114),char(105),char(117),
|
||||||
|
char(109),char(80),char(111),char(105),char(110),char(116),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(69),char(110),char(97),char(98),char(108),
|
||||||
|
char(101),char(77),char(111),char(116),char(111),char(114),char(91),char(52),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(101),
|
||||||
|
char(114),char(118),char(111),char(77),char(111),char(116),char(111),char(114),char(91),char(52),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),
|
||||||
|
char(69),char(110),char(97),char(98),char(108),char(101),char(83),char(112),char(114),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(108),char(105),
|
||||||
|
char(110),char(101),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(76),
|
||||||
|
char(105),char(109),char(105),char(116),char(101),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(112),
|
||||||
|
char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(76),char(105),char(109),char(105),char(116),char(101),char(100),char(91),char(52),
|
||||||
|
char(93),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(66),char(111),char(117),char(110),char(99),char(101),char(0),char(109),char(95),
|
||||||
|
char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(116),char(111),char(112),char(69),char(82),char(80),char(0),char(109),char(95),char(97),char(110),char(103),
|
||||||
|
char(117),char(108),char(97),char(114),char(83),char(116),char(111),char(112),char(67),char(70),char(77),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),
|
||||||
|
char(114),char(77),char(111),char(116),char(111),char(114),char(69),char(82),char(80),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(77),
|
||||||
|
char(111),char(116),char(111),char(114),char(67),char(70),char(77),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(84),char(97),char(114),
|
||||||
|
char(103),char(101),char(116),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),
|
||||||
|
char(114),char(77),char(97),char(120),char(77),char(111),char(116),char(111),char(114),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(97),char(110),char(103),
|
||||||
|
char(117),char(108),char(97),char(114),char(83),char(101),char(114),char(118),char(111),char(84),char(97),char(114),char(103),char(101),char(116),char(0),char(109),char(95),char(97),char(110),
|
||||||
|
char(103),char(117),char(108),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),
|
||||||
|
char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),
|
||||||
|
char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(69),char(113),char(117),char(105),char(108),char(105),char(98),
|
||||||
|
char(114),char(105),char(117),char(109),char(80),char(111),char(105),char(110),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(69),
|
||||||
|
char(110),char(97),char(98),char(108),char(101),char(77),char(111),char(116),char(111),char(114),char(91),char(52),char(93),char(0),char(109),char(95),char(97),char(110),char(103),char(117),
|
||||||
|
char(108),char(97),char(114),char(83),char(101),char(114),char(118),char(111),char(77),char(111),char(116),char(111),char(114),char(91),char(52),char(93),char(0),char(109),char(95),char(97),
|
||||||
|
char(110),char(103),char(117),char(108),char(97),char(114),char(69),char(110),char(97),char(98),char(108),char(101),char(83),char(112),char(114),char(105),char(110),char(103),char(91),char(52),
|
||||||
|
char(93),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(83),char(116),char(105),
|
||||||
|
char(102),char(102),char(110),char(101),char(115),char(115),char(76),char(105),char(109),char(105),char(116),char(101),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(97),
|
||||||
|
char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(76),
|
||||||
|
char(105),char(109),char(105),char(116),char(101),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(114),char(111),char(116),char(97),char(116),char(101),char(79),char(114),
|
||||||
|
char(100),char(101),char(114),char(0),char(109),char(95),char(97),char(120),char(105),char(115),char(73),char(110),char(65),char(0),char(109),char(95),char(97),char(120),char(105),char(115),
|
||||||
|
char(73),char(110),char(66),char(0),char(109),char(95),char(114),char(97),char(116),char(105),char(111),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),
|
||||||
|
char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),
|
||||||
|
char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(118),char(111),char(108),char(117),char(109),char(101),char(83),char(116),char(105),
|
||||||
|
char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(42),char(109),char(95),char(109),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(0),char(109),
|
||||||
|
char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(112),char(114),char(101),char(118),char(105),char(111),char(117),char(115),
|
||||||
|
char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(118),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),
|
||||||
|
char(109),char(95),char(97),char(99),char(99),char(117),char(109),char(117),char(108),char(97),char(116),char(101),char(100),char(70),char(111),char(114),char(99),char(101),char(0),char(109),
|
||||||
|
char(95),char(110),char(111),char(114),char(109),char(97),char(108),char(0),char(109),char(95),char(97),char(114),char(101),char(97),char(0),char(109),char(95),char(97),char(116),char(116),
|
||||||
|
char(97),char(99),char(104),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(91),char(50),char(93),
|
||||||
|
char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(76),char(101),char(110),char(103),char(116),char(104),char(0),char(109),char(95),char(98),char(98),char(101),char(110),
|
||||||
|
char(100),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(91),char(51),
|
||||||
|
char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(65),char(114),char(101),char(97),char(0),char(109),char(95),char(99),char(48),char(91),char(52),char(93),
|
||||||
|
char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(91),char(52),char(93),char(0),char(109),char(95),
|
||||||
|
char(114),char(101),char(115),char(116),char(86),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(99),char(49),char(0),char(109),char(95),char(99),char(50),
|
||||||
|
char(0),char(109),char(95),char(99),char(48),char(0),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(70),char(114),char(97),char(109),char(101),char(0),char(42),
|
||||||
|
char(109),char(95),char(114),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),
|
||||||
|
char(100),char(101),char(120),char(0),char(109),char(95),char(97),char(101),char(114),char(111),char(77),char(111),char(100),char(101),char(108),char(0),char(109),char(95),char(98),char(97),
|
||||||
|
char(117),char(109),char(103),char(97),char(114),char(116),char(101),char(0),char(109),char(95),char(100),char(114),char(97),char(103),char(0),char(109),char(95),char(108),char(105),char(102),
|
||||||
|
char(116),char(0),char(109),char(95),char(112),char(114),char(101),char(115),char(115),char(117),char(114),char(101),char(0),char(109),char(95),char(118),char(111),char(108),char(117),char(109),
|
||||||
|
char(101),char(0),char(109),char(95),char(100),char(121),char(110),char(97),char(109),char(105),char(99),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),
|
||||||
|
char(109),char(95),char(112),char(111),char(115),char(101),char(77),char(97),char(116),char(99),char(104),char(0),char(109),char(95),char(114),char(105),char(103),char(105),char(100),char(67),
|
||||||
|
char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(107),char(105),char(110),
|
||||||
|
char(101),char(116),char(105),char(99),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),
|
||||||
|
char(109),char(95),char(115),char(111),char(102),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97),char(114),char(100),char(110),char(101),char(115),
|
||||||
|
char(115),char(0),char(109),char(95),char(97),char(110),char(99),char(104),char(111),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),
|
||||||
|
char(95),char(115),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(72),char(97),char(114),
|
||||||
|
char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(75),char(105),char(110),char(101),char(116),char(105),char(99),char(67),
|
||||||
|
char(108),char(117),char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),
|
||||||
|
char(116),char(83),char(111),char(102),char(116),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),
|
||||||
|
char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73),
|
||||||
|
char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(75),char(105),
|
||||||
|
char(110),char(101),char(116),char(105),char(99),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(83),
|
||||||
|
char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(83),char(111),char(102),char(116),char(67),char(108),char(117),char(115),char(116),
|
||||||
|
char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(109),char(97),char(120),
|
||||||
|
char(86),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(116),char(105),char(109),char(101),char(83),char(99),char(97),char(108),char(101),char(0),char(109),
|
||||||
|
char(95),char(118),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),
|
||||||
|
char(109),char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),
|
||||||
|
char(0),char(109),char(95),char(100),char(114),char(105),char(102),char(116),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),
|
||||||
|
char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),
|
||||||
|
char(95),char(114),char(111),char(116),char(0),char(109),char(95),char(115),char(99),char(97),char(108),char(101),char(0),char(109),char(95),char(97),char(113),char(113),char(0),char(109),
|
||||||
|
char(95),char(99),char(111),char(109),char(0),char(42),char(109),char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(115),char(0),char(42),char(109),
|
||||||
|
char(95),char(119),char(101),char(105),char(103),char(104),char(116),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(80),char(111),char(115),char(105),char(116),char(105),
|
||||||
|
char(111),char(110),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(87),char(101),char(105),char(103),char(116),char(115),char(0),char(109),char(95),char(98),char(118),
|
||||||
|
char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(98),char(102),char(114),char(97),char(109),char(101),char(0),char(109),char(95),char(102),char(114),char(97),
|
||||||
|
char(109),char(101),char(120),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(108),char(111),char(99),char(105),char(105),char(0),char(109),char(95),char(105),char(110),
|
||||||
|
char(118),char(119),char(105),char(0),char(109),char(95),char(118),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(91),char(50),char(93),char(0),char(109),
|
||||||
|
char(95),char(100),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(108),char(118),char(0),char(109),
|
||||||
|
char(95),char(97),char(118),char(0),char(42),char(109),char(95),char(102),char(114),char(97),char(109),char(101),char(114),char(101),char(102),char(115),char(0),char(42),char(109),char(95),
|
||||||
|
char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(109),char(97),char(115),char(115),char(101),
|
||||||
|
char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(70),char(114),char(97),char(109),char(101),char(82),char(101),char(102),char(115),char(0),char(109),char(95),char(110),
|
||||||
|
char(117),char(109),char(78),char(111),char(100),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(97),char(115),char(115),char(101),char(115),char(0),
|
||||||
|
char(109),char(95),char(105),char(100),char(109),char(97),char(115),char(115),char(0),char(109),char(95),char(105),char(109),char(97),char(115),char(115),char(0),char(109),char(95),char(110),
|
||||||
|
char(118),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(100),char(105),char(109),char(112),char(117),char(108),char(115),
|
||||||
|
char(101),char(115),char(0),char(109),char(95),char(110),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(108),char(100),char(97),char(109),
|
||||||
|
char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(109),char(97),
|
||||||
|
char(116),char(99),char(104),char(105),char(110),char(103),char(0),char(109),char(95),char(109),char(97),char(120),char(83),char(101),char(108),char(102),char(67),char(111),char(108),char(108),
|
||||||
|
char(105),char(115),char(105),char(111),char(110),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(115),char(101),char(108),char(102),char(67),
|
||||||
|
char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(70),char(97),char(99),char(116),char(111),
|
||||||
|
char(114),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(105),char(110),char(115),char(65),char(110),char(99),char(104),char(111),char(114),char(0),char(109),
|
||||||
|
char(95),char(99),char(111),char(108),char(108),char(105),char(100),char(101),char(0),char(109),char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(110),
|
||||||
|
char(100),char(101),char(120),char(0),char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(65),char(0),char(42),char(109),char(95),char(98),char(111),char(100),char(121),
|
||||||
|
char(66),char(0),char(109),char(95),char(114),char(101),char(102),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(99),char(102),char(109),char(0),char(109),char(95),
|
||||||
|
char(115),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(100),char(101),char(108),char(101),char(116),char(101),char(0),char(109),char(95),char(114),char(101),char(108),
|
||||||
|
char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(91),char(50),char(93),char(0),char(109),char(95),char(98),char(111),char(100),char(121),char(65),char(116),
|
||||||
|
char(121),char(112),char(101),char(0),char(109),char(95),char(98),char(111),char(100),char(121),char(66),char(116),char(121),char(112),char(101),char(0),char(109),char(95),char(106),char(111),
|
||||||
|
char(105),char(110),char(116),char(84),char(121),char(112),char(101),char(0),char(42),char(109),char(95),char(112),char(111),char(115),char(101),char(0),char(42),char(42),char(109),char(95),
|
||||||
|
char(109),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(115),char(0),char(42),char(109),char(95),char(110),char(111),char(100),char(101),char(115),char(0),char(42),
|
||||||
|
char(109),char(95),char(108),char(105),char(110),char(107),char(115),char(0),char(42),char(109),char(95),char(102),char(97),char(99),char(101),char(115),char(0),char(42),char(109),char(95),
|
||||||
|
char(116),char(101),char(116),char(114),char(97),char(104),char(101),char(100),char(114),char(97),char(0),char(42),char(109),char(95),char(97),char(110),char(99),char(104),char(111),char(114),
|
||||||
|
char(115),char(0),char(42),char(109),char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(115),char(0),char(42),char(109),char(95),char(106),char(111),char(105),
|
||||||
|
char(110),char(116),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(115),char(0),char(109),
|
||||||
|
char(95),char(110),char(117),char(109),char(76),char(105),char(110),char(107),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(70),char(97),char(99),char(101),char(115),
|
||||||
|
char(0),char(109),char(95),char(110),char(117),char(109),char(84),char(101),char(116),char(114),char(97),char(104),char(101),char(100),char(114),char(97),char(0),char(109),char(95),char(110),
|
||||||
|
char(117),char(109),char(65),char(110),char(99),char(104),char(111),char(114),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(108),char(117),char(115),char(116),
|
||||||
|
char(101),char(114),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(74),char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(99),char(111),
|
||||||
|
char(110),char(102),char(105),char(103),char(0),char(109),char(95),char(122),char(101),char(114),char(111),char(82),char(111),char(116),char(80),char(97),char(114),char(101),char(110),char(116),
|
||||||
|
char(84),char(111),char(84),char(104),char(105),char(115),char(0),char(109),char(95),char(112),char(97),char(114),char(101),char(110),char(116),char(67),char(111),char(109),char(84),char(111),
|
||||||
|
char(84),char(104),char(105),char(115),char(67),char(111),char(109),char(79),char(102),char(102),char(115),char(101),char(116),char(0),char(109),char(95),char(116),char(104),char(105),char(115),
|
||||||
|
char(80),char(105),char(118),char(111),char(116),char(84),char(111),char(84),char(104),char(105),char(115),char(67),char(111),char(109),char(79),char(102),char(102),char(115),char(101),char(116),
|
||||||
|
char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(65),char(120),char(105),char(115),char(84),char(111),char(112),char(91),char(54),char(93),char(0),char(109),
|
||||||
|
char(95),char(106),char(111),char(105),char(110),char(116),char(65),char(120),char(105),char(115),char(66),char(111),char(116),char(116),char(111),char(109),char(91),char(54),char(93),char(0),
|
||||||
|
char(109),char(95),char(108),char(105),char(110),char(107),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(0),char(109),char(95),char(108),char(105),char(110),char(107),
|
||||||
|
char(77),char(97),char(115),char(115),char(0),char(109),char(95),char(112),char(97),char(114),char(101),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(0),char(109),
|
||||||
|
char(95),char(100),char(111),char(102),char(67),char(111),char(117),char(110),char(116),char(0),char(109),char(95),char(112),char(111),char(115),char(86),char(97),char(114),char(67),char(111),
|
||||||
|
char(117),char(110),char(116),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(80),char(111),char(115),char(91),char(55),char(93),char(0),char(109),char(95),
|
||||||
|
char(106),char(111),char(105),char(110),char(116),char(86),char(101),char(108),char(91),char(54),char(93),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(84),
|
||||||
|
char(111),char(114),char(113),char(117),char(101),char(91),char(54),char(93),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(68),char(97),char(109),char(112),
|
||||||
|
char(105),char(110),char(103),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),
|
||||||
|
char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(76),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),
|
||||||
|
char(106),char(111),char(105),char(110),char(116),char(85),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(106),char(111),
|
||||||
|
char(105),char(110),char(116),char(77),char(97),char(120),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(77),
|
||||||
|
char(97),char(120),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(42),char(109),char(95),char(108),char(105),char(110),char(107),char(78),char(97),
|
||||||
|
char(109),char(101),char(0),char(42),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(78),char(97),char(109),char(101),char(0),char(42),char(109),char(95),char(108),
|
||||||
|
char(105),char(110),char(107),char(67),char(111),char(108),char(108),char(105),char(100),char(101),char(114),char(0),char(42),char(109),char(95),char(112),char(97),char(100),char(100),char(105),
|
||||||
|
char(110),char(103),char(80),char(116),char(114),char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(87),char(111),char(114),char(108),char(100),char(84),char(114),char(97),
|
||||||
|
char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(73),char(110),char(101),char(114),char(116),char(105),char(97),
|
||||||
|
char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(77),char(97),char(115),char(115),char(0),char(42),char(109),char(95),char(98),char(97),char(115),char(101),char(78),
|
||||||
|
char(97),char(109),char(101),char(0),char(42),char(109),char(95),char(98),char(97),char(115),char(101),char(67),char(111),char(108),char(108),char(105),char(100),char(101),char(114),char(0),
|
||||||
|
char(84),char(89),char(80),char(69),char(95),char(0),char(0),char(0),char(99),char(104),char(97),char(114),char(0),char(117),char(99),char(104),char(97),char(114),char(0),char(115),
|
||||||
|
char(104),char(111),char(114),char(116),char(0),char(117),char(115),char(104),char(111),char(114),char(116),char(0),char(105),char(110),char(116),char(0),char(108),char(111),char(110),char(103),
|
||||||
|
char(0),char(117),char(108),char(111),char(110),char(103),char(0),char(102),char(108),char(111),char(97),char(116),char(0),char(100),char(111),char(117),char(98),char(108),char(101),char(0),
|
||||||
|
char(118),char(111),char(105),char(100),char(0),char(80),char(111),char(105),char(110),char(116),char(101),char(114),char(65),char(114),char(114),char(97),char(121),char(0),char(98),char(116),
|
||||||
|
char(80),char(104),char(121),char(115),char(105),char(99),char(115),char(83),char(121),char(115),char(116),char(101),char(109),char(0),char(76),char(105),char(115),char(116),char(66),char(97),
|
||||||
|
char(115),char(101),char(0),char(98),char(116),char(86),char(101),char(99),char(116),char(111),char(114),char(51),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),
|
||||||
|
char(97),char(0),char(98),char(116),char(86),char(101),char(99),char(116),char(111),char(114),char(51),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),
|
||||||
|
char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(116),char(101),char(114),char(110),char(105),char(111),char(110),char(70),char(108),char(111),char(97),char(116),char(68),
|
||||||
|
char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(116),char(101),char(114),char(110),char(105),char(111),char(110),char(68),char(111),char(117),char(98),
|
||||||
|
char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116),char(114),char(105),char(120),char(51),char(120),char(51),char(70),char(108),
|
||||||
|
char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116),char(114),char(105),char(120),char(51),char(120),char(51),char(68),
|
||||||
|
char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),
|
||||||
|
char(109),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(97),char(110),char(115),char(102),char(111),
|
||||||
|
char(114),char(109),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(66),char(118),char(104),char(83),char(117),
|
||||||
|
char(98),char(116),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(79),char(112),char(116),char(105),
|
||||||
|
char(109),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),
|
||||||
|
char(97),char(0),char(98),char(116),char(79),char(112),char(116),char(105),char(109),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),
|
||||||
|
char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(110),char(116),char(105),char(122),
|
||||||
|
char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(110),
|
||||||
|
char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),
|
||||||
|
char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(68),
|
||||||
|
char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(116),char(97),char(116),char(105),char(99),char(80),char(108),char(97),char(110),char(101),char(83),char(104),char(97),
|
||||||
|
char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(118),char(101),char(120),char(73),char(110),char(116),char(101),char(114),
|
||||||
|
char(110),char(97),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(80),char(111),char(115),char(105),char(116),
|
||||||
|
char(105),char(111),char(110),char(65),char(110),char(100),char(82),char(97),char(100),char(105),char(117),char(115),char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),
|
||||||
|
char(83),char(112),char(104),char(101),char(114),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(73),char(110),
|
||||||
|
char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(104),char(111),char(114),char(116),char(73),char(110),
|
||||||
|
char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(104),char(111),char(114),char(116),char(73),char(110),
|
||||||
|
char(116),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112),char(108),char(101),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(67),char(104),char(97),char(114),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112),char(108),char(101),char(116),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(98),char(116),char(77),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(116),
|
||||||
|
char(114),char(105),char(100),char(105),char(110),char(103),char(77),char(101),char(115),char(104),char(73),char(110),char(116),char(101),char(114),char(102),char(97),char(99),char(101),char(68),
|
||||||
|
char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(77),char(101),char(115),char(104),char(83),char(104),
|
||||||
|
char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),
|
||||||
|
char(102),char(111),char(77),char(97),char(112),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(99),char(97),char(108),char(101),char(100),char(84),char(114),
|
||||||
|
char(105),char(97),char(110),char(103),char(108),char(101),char(77),char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),
|
||||||
|
char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117),char(110),char(100),char(83),char(104),char(97),char(112),char(101),char(67),char(104),char(105),char(108),char(100),
|
||||||
|
char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117),char(110),char(100),char(83),char(104),char(97),char(112),char(101),
|
||||||
|
char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(121),char(108),char(105),char(110),char(100),char(101),char(114),char(83),char(104),char(97),char(112),char(101),
|
||||||
|
char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(98),char(116),char(67),char(97),char(112),char(115),char(117),char(108),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),
|
||||||
|
char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97),char(0),char(98),
|
||||||
|
char(116),char(71),char(73),char(109),char(112),char(97),char(99),char(116),char(77),char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),
|
||||||
|
char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(118),char(101),char(120),char(72),char(117),char(108),char(108),char(83),char(104),char(97),char(112),char(101),char(68),
|
||||||
|
char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),
|
||||||
|
char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),
|
||||||
|
char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),
|
||||||
|
char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(68),char(111),
|
||||||
|
char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(83),char(111),
|
||||||
|
char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115),char(87),char(111),char(114),char(108),char(100),char(68),char(111),char(117),char(98),char(108),char(101),char(68),
|
||||||
|
char(97),char(116),char(97),char(0),char(98),char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115),char(87),char(111),char(114),char(108),char(100),char(70),
|
||||||
|
char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),
|
||||||
|
char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),
|
||||||
|
char(121),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(115),char(116),char(114),
|
||||||
|
char(97),char(105),char(110),char(116),char(73),char(110),char(102),char(111),char(49),char(0),char(98),char(116),char(84),char(121),char(112),char(101),char(100),char(67),char(111),char(110),
|
||||||
|
char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),
|
||||||
|
char(121),char(112),char(101),char(100),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),
|
||||||
|
char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(121),char(112),
|
||||||
|
char(101),char(100),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),
|
||||||
|
char(116),char(97),char(0),char(98),char(116),char(80),char(111),char(105),char(110),char(116),char(50),char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),
|
||||||
|
char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(80),char(111),
|
||||||
|
char(105),char(110),char(116),char(50),char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),
|
||||||
|
char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(50),char(0),char(98),char(116),char(80),char(111),char(105),char(110),char(116),char(50),char(80),
|
||||||
|
char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),
|
||||||
|
char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),
|
||||||
|
char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103),char(101),
|
||||||
|
char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),
|
||||||
|
char(98),char(116),char(72),char(105),char(110),char(103),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),
|
||||||
|
char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(50),char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(84),char(119),char(105),char(115),char(116),
|
||||||
|
char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(84),char(119),char(105),char(115),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),
|
||||||
|
char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),
|
||||||
|
char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),
|
||||||
|
char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),
|
||||||
|
char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(50),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),
|
||||||
|
char(68),char(111),char(102),char(83),char(112),char(114),char(105),char(110),char(103),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),
|
||||||
|
char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),char(112),char(114),
|
||||||
|
char(105),char(110),char(103),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),
|
||||||
|
char(97),char(116),char(97),char(50),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),char(112),
|
||||||
|
char(114),char(105),char(110),char(103),char(50),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),
|
||||||
|
char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),char(112),char(114),char(105),char(110),char(103),char(50),
|
||||||
|
char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),
|
||||||
|
char(50),char(0),char(98),char(116),char(83),char(108),char(105),char(100),char(101),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),
|
||||||
|
char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(108),char(105),char(100),char(101),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),
|
||||||
|
char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(97),char(114),
|
||||||
|
char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),
|
||||||
|
char(98),char(116),char(71),char(101),char(97),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),
|
||||||
|
char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(77),char(97),char(116),char(101),char(114),
|
||||||
|
char(105),char(97),char(108),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(78),char(111),char(100),char(101),
|
||||||
|
char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(76),char(105),char(110),char(107),char(68),char(97),char(116),
|
||||||
|
char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(70),char(97),char(99),char(101),char(68),char(97),char(116),char(97),char(0),char(83),
|
||||||
|
char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(84),char(101),char(116),char(114),char(97),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),
|
||||||
|
char(116),char(82),char(105),char(103),char(105),char(100),char(65),char(110),char(99),char(104),char(111),char(114),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),
|
||||||
|
char(116),char(66),char(111),char(100),char(121),char(67),char(111),char(110),char(102),char(105),char(103),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),
|
||||||
|
char(66),char(111),char(100),char(121),char(80),char(111),char(115),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),
|
||||||
|
char(121),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(111),char(102),char(116),char(66),
|
||||||
|
char(111),char(100),char(121),char(74),char(111),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(111),char(102),char(116),char(66),
|
||||||
|
char(111),char(100),char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),
|
||||||
|
char(66),char(111),char(100),char(121),char(76),char(105),char(110),char(107),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),
|
||||||
|
char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(76),char(105),char(110),char(107),char(70),char(108),char(111),char(97),char(116),char(68),
|
||||||
|
char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(68),char(111),char(117),char(98),char(108),
|
||||||
|
char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(70),char(108),char(111),
|
||||||
|
char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(0),char(84),char(76),char(69),char(78),char(1),char(0),char(1),char(0),char(2),char(0),char(2),char(0),
|
||||||
|
char(4),char(0),char(4),char(0),char(4),char(0),char(4),char(0),char(8),char(0),char(0),char(0),char(16),char(0),char(48),char(0),char(16),char(0),char(16),char(0),
|
||||||
|
char(32),char(0),char(16),char(0),char(32),char(0),char(48),char(0),char(96),char(0),char(64),char(0),char(-128),char(0),char(20),char(0),char(48),char(0),char(80),char(0),
|
||||||
|
char(16),char(0),char(96),char(0),char(-112),char(0),char(16),char(0),char(56),char(0),char(56),char(0),char(20),char(0),char(72),char(0),char(4),char(0),char(4),char(0),
|
||||||
|
char(8),char(0),char(4),char(0),char(56),char(0),char(32),char(0),char(80),char(0),char(72),char(0),char(96),char(0),char(80),char(0),char(32),char(0),char(64),char(0),
|
||||||
|
char(64),char(0),char(64),char(0),char(16),char(0),char(72),char(0),char(80),char(0),char(-16),char(1),char(24),char(1),char(-104),char(0),char(88),char(0),char(-72),char(0),
|
||||||
|
char(104),char(0),char(0),char(2),char(-64),char(3),char(8),char(0),char(64),char(0),char(64),char(0),char(0),char(0),char(80),char(0),char(96),char(0),char(-112),char(0),
|
||||||
|
char(-128),char(0),char(104),char(1),char(-24),char(0),char(-104),char(1),char(-120),char(1),char(-32),char(0),char(8),char(1),char(-40),char(1),char(104),char(1),char(-128),char(2),
|
||||||
|
char(-112),char(2),char(-64),char(4),char(-40),char(0),char(120),char(1),char(104),char(0),char(-104),char(0),char(16),char(0),char(104),char(0),char(24),char(0),char(40),char(0),
|
||||||
|
char(104),char(0),char(96),char(0),char(104),char(0),char(-56),char(0),char(104),char(1),char(112),char(0),char(-24),char(1),char(0),char(3),char(-104),char(1),char(-48),char(0),
|
||||||
|
char(112),char(0),char(0),char(0),char(83),char(84),char(82),char(67),char(84),char(0),char(0),char(0),char(10),char(0),char(3),char(0),char(4),char(0),char(0),char(0),
|
||||||
|
char(4),char(0),char(1),char(0),char(9),char(0),char(2),char(0),char(11),char(0),char(3),char(0),char(10),char(0),char(3),char(0),char(10),char(0),char(4),char(0),
|
||||||
|
char(10),char(0),char(5),char(0),char(12),char(0),char(2),char(0),char(9),char(0),char(6),char(0),char(9),char(0),char(7),char(0),char(13),char(0),char(1),char(0),
|
||||||
|
char(7),char(0),char(8),char(0),char(14),char(0),char(1),char(0),char(8),char(0),char(8),char(0),char(15),char(0),char(1),char(0),char(7),char(0),char(8),char(0),
|
||||||
|
char(16),char(0),char(1),char(0),char(8),char(0),char(8),char(0),char(17),char(0),char(1),char(0),char(13),char(0),char(9),char(0),char(18),char(0),char(1),char(0),
|
||||||
|
char(14),char(0),char(9),char(0),char(19),char(0),char(2),char(0),char(17),char(0),char(10),char(0),char(13),char(0),char(11),char(0),char(20),char(0),char(2),char(0),
|
||||||
|
char(18),char(0),char(10),char(0),char(14),char(0),char(11),char(0),char(21),char(0),char(4),char(0),char(4),char(0),char(12),char(0),char(4),char(0),char(13),char(0),
|
||||||
|
char(2),char(0),char(14),char(0),char(2),char(0),char(15),char(0),char(22),char(0),char(6),char(0),char(13),char(0),char(16),char(0),char(13),char(0),char(17),char(0),
|
||||||
|
char(4),char(0),char(18),char(0),char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0),char(23),char(0),char(6),char(0),
|
||||||
|
char(14),char(0),char(16),char(0),char(14),char(0),char(17),char(0),char(4),char(0),char(18),char(0),char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),
|
||||||
|
char(0),char(0),char(21),char(0),char(24),char(0),char(3),char(0),char(2),char(0),char(14),char(0),char(2),char(0),char(15),char(0),char(4),char(0),char(22),char(0),
|
||||||
|
char(25),char(0),char(12),char(0),char(13),char(0),char(23),char(0),char(13),char(0),char(24),char(0),char(13),char(0),char(25),char(0),char(4),char(0),char(26),char(0),
|
||||||
|
char(4),char(0),char(27),char(0),char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0),char(22),char(0),char(30),char(0),char(24),char(0),char(31),char(0),
|
||||||
|
char(21),char(0),char(32),char(0),char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(26),char(0),char(12),char(0),char(14),char(0),char(23),char(0),
|
||||||
|
char(14),char(0),char(24),char(0),char(14),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0),char(4),char(0),char(28),char(0),
|
||||||
|
char(4),char(0),char(29),char(0),char(23),char(0),char(30),char(0),char(24),char(0),char(31),char(0),char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),
|
||||||
|
char(21),char(0),char(32),char(0),char(27),char(0),char(3),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(36),char(0),char(0),char(0),char(37),char(0),
|
||||||
|
char(28),char(0),char(5),char(0),char(27),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(40),char(0),char(7),char(0),char(41),char(0),
|
||||||
|
char(0),char(0),char(21),char(0),char(29),char(0),char(5),char(0),char(27),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(42),char(0),
|
||||||
|
char(7),char(0),char(43),char(0),char(4),char(0),char(44),char(0),char(30),char(0),char(2),char(0),char(13),char(0),char(45),char(0),char(7),char(0),char(46),char(0),
|
||||||
|
char(31),char(0),char(4),char(0),char(29),char(0),char(47),char(0),char(30),char(0),char(48),char(0),char(4),char(0),char(49),char(0),char(0),char(0),char(37),char(0),
|
||||||
|
char(32),char(0),char(1),char(0),char(4),char(0),char(50),char(0),char(33),char(0),char(2),char(0),char(2),char(0),char(50),char(0),char(0),char(0),char(51),char(0),
|
||||||
|
char(34),char(0),char(2),char(0),char(2),char(0),char(52),char(0),char(0),char(0),char(51),char(0),char(35),char(0),char(2),char(0),char(0),char(0),char(52),char(0),
|
||||||
|
char(0),char(0),char(53),char(0),char(36),char(0),char(8),char(0),char(13),char(0),char(54),char(0),char(14),char(0),char(55),char(0),char(32),char(0),char(56),char(0),
|
||||||
|
char(34),char(0),char(57),char(0),char(35),char(0),char(58),char(0),char(33),char(0),char(59),char(0),char(4),char(0),char(60),char(0),char(4),char(0),char(61),char(0),
|
||||||
|
char(37),char(0),char(4),char(0),char(36),char(0),char(62),char(0),char(13),char(0),char(63),char(0),char(4),char(0),char(64),char(0),char(0),char(0),char(37),char(0),
|
||||||
|
char(38),char(0),char(7),char(0),char(27),char(0),char(38),char(0),char(37),char(0),char(65),char(0),char(25),char(0),char(66),char(0),char(26),char(0),char(67),char(0),
|
||||||
|
char(39),char(0),char(68),char(0),char(7),char(0),char(43),char(0),char(0),char(0),char(69),char(0),char(40),char(0),char(2),char(0),char(38),char(0),char(70),char(0),
|
||||||
|
char(13),char(0),char(39),char(0),char(41),char(0),char(4),char(0),char(19),char(0),char(71),char(0),char(27),char(0),char(72),char(0),char(4),char(0),char(73),char(0),
|
||||||
|
char(7),char(0),char(74),char(0),char(42),char(0),char(4),char(0),char(27),char(0),char(38),char(0),char(41),char(0),char(75),char(0),char(4),char(0),char(76),char(0),
|
||||||
|
char(7),char(0),char(43),char(0),char(43),char(0),char(3),char(0),char(29),char(0),char(47),char(0),char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),
|
||||||
|
char(44),char(0),char(3),char(0),char(29),char(0),char(47),char(0),char(4),char(0),char(78),char(0),char(0),char(0),char(37),char(0),char(45),char(0),char(3),char(0),
|
||||||
|
char(29),char(0),char(47),char(0),char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(46),char(0),char(4),char(0),char(4),char(0),char(79),char(0),
|
||||||
|
char(7),char(0),char(80),char(0),char(7),char(0),char(81),char(0),char(7),char(0),char(82),char(0),char(39),char(0),char(14),char(0),char(4),char(0),char(83),char(0),
|
||||||
|
char(4),char(0),char(84),char(0),char(46),char(0),char(85),char(0),char(4),char(0),char(86),char(0),char(7),char(0),char(87),char(0),char(7),char(0),char(88),char(0),
|
||||||
|
char(7),char(0),char(89),char(0),char(7),char(0),char(90),char(0),char(7),char(0),char(91),char(0),char(4),char(0),char(92),char(0),char(4),char(0),char(93),char(0),
|
||||||
|
char(4),char(0),char(94),char(0),char(4),char(0),char(95),char(0),char(0),char(0),char(37),char(0),char(47),char(0),char(5),char(0),char(27),char(0),char(38),char(0),
|
||||||
|
char(37),char(0),char(65),char(0),char(13),char(0),char(39),char(0),char(7),char(0),char(43),char(0),char(4),char(0),char(96),char(0),char(48),char(0),char(5),char(0),
|
||||||
|
char(29),char(0),char(47),char(0),char(13),char(0),char(97),char(0),char(14),char(0),char(98),char(0),char(4),char(0),char(99),char(0),char(0),char(0),char(100),char(0),
|
||||||
|
char(49),char(0),char(27),char(0),char(9),char(0),char(101),char(0),char(9),char(0),char(102),char(0),char(27),char(0),char(103),char(0),char(0),char(0),char(35),char(0),
|
||||||
|
char(20),char(0),char(104),char(0),char(20),char(0),char(105),char(0),char(14),char(0),char(106),char(0),char(14),char(0),char(107),char(0),char(14),char(0),char(108),char(0),
|
||||||
|
char(8),char(0),char(109),char(0),char(8),char(0),char(110),char(0),char(8),char(0),char(111),char(0),char(8),char(0),char(112),char(0),char(8),char(0),char(113),char(0),
|
||||||
|
char(8),char(0),char(114),char(0),char(8),char(0),char(115),char(0),char(8),char(0),char(116),char(0),char(8),char(0),char(117),char(0),char(8),char(0),char(118),char(0),
|
||||||
|
char(4),char(0),char(119),char(0),char(4),char(0),char(120),char(0),char(4),char(0),char(121),char(0),char(4),char(0),char(122),char(0),char(4),char(0),char(123),char(0),
|
||||||
|
char(4),char(0),char(124),char(0),char(4),char(0),char(125),char(0),char(0),char(0),char(37),char(0),char(50),char(0),char(27),char(0),char(9),char(0),char(101),char(0),
|
||||||
|
char(9),char(0),char(102),char(0),char(27),char(0),char(103),char(0),char(0),char(0),char(35),char(0),char(19),char(0),char(104),char(0),char(19),char(0),char(105),char(0),
|
||||||
|
char(13),char(0),char(106),char(0),char(13),char(0),char(107),char(0),char(13),char(0),char(108),char(0),char(7),char(0),char(109),char(0),char(7),char(0),char(110),char(0),
|
||||||
|
char(7),char(0),char(111),char(0),char(7),char(0),char(112),char(0),char(7),char(0),char(113),char(0),char(7),char(0),char(114),char(0),char(7),char(0),char(115),char(0),
|
||||||
|
char(7),char(0),char(116),char(0),char(7),char(0),char(117),char(0),char(7),char(0),char(118),char(0),char(4),char(0),char(119),char(0),char(4),char(0),char(120),char(0),
|
||||||
|
char(4),char(0),char(121),char(0),char(4),char(0),char(122),char(0),char(4),char(0),char(123),char(0),char(4),char(0),char(124),char(0),char(4),char(0),char(125),char(0),
|
||||||
|
char(0),char(0),char(37),char(0),char(51),char(0),char(22),char(0),char(8),char(0),char(126),char(0),char(8),char(0),char(127),char(0),char(8),char(0),char(111),char(0),
|
||||||
|
char(8),char(0),char(-128),char(0),char(8),char(0),char(115),char(0),char(8),char(0),char(-127),char(0),char(8),char(0),char(-126),char(0),char(8),char(0),char(-125),char(0),
|
||||||
|
char(8),char(0),char(-124),char(0),char(8),char(0),char(-123),char(0),char(8),char(0),char(-122),char(0),char(8),char(0),char(-121),char(0),char(8),char(0),char(-120),char(0),
|
||||||
|
char(8),char(0),char(-119),char(0),char(8),char(0),char(-118),char(0),char(8),char(0),char(-117),char(0),char(4),char(0),char(-116),char(0),char(4),char(0),char(-115),char(0),
|
||||||
|
char(4),char(0),char(-114),char(0),char(4),char(0),char(-113),char(0),char(4),char(0),char(-112),char(0),char(0),char(0),char(37),char(0),char(52),char(0),char(22),char(0),
|
||||||
|
char(7),char(0),char(126),char(0),char(7),char(0),char(127),char(0),char(7),char(0),char(111),char(0),char(7),char(0),char(-128),char(0),char(7),char(0),char(115),char(0),
|
||||||
|
char(7),char(0),char(-127),char(0),char(7),char(0),char(-126),char(0),char(7),char(0),char(-125),char(0),char(7),char(0),char(-124),char(0),char(7),char(0),char(-123),char(0),
|
||||||
|
char(7),char(0),char(-122),char(0),char(7),char(0),char(-121),char(0),char(7),char(0),char(-120),char(0),char(7),char(0),char(-119),char(0),char(7),char(0),char(-118),char(0),
|
||||||
|
char(7),char(0),char(-117),char(0),char(4),char(0),char(-116),char(0),char(4),char(0),char(-115),char(0),char(4),char(0),char(-114),char(0),char(4),char(0),char(-113),char(0),
|
||||||
|
char(4),char(0),char(-112),char(0),char(0),char(0),char(37),char(0),char(53),char(0),char(2),char(0),char(51),char(0),char(-111),char(0),char(14),char(0),char(-110),char(0),
|
||||||
|
char(54),char(0),char(2),char(0),char(52),char(0),char(-111),char(0),char(13),char(0),char(-110),char(0),char(55),char(0),char(21),char(0),char(50),char(0),char(-109),char(0),
|
||||||
|
char(17),char(0),char(-108),char(0),char(13),char(0),char(-107),char(0),char(13),char(0),char(-106),char(0),char(13),char(0),char(-105),char(0),char(13),char(0),char(-104),char(0),
|
||||||
|
char(13),char(0),char(-110),char(0),char(13),char(0),char(-103),char(0),char(13),char(0),char(-102),char(0),char(13),char(0),char(-101),char(0),char(13),char(0),char(-100),char(0),
|
||||||
|
char(7),char(0),char(-99),char(0),char(7),char(0),char(-98),char(0),char(7),char(0),char(-97),char(0),char(7),char(0),char(-96),char(0),char(7),char(0),char(-95),char(0),
|
||||||
|
char(7),char(0),char(-94),char(0),char(7),char(0),char(-93),char(0),char(7),char(0),char(-92),char(0),char(7),char(0),char(-91),char(0),char(4),char(0),char(-90),char(0),
|
||||||
|
char(56),char(0),char(22),char(0),char(49),char(0),char(-109),char(0),char(18),char(0),char(-108),char(0),char(14),char(0),char(-107),char(0),char(14),char(0),char(-106),char(0),
|
||||||
|
char(14),char(0),char(-105),char(0),char(14),char(0),char(-104),char(0),char(14),char(0),char(-110),char(0),char(14),char(0),char(-103),char(0),char(14),char(0),char(-102),char(0),
|
||||||
|
char(14),char(0),char(-101),char(0),char(14),char(0),char(-100),char(0),char(8),char(0),char(-99),char(0),char(8),char(0),char(-98),char(0),char(8),char(0),char(-97),char(0),
|
||||||
|
char(8),char(0),char(-96),char(0),char(8),char(0),char(-95),char(0),char(8),char(0),char(-94),char(0),char(8),char(0),char(-93),char(0),char(8),char(0),char(-92),char(0),
|
||||||
|
char(8),char(0),char(-91),char(0),char(4),char(0),char(-90),char(0),char(0),char(0),char(37),char(0),char(57),char(0),char(2),char(0),char(4),char(0),char(-89),char(0),
|
||||||
|
char(4),char(0),char(-88),char(0),char(58),char(0),char(13),char(0),char(55),char(0),char(-87),char(0),char(55),char(0),char(-86),char(0),char(0),char(0),char(35),char(0),
|
||||||
|
char(4),char(0),char(-85),char(0),char(4),char(0),char(-84),char(0),char(4),char(0),char(-83),char(0),char(4),char(0),char(-82),char(0),char(7),char(0),char(-81),char(0),
|
||||||
|
char(7),char(0),char(-80),char(0),char(4),char(0),char(-79),char(0),char(4),char(0),char(-78),char(0),char(7),char(0),char(-77),char(0),char(4),char(0),char(-76),char(0),
|
||||||
|
char(59),char(0),char(13),char(0),char(60),char(0),char(-87),char(0),char(60),char(0),char(-86),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(-85),char(0),
|
||||||
|
char(4),char(0),char(-84),char(0),char(4),char(0),char(-83),char(0),char(4),char(0),char(-82),char(0),char(7),char(0),char(-81),char(0),char(7),char(0),char(-80),char(0),
|
||||||
|
char(4),char(0),char(-79),char(0),char(4),char(0),char(-78),char(0),char(7),char(0),char(-77),char(0),char(4),char(0),char(-76),char(0),char(61),char(0),char(14),char(0),
|
||||||
|
char(56),char(0),char(-87),char(0),char(56),char(0),char(-86),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(-85),char(0),char(4),char(0),char(-84),char(0),
|
||||||
|
char(4),char(0),char(-83),char(0),char(4),char(0),char(-82),char(0),char(8),char(0),char(-81),char(0),char(8),char(0),char(-80),char(0),char(4),char(0),char(-79),char(0),
|
||||||
|
char(4),char(0),char(-78),char(0),char(8),char(0),char(-77),char(0),char(4),char(0),char(-76),char(0),char(0),char(0),char(-75),char(0),char(62),char(0),char(3),char(0),
|
||||||
|
char(59),char(0),char(-74),char(0),char(13),char(0),char(-73),char(0),char(13),char(0),char(-72),char(0),char(63),char(0),char(3),char(0),char(61),char(0),char(-74),char(0),
|
||||||
|
char(14),char(0),char(-73),char(0),char(14),char(0),char(-72),char(0),char(64),char(0),char(3),char(0),char(59),char(0),char(-74),char(0),char(14),char(0),char(-73),char(0),
|
||||||
|
char(14),char(0),char(-72),char(0),char(65),char(0),char(13),char(0),char(59),char(0),char(-74),char(0),char(20),char(0),char(-71),char(0),char(20),char(0),char(-70),char(0),
|
||||||
|
char(4),char(0),char(-69),char(0),char(4),char(0),char(-68),char(0),char(4),char(0),char(-67),char(0),char(7),char(0),char(-66),char(0),char(7),char(0),char(-65),char(0),
|
||||||
|
char(7),char(0),char(-64),char(0),char(7),char(0),char(-63),char(0),char(7),char(0),char(-62),char(0),char(7),char(0),char(-61),char(0),char(7),char(0),char(-60),char(0),
|
||||||
|
char(66),char(0),char(13),char(0),char(59),char(0),char(-74),char(0),char(19),char(0),char(-71),char(0),char(19),char(0),char(-70),char(0),char(4),char(0),char(-69),char(0),
|
||||||
|
char(4),char(0),char(-68),char(0),char(4),char(0),char(-67),char(0),char(7),char(0),char(-66),char(0),char(7),char(0),char(-65),char(0),char(7),char(0),char(-64),char(0),
|
||||||
|
char(7),char(0),char(-63),char(0),char(7),char(0),char(-62),char(0),char(7),char(0),char(-61),char(0),char(7),char(0),char(-60),char(0),char(67),char(0),char(14),char(0),
|
||||||
|
char(61),char(0),char(-74),char(0),char(20),char(0),char(-71),char(0),char(20),char(0),char(-70),char(0),char(4),char(0),char(-69),char(0),char(4),char(0),char(-68),char(0),
|
||||||
|
char(4),char(0),char(-67),char(0),char(8),char(0),char(-66),char(0),char(8),char(0),char(-65),char(0),char(8),char(0),char(-64),char(0),char(8),char(0),char(-63),char(0),
|
||||||
|
char(8),char(0),char(-62),char(0),char(8),char(0),char(-61),char(0),char(8),char(0),char(-60),char(0),char(0),char(0),char(-59),char(0),char(68),char(0),char(10),char(0),
|
||||||
|
char(61),char(0),char(-74),char(0),char(20),char(0),char(-71),char(0),char(20),char(0),char(-70),char(0),char(8),char(0),char(-58),char(0),char(8),char(0),char(-57),char(0),
|
||||||
|
char(8),char(0),char(-56),char(0),char(8),char(0),char(-62),char(0),char(8),char(0),char(-61),char(0),char(8),char(0),char(-60),char(0),char(8),char(0),char(127),char(0),
|
||||||
|
char(69),char(0),char(11),char(0),char(59),char(0),char(-74),char(0),char(19),char(0),char(-71),char(0),char(19),char(0),char(-70),char(0),char(7),char(0),char(-58),char(0),
|
||||||
|
char(7),char(0),char(-57),char(0),char(7),char(0),char(-56),char(0),char(7),char(0),char(-62),char(0),char(7),char(0),char(-61),char(0),char(7),char(0),char(-60),char(0),
|
||||||
|
char(7),char(0),char(127),char(0),char(0),char(0),char(21),char(0),char(70),char(0),char(9),char(0),char(59),char(0),char(-74),char(0),char(19),char(0),char(-71),char(0),
|
||||||
|
char(19),char(0),char(-70),char(0),char(13),char(0),char(-55),char(0),char(13),char(0),char(-54),char(0),char(13),char(0),char(-53),char(0),char(13),char(0),char(-52),char(0),
|
||||||
|
char(4),char(0),char(-51),char(0),char(4),char(0),char(-50),char(0),char(71),char(0),char(9),char(0),char(61),char(0),char(-74),char(0),char(20),char(0),char(-71),char(0),
|
||||||
|
char(20),char(0),char(-70),char(0),char(14),char(0),char(-55),char(0),char(14),char(0),char(-54),char(0),char(14),char(0),char(-53),char(0),char(14),char(0),char(-52),char(0),
|
||||||
|
char(4),char(0),char(-51),char(0),char(4),char(0),char(-50),char(0),char(72),char(0),char(5),char(0),char(70),char(0),char(-49),char(0),char(4),char(0),char(-48),char(0),
|
||||||
|
char(7),char(0),char(-47),char(0),char(7),char(0),char(-46),char(0),char(7),char(0),char(-45),char(0),char(73),char(0),char(5),char(0),char(71),char(0),char(-49),char(0),
|
||||||
|
char(4),char(0),char(-48),char(0),char(8),char(0),char(-47),char(0),char(8),char(0),char(-46),char(0),char(8),char(0),char(-45),char(0),char(74),char(0),char(41),char(0),
|
||||||
|
char(59),char(0),char(-74),char(0),char(19),char(0),char(-71),char(0),char(19),char(0),char(-70),char(0),char(13),char(0),char(-55),char(0),char(13),char(0),char(-54),char(0),
|
||||||
|
char(13),char(0),char(-44),char(0),char(13),char(0),char(-43),char(0),char(13),char(0),char(-42),char(0),char(13),char(0),char(-41),char(0),char(13),char(0),char(-40),char(0),
|
||||||
|
char(13),char(0),char(-39),char(0),char(13),char(0),char(-38),char(0),char(13),char(0),char(-37),char(0),char(13),char(0),char(-36),char(0),char(13),char(0),char(-35),char(0),
|
||||||
|
char(13),char(0),char(-34),char(0),char(0),char(0),char(-33),char(0),char(0),char(0),char(-32),char(0),char(0),char(0),char(-31),char(0),char(0),char(0),char(-30),char(0),
|
||||||
|
char(0),char(0),char(-29),char(0),char(0),char(0),char(-59),char(0),char(13),char(0),char(-53),char(0),char(13),char(0),char(-52),char(0),char(13),char(0),char(-28),char(0),
|
||||||
|
char(13),char(0),char(-27),char(0),char(13),char(0),char(-26),char(0),char(13),char(0),char(-25),char(0),char(13),char(0),char(-24),char(0),char(13),char(0),char(-23),char(0),
|
||||||
|
char(13),char(0),char(-22),char(0),char(13),char(0),char(-21),char(0),char(13),char(0),char(-20),char(0),char(13),char(0),char(-19),char(0),char(13),char(0),char(-18),char(0),
|
||||||
|
char(0),char(0),char(-17),char(0),char(0),char(0),char(-16),char(0),char(0),char(0),char(-15),char(0),char(0),char(0),char(-14),char(0),char(0),char(0),char(-13),char(0),
|
||||||
|
char(4),char(0),char(-12),char(0),char(75),char(0),char(41),char(0),char(61),char(0),char(-74),char(0),char(20),char(0),char(-71),char(0),char(20),char(0),char(-70),char(0),
|
||||||
|
char(14),char(0),char(-55),char(0),char(14),char(0),char(-54),char(0),char(14),char(0),char(-44),char(0),char(14),char(0),char(-43),char(0),char(14),char(0),char(-42),char(0),
|
||||||
|
char(14),char(0),char(-41),char(0),char(14),char(0),char(-40),char(0),char(14),char(0),char(-39),char(0),char(14),char(0),char(-38),char(0),char(14),char(0),char(-37),char(0),
|
||||||
|
char(14),char(0),char(-36),char(0),char(14),char(0),char(-35),char(0),char(14),char(0),char(-34),char(0),char(0),char(0),char(-33),char(0),char(0),char(0),char(-32),char(0),
|
||||||
|
char(0),char(0),char(-31),char(0),char(0),char(0),char(-30),char(0),char(0),char(0),char(-29),char(0),char(0),char(0),char(-59),char(0),char(14),char(0),char(-53),char(0),
|
||||||
|
char(14),char(0),char(-52),char(0),char(14),char(0),char(-28),char(0),char(14),char(0),char(-27),char(0),char(14),char(0),char(-26),char(0),char(14),char(0),char(-25),char(0),
|
||||||
|
char(14),char(0),char(-24),char(0),char(14),char(0),char(-23),char(0),char(14),char(0),char(-22),char(0),char(14),char(0),char(-21),char(0),char(14),char(0),char(-20),char(0),
|
||||||
|
char(14),char(0),char(-19),char(0),char(14),char(0),char(-18),char(0),char(0),char(0),char(-17),char(0),char(0),char(0),char(-16),char(0),char(0),char(0),char(-15),char(0),
|
||||||
|
char(0),char(0),char(-14),char(0),char(0),char(0),char(-13),char(0),char(4),char(0),char(-12),char(0),char(76),char(0),char(9),char(0),char(59),char(0),char(-74),char(0),
|
||||||
|
char(19),char(0),char(-71),char(0),char(19),char(0),char(-70),char(0),char(7),char(0),char(-55),char(0),char(7),char(0),char(-54),char(0),char(7),char(0),char(-53),char(0),
|
||||||
|
char(7),char(0),char(-52),char(0),char(4),char(0),char(-51),char(0),char(4),char(0),char(-50),char(0),char(77),char(0),char(9),char(0),char(61),char(0),char(-74),char(0),
|
||||||
|
char(20),char(0),char(-71),char(0),char(20),char(0),char(-70),char(0),char(8),char(0),char(-55),char(0),char(8),char(0),char(-54),char(0),char(8),char(0),char(-53),char(0),
|
||||||
|
char(8),char(0),char(-52),char(0),char(4),char(0),char(-51),char(0),char(4),char(0),char(-50),char(0),char(78),char(0),char(5),char(0),char(58),char(0),char(-74),char(0),
|
||||||
|
char(13),char(0),char(-11),char(0),char(13),char(0),char(-10),char(0),char(7),char(0),char(-9),char(0),char(0),char(0),char(37),char(0),char(79),char(0),char(4),char(0),
|
||||||
|
char(61),char(0),char(-74),char(0),char(14),char(0),char(-11),char(0),char(14),char(0),char(-10),char(0),char(8),char(0),char(-9),char(0),char(80),char(0),char(4),char(0),
|
||||||
|
char(7),char(0),char(-8),char(0),char(7),char(0),char(-7),char(0),char(7),char(0),char(-6),char(0),char(4),char(0),char(79),char(0),char(81),char(0),char(10),char(0),
|
||||||
|
char(80),char(0),char(-5),char(0),char(13),char(0),char(-4),char(0),char(13),char(0),char(-3),char(0),char(13),char(0),char(-2),char(0),char(13),char(0),char(-1),char(0),
|
||||||
|
char(13),char(0),char(0),char(1),char(7),char(0),char(-99),char(0),char(7),char(0),char(1),char(1),char(4),char(0),char(2),char(1),char(4),char(0),char(53),char(0),
|
||||||
|
char(82),char(0),char(4),char(0),char(80),char(0),char(-5),char(0),char(4),char(0),char(3),char(1),char(7),char(0),char(4),char(1),char(4),char(0),char(5),char(1),
|
||||||
|
char(83),char(0),char(4),char(0),char(13),char(0),char(0),char(1),char(80),char(0),char(-5),char(0),char(4),char(0),char(6),char(1),char(7),char(0),char(7),char(1),
|
||||||
|
char(84),char(0),char(7),char(0),char(13),char(0),char(8),char(1),char(80),char(0),char(-5),char(0),char(4),char(0),char(9),char(1),char(7),char(0),char(10),char(1),
|
||||||
|
char(7),char(0),char(11),char(1),char(7),char(0),char(12),char(1),char(4),char(0),char(53),char(0),char(85),char(0),char(6),char(0),char(17),char(0),char(13),char(1),
|
||||||
|
char(13),char(0),char(11),char(1),char(13),char(0),char(14),char(1),char(60),char(0),char(15),char(1),char(4),char(0),char(16),char(1),char(7),char(0),char(12),char(1),
|
||||||
|
char(86),char(0),char(26),char(0),char(4),char(0),char(17),char(1),char(7),char(0),char(18),char(1),char(7),char(0),char(127),char(0),char(7),char(0),char(19),char(1),
|
||||||
|
char(7),char(0),char(20),char(1),char(7),char(0),char(21),char(1),char(7),char(0),char(22),char(1),char(7),char(0),char(23),char(1),char(7),char(0),char(24),char(1),
|
||||||
|
char(7),char(0),char(25),char(1),char(7),char(0),char(26),char(1),char(7),char(0),char(27),char(1),char(7),char(0),char(28),char(1),char(7),char(0),char(29),char(1),
|
||||||
|
char(7),char(0),char(30),char(1),char(7),char(0),char(31),char(1),char(7),char(0),char(32),char(1),char(7),char(0),char(33),char(1),char(7),char(0),char(34),char(1),
|
||||||
|
char(7),char(0),char(35),char(1),char(7),char(0),char(36),char(1),char(4),char(0),char(37),char(1),char(4),char(0),char(38),char(1),char(4),char(0),char(39),char(1),
|
||||||
|
char(4),char(0),char(40),char(1),char(4),char(0),char(120),char(0),char(87),char(0),char(12),char(0),char(17),char(0),char(41),char(1),char(17),char(0),char(42),char(1),
|
||||||
|
char(17),char(0),char(43),char(1),char(13),char(0),char(44),char(1),char(13),char(0),char(45),char(1),char(7),char(0),char(46),char(1),char(4),char(0),char(47),char(1),
|
||||||
|
char(4),char(0),char(48),char(1),char(4),char(0),char(49),char(1),char(4),char(0),char(50),char(1),char(7),char(0),char(10),char(1),char(4),char(0),char(53),char(0),
|
||||||
|
char(88),char(0),char(27),char(0),char(19),char(0),char(51),char(1),char(17),char(0),char(52),char(1),char(17),char(0),char(53),char(1),char(13),char(0),char(44),char(1),
|
||||||
|
char(13),char(0),char(54),char(1),char(13),char(0),char(55),char(1),char(13),char(0),char(56),char(1),char(13),char(0),char(57),char(1),char(13),char(0),char(58),char(1),
|
||||||
|
char(4),char(0),char(59),char(1),char(7),char(0),char(60),char(1),char(4),char(0),char(61),char(1),char(4),char(0),char(62),char(1),char(4),char(0),char(63),char(1),
|
||||||
|
char(7),char(0),char(64),char(1),char(7),char(0),char(65),char(1),char(4),char(0),char(66),char(1),char(4),char(0),char(67),char(1),char(7),char(0),char(68),char(1),
|
||||||
|
char(7),char(0),char(69),char(1),char(7),char(0),char(70),char(1),char(7),char(0),char(71),char(1),char(7),char(0),char(72),char(1),char(7),char(0),char(73),char(1),
|
||||||
|
char(4),char(0),char(74),char(1),char(4),char(0),char(75),char(1),char(4),char(0),char(76),char(1),char(89),char(0),char(12),char(0),char(9),char(0),char(77),char(1),
|
||||||
|
char(9),char(0),char(78),char(1),char(13),char(0),char(79),char(1),char(7),char(0),char(80),char(1),char(7),char(0),char(-125),char(0),char(7),char(0),char(81),char(1),
|
||||||
|
char(4),char(0),char(82),char(1),char(13),char(0),char(83),char(1),char(4),char(0),char(84),char(1),char(4),char(0),char(85),char(1),char(4),char(0),char(86),char(1),
|
||||||
|
char(4),char(0),char(53),char(0),char(90),char(0),char(19),char(0),char(50),char(0),char(-109),char(0),char(87),char(0),char(87),char(1),char(80),char(0),char(88),char(1),
|
||||||
|
char(81),char(0),char(89),char(1),char(82),char(0),char(90),char(1),char(83),char(0),char(91),char(1),char(84),char(0),char(92),char(1),char(85),char(0),char(93),char(1),
|
||||||
|
char(88),char(0),char(94),char(1),char(89),char(0),char(95),char(1),char(4),char(0),char(96),char(1),char(4),char(0),char(62),char(1),char(4),char(0),char(97),char(1),
|
||||||
|
char(4),char(0),char(98),char(1),char(4),char(0),char(99),char(1),char(4),char(0),char(100),char(1),char(4),char(0),char(101),char(1),char(4),char(0),char(102),char(1),
|
||||||
|
char(86),char(0),char(103),char(1),char(91),char(0),char(24),char(0),char(16),char(0),char(104),char(1),char(14),char(0),char(105),char(1),char(14),char(0),char(106),char(1),
|
||||||
|
char(14),char(0),char(107),char(1),char(14),char(0),char(108),char(1),char(14),char(0),char(109),char(1),char(8),char(0),char(110),char(1),char(4),char(0),char(111),char(1),
|
||||||
|
char(4),char(0),char(86),char(1),char(4),char(0),char(112),char(1),char(4),char(0),char(113),char(1),char(8),char(0),char(114),char(1),char(8),char(0),char(115),char(1),
|
||||||
|
char(8),char(0),char(116),char(1),char(8),char(0),char(117),char(1),char(8),char(0),char(118),char(1),char(8),char(0),char(119),char(1),char(8),char(0),char(120),char(1),
|
||||||
|
char(8),char(0),char(121),char(1),char(8),char(0),char(122),char(1),char(0),char(0),char(123),char(1),char(0),char(0),char(124),char(1),char(49),char(0),char(125),char(1),
|
||||||
|
char(0),char(0),char(126),char(1),char(92),char(0),char(24),char(0),char(15),char(0),char(104),char(1),char(13),char(0),char(105),char(1),char(13),char(0),char(106),char(1),
|
||||||
|
char(13),char(0),char(107),char(1),char(13),char(0),char(108),char(1),char(13),char(0),char(109),char(1),char(4),char(0),char(112),char(1),char(7),char(0),char(110),char(1),
|
||||||
|
char(4),char(0),char(111),char(1),char(4),char(0),char(86),char(1),char(7),char(0),char(114),char(1),char(7),char(0),char(115),char(1),char(7),char(0),char(116),char(1),
|
||||||
|
char(4),char(0),char(113),char(1),char(7),char(0),char(117),char(1),char(7),char(0),char(118),char(1),char(7),char(0),char(119),char(1),char(7),char(0),char(120),char(1),
|
||||||
|
char(7),char(0),char(121),char(1),char(7),char(0),char(122),char(1),char(0),char(0),char(123),char(1),char(0),char(0),char(124),char(1),char(50),char(0),char(125),char(1),
|
||||||
|
char(0),char(0),char(126),char(1),char(93),char(0),char(9),char(0),char(20),char(0),char(127),char(1),char(14),char(0),char(-128),char(1),char(8),char(0),char(-127),char(1),
|
||||||
|
char(0),char(0),char(-126),char(1),char(91),char(0),char(90),char(1),char(49),char(0),char(-125),char(1),char(0),char(0),char(126),char(1),char(4),char(0),char(97),char(1),
|
||||||
|
char(0),char(0),char(37),char(0),char(94),char(0),char(7),char(0),char(0),char(0),char(-126),char(1),char(92),char(0),char(90),char(1),char(50),char(0),char(-125),char(1),
|
||||||
|
char(19),char(0),char(127),char(1),char(13),char(0),char(-128),char(1),char(7),char(0),char(-127),char(1),char(4),char(0),char(97),char(1),};
|
||||||
|
int sBulletDNAlen64= sizeof(sBulletDNAstr64);
|
||||||
+1
-1
@@ -3,5 +3,5 @@ IF(BUILD_BULLET3)
|
|||||||
SUBDIRS( InverseDynamics SharedMemory )
|
SUBDIRS( InverseDynamics SharedMemory )
|
||||||
ENDIF(BUILD_BULLET3)
|
ENDIF(BUILD_BULLET3)
|
||||||
|
|
||||||
SUBDIRS( gtest-1.7.0 collision RobotLogging BulletDynamics )
|
SUBDIRS( gtest-1.7.0 collision BulletDynamics )
|
||||||
|
|
||||||
Reference in new issue
Block a user