Skip to content

Commit

Permalink
Cone.
Browse files Browse the repository at this point in the history
Signed-off-by: Benjamin Perseghetti <bperseghetti@rudislabs.com>
  • Loading branch information
bperseghetti committed May 12, 2024
1 parent 6af7445 commit af78d41
Show file tree
Hide file tree
Showing 14 changed files with 143 additions and 1 deletion.
3 changes: 2 additions & 1 deletion include/gz/sim/Primitives.hh
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ namespace gz
{
kBox,
kCapsule,
kCone,
kCylinder,
kEllipsoid,
kSphere,
Expand Down Expand Up @@ -67,7 +68,7 @@ namespace gz
/// \brief Return an SDF string of one of the available primitive shape or
/// light types.
/// \param[in] _typeName Type name of the of shape or light to retrieve.
/// Must be one of: box, sphere, cylinder, capsule, ellipsoid, directional,
/// Must be one of: box, sphere, cylinder, cone, capsule, ellipsoid, directional,
/// point, or spot.
/// \return String containing SDF description of primitive shape or light.
/// Empty string if the _typeName is invalid.
Expand Down
24 changes: 24 additions & 0 deletions src/Conversions.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <gz/msgs/axis_aligned_box.pb.h>
#include <gz/msgs/boxgeom.pb.h>
#include <gz/msgs/capsulegeom.pb.h>
#include <gz/msgs/conegeom.pb.h>
#include <gz/msgs/cylindergeom.pb.h>
#include <gz/msgs/ellipsoidgeom.pb.h>
#include <gz/msgs/entity.pb.h>
Expand Down Expand Up @@ -53,6 +54,7 @@
#include <sdf/Box.hh>
#include <sdf/Camera.hh>
#include <sdf/Capsule.hh>
#include <sdf/Cone.hh>
#include <sdf/Cylinder.hh>
#include <sdf/Ellipsoid.hh>
#include <sdf/Geometry.hh>
Expand Down Expand Up @@ -176,6 +178,12 @@ msgs::Geometry gz::sim::convert(const sdf::Geometry &_in)
out.mutable_capsule()->set_radius(_in.CapsuleShape()->Radius());
out.mutable_capsule()->set_length(_in.CapsuleShape()->Length());
}
else if (_in.Type() == sdf::GeometryType::CONE && _in.ConeShape())
{
out.set_type(msgs::Geometry::CONE);
out.mutable_cone()->set_radius(_in.ConeShape()->Radius());
out.mutable_cone()->set_length(_in.ConeShape()->Length());
}
else if (_in.Type() == sdf::GeometryType::CYLINDER && _in.CylinderShape())
{
out.set_type(msgs::Geometry::CYLINDER);
Expand Down Expand Up @@ -293,6 +301,16 @@ sdf::Geometry gz::sim::convert(const msgs::Geometry &_in)

out.SetCapsuleShape(capsuleShape);
}
else if (_in.type() == msgs::Geometry::CONE && _in.has_cone())
{
out.SetType(sdf::GeometryType::CONE);

sdf::Cone coneShape;
coneShape.SetRadius(_in.cone().radius());
coneShape.SetLength(_in.cone().length());

out.SetConeShape(coneShape);
}
else if (_in.type() == msgs::Geometry::CYLINDER && _in.has_cylinder())
{
out.SetType(sdf::GeometryType::CYLINDER);
Expand Down Expand Up @@ -1644,6 +1662,9 @@ msgs::ParticleEmitter gz::sim::convert(const sdf::ParticleEmitter &_in)
case sdf::ParticleEmitterType::CYLINDER:
out.set_type(msgs::ParticleEmitter::CYLINDER);
break;
case sdf::ParticleEmitterType::CONE:
out.set_type(msgs::ParticleEmitter::CONE);
break;
case sdf::ParticleEmitterType::ELLIPSOID:
out.set_type(msgs::ParticleEmitter::ELLIPSOID);
break;
Expand Down Expand Up @@ -1710,6 +1731,9 @@ sdf::ParticleEmitter gz::sim::convert(const msgs::ParticleEmitter &_in)
case msgs::ParticleEmitter::BOX:
out.SetType(sdf::ParticleEmitterType::BOX);
break;
case msgs::ParticleEmitter::CONE:
out.SetType(sdf::ParticleEmitterType::CONE);
break;
case msgs::ParticleEmitter::CYLINDER:
out.SetType(sdf::ParticleEmitterType::CYLINDER);
break;
Expand Down
48 changes: 48 additions & 0 deletions src/Primitives.cc
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,49 @@ constexpr const char * kSphereSdf = R"(<?xml version="1.0"?>
</sdf>
)";

/////////////////////////////////////////////////
constexpr const char * kConeSdf = R"(<?xml version="1.0"?>
<sdf version="1.9">
<model name="cone">
<pose>0 0 0.5 0 0 0</pose>
<link name="cone_link">
<inertial>
<inertia>
<ixx>0.075</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>0.075</iyy>
<iyz>0</iyz>
<izz>0.075</izz>
</inertia>
<mass>1.0</mass>
</inertial>
<collision name="cone_collision">
<geometry>
<cone>
<radius>0.5</radius>
<length>1.0</length>
</cone>
</geometry>
</collision>
<visual name="cone_visual">
<geometry>
<cone>
<radius>0.5</radius>
<length>1.0</length>
</cone>
</geometry>
<material>
<ambient>0.3 0.3 0.3 1</ambient>
<diffuse>0.7 0.7 0.7 1</diffuse>
<specular>1 1 1 1</specular>
</material>
</visual>
</link>
</model>
</sdf>
)";

/////////////////////////////////////////////////
constexpr const char * kCylinderSdf = R"(<?xml version="1.0"?>
<sdf version="1.9">
Expand Down Expand Up @@ -301,6 +344,8 @@ std::string gz::sim::getPrimitiveShape(const PrimitiveShape &_type)
return kBoxSdf;
case PrimitiveShape::kSphere:
return kSphereSdf;
case PrimitiveShape::kCone:
return kConeSdf;
case PrimitiveShape::kCylinder:
return kCylinderSdf;
case PrimitiveShape::kCapsule:
Expand Down Expand Up @@ -339,6 +384,8 @@ std::string gz::sim::getPrimitive(const std::string &_typeName)
return getPrimitiveShape(PrimitiveShape::kSphere);
else if (type == "cylinder")
return getPrimitiveShape(PrimitiveShape::kCylinder);
else if (type == "cone")
return getPrimitiveShape(PrimitiveShape::kCone);
else if (type == "capsule")
return getPrimitiveShape(PrimitiveShape::kCapsule);
else if (type == "ellipsoid")
Expand All @@ -354,6 +401,7 @@ std::string gz::sim::getPrimitive(const std::string &_typeName)
gzwarn << "The valid options are:\n";
gzwarn << " - box\n";
gzwarn << " - sphere\n";
gzwarn << " - cone\n";
gzwarn << " - cylinder\n";
gzwarn << " - capsule\n";
gzwarn << " - ellipsoid\n";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,14 @@ Rectangle {
}
}

MenuItem {
id: coneLink
text: "Cone"
onClicked: {
ComponentInspectorEditor.OnAddEntity("cone", "link");
}
}

MenuItem {
id: cylinderLink
text: "Cylinder"
Expand Down
9 changes: 9 additions & 0 deletions src/gui/plugins/component_inspector_editor/ModelEditor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include <sdf/Box.hh>
#include <sdf/Ellipsoid.hh>
#include <sdf/Capsule.hh>
#include <sdf/Cone.hh>
#include <sdf/Cylinder.hh>
#include <sdf/Mesh.hh>
#include <sdf/Sphere.hh>
Expand Down Expand Up @@ -330,6 +331,14 @@ std::optional<sdf::Geometry> ModelEditorPrivate::CreateGeom(
geom.SetSphereShape(shape);
geom.SetType(sdf::GeometryType::SPHERE);
}
else if (_eta.geomOrLightType == "cone")
{
sdf::Cone shape;
shape.SetRadius(size.X() * 0.5);
shape.SetLength(size.Z());
geom.SetConeShape(shape);
geom.SetType(sdf::GeometryType::CONE);
}
else if (_eta.geomOrLightType == "cylinder")
{
sdf::Cylinder shape;
Expand Down
9 changes: 9 additions & 0 deletions src/gui/plugins/entity_tree/EntityTree.qml
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,15 @@ Rectangle {
}
}

MenuItem
{
id: cone
text: "Cone"
onClicked: {
EntityTree.OnInsertEntity("cone")
}
}

MenuItem
{
id: cylinder
Expand Down
17 changes: 17 additions & 0 deletions src/gui/plugins/shapes/Shapes.qml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,23 @@ ToolBar {
Shapes.OnMode("sphere")
}
}
ToolButton {
id: cone
ToolTip.text: "Cone"
ToolTip.visible: hovered
ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval
contentItem: Image {
fillMode: Image.Pad
horizontalAlignment: Image.AlignHCenter
verticalAlignment: Image.AlignVCenter
source: "cone.png"
sourceSize.width: 24;
sourceSize.height: 24;
}
onClicked: {
Shapes.OnMode("cone")
}
}
ToolButton {
id: cylinder
ToolTip.text: "Cylinder"
Expand Down
1 change: 1 addition & 0 deletions src/gui/plugins/shapes/Shapes.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<file>Shapes.qml</file>
<file>box.png</file>
<file>sphere.png</file>
<file>cone.png</file>
<file>cylinder.png</file>
<file>capsule.png</file>
<file>ellipsoid.png</file>
Expand Down
Binary file added src/gui/plugins/shapes/cone.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
#include <gz/transport/Node.hh>

#include <sdf/Capsule.hh>
#include <sdf/Cone.hh>
#include <sdf/Ellipsoid.hh>
#include <sdf/Joint.hh>
#include <sdf/Heightmap.hh>
Expand Down Expand Up @@ -1191,6 +1192,13 @@ rendering::GeometryPtr VisualizationCapabilitiesPrivate::CreateGeometry(
capsule->SetLength(_geom.CapsuleShape()->Length());
geom = capsule;
}
else if (_geom.Type() == sdf::GeometryType::CONE)
{
geom = this->scene->CreateCone();
scale.X() = _geom.ConeShape()->Radius() * 2;
scale.Y() = scale.X();
scale.Z() = _geom.ConeShape()->Length();
}
else if (_geom.Type() == sdf::GeometryType::CYLINDER)
{
geom = this->scene->CreateCylinder();
Expand Down
2 changes: 2 additions & 0 deletions src/rendering/MarkerManager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,8 @@ rendering::MarkerType MarkerManagerPrivate::MsgToType(
return rendering::MarkerType::MT_BOX;
case msgs::Marker::CAPSULE:
return rendering::MarkerType::MT_CAPSULE;
case msgs::Marker::CONE:
return rendering::MarkerType::MT_CONE;
case msgs::Marker::CYLINDER:
return rendering::MarkerType::MT_CYLINDER;
case msgs::Marker::LINE_STRIP:
Expand Down
13 changes: 13 additions & 0 deletions src/rendering/SceneManager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <sdf/Box.hh>
#include <sdf/Capsule.hh>
#include <sdf/Collision.hh>
#include <sdf/Cone.hh>
#include <sdf/Cylinder.hh>
#include <sdf/Ellipsoid.hh>
#include <sdf/Heightmap.hh>
Expand Down Expand Up @@ -667,6 +668,13 @@ rendering::GeometryPtr SceneManager::LoadGeometry(const sdf::Geometry &_geom,
capsule->SetLength(_geom.CapsuleShape()->Length());
geom = capsule;
}
else if (_geom.Type() == sdf::GeometryType::CONE)
{
geom = this->dataPtr->scene->CreateCone();
scale.X() = _geom.ConeShape()->Radius() * 2;
scale.Y() = scale.X();
scale.Z() = _geom.ConeShape()->Length();
}
else if (_geom.Type() == sdf::GeometryType::CYLINDER)
{
geom = this->dataPtr->scene->CreateCylinder();
Expand Down Expand Up @@ -1578,6 +1586,11 @@ rendering::ParticleEmitterPtr SceneManager::UpdateParticleEmitter(Entity _id,
emitter->SetType(gz::rendering::EmitterType::EM_BOX);
break;
}
case gz::msgs::ParticleEmitter_EmitterType_CONE:
{
emitter->SetType(gz::rendering::EmitterType::EM_CONE);
break;
}
case gz::msgs::ParticleEmitter_EmitterType_CYLINDER:
{
emitter->SetType(gz::rendering::EmitterType::EM_CYLINDER);
Expand Down
1 change: 1 addition & 0 deletions src/systems/physics/Physics.cc
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
#include <gz/physics/RequestEngine.hh>

#include <gz/physics/BoxShape.hh>
#include <gz/physics/ConeShape.hh>
#include <gz/physics/ContactProperties.hh>
#include <gz/physics/CylinderShape.hh>
#include <gz/physics/ForwardStep.hh>
Expand Down
1 change: 1 addition & 0 deletions src/systems/physics/Physics.hh
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
// Features need to be defined ahead of entityCast
#include <gz/physics/BoxShape.hh>
#include <gz/physics/CapsuleShape.hh>
#include <gz/physics/ConeShape.hh>
#include <gz/physics/CylinderShape.hh>
#include <gz/physics/EllipsoidShape.hh>
#include <gz/physics/ForwardStep.hh>
Expand Down

0 comments on commit af78d41

Please sign in to comment.