Skip to content

Commit

Permalink
Merge pull request #44183 from madmiraal/box_shape-size
Browse files Browse the repository at this point in the history
Use a size Vector for adjusting the size of Rectangles and Boxes
  • Loading branch information
akien-mga authored Dec 28, 2020
2 parents 058f3fe + 4da4fee commit 4ca98c7
Show file tree
Hide file tree
Showing 16 changed files with 90 additions and 177 deletions.
2 changes: 1 addition & 1 deletion doc/classes/BoxMesh.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
</methods>
<members>
<member name="size" type="Vector3" setter="set_size" getter="get_size" default="Vector3( 2, 2, 2 )">
Size of the box mesh.
The box's width, height and depth.
</member>
<member name="subdivide_depth" type="int" setter="set_subdivide_depth" getter="get_subdivide_depth" default="0">
Number of extra edge loops inserted along the Z axis.
Expand Down
4 changes: 2 additions & 2 deletions doc/classes/BoxShape3D.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
<methods>
</methods>
<members>
<member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3( 1, 1, 1 )">
The box's half extents. The width, height and depth of this shape is twice the half extents.
<member name="size" type="Vector3" setter="set_size" getter="get_size" default="Vector3( 2, 2, 2 )">
The box's width, height and depth.
</member>
</members>
<constants>
Expand Down
4 changes: 2 additions & 2 deletions doc/classes/RectangleShape2D.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
<methods>
</methods>
<members>
<member name="extents" type="Vector2" setter="set_extents" getter="get_extents" default="Vector2( 10, 10 )">
The rectangle's half extents. The width and height of this shape is twice the half extents.
<member name="size" type="Vector2" setter="set_size" getter="get_size" default="Vector2( 20, 20 )">
The rectangle's width and height.
</member>
</members>
<constants>
Expand Down
2 changes: 1 addition & 1 deletion editor/import/resource_importer_scene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ Node *ResourceImporterScene::_fix_node(Node *p_node, Node *p_root, Map<Ref<Mesh>
CollisionShape3D *colshape = memnew(CollisionShape3D);
if (empty_draw_type == "CUBE") {
BoxShape3D *boxShape = memnew(BoxShape3D);
boxShape->set_extents(Vector3(1, 1, 1));
boxShape->set_size(Vector3(2, 2, 2));
colshape->set_shape(boxShape);
colshape->set_name("BoxShape3D");
} else if (empty_draw_type == "SINGLE_ARROW") {
Expand Down
24 changes: 12 additions & 12 deletions editor/node_3d_editor_gizmos.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3541,7 +3541,7 @@ String CollisionShape3DGizmoPlugin::get_handle_name(const EditorNode3DGizmo *p_g
}

if (Object::cast_to<BoxShape3D>(*s)) {
return "Extents";
return "Size";
}

if (Object::cast_to<CapsuleShape3D>(*s)) {
Expand Down Expand Up @@ -3574,7 +3574,7 @@ Variant CollisionShape3DGizmoPlugin::get_handle_value(EditorNode3DGizmo *p_gizmo

if (Object::cast_to<BoxShape3D>(*s)) {
Ref<BoxShape3D> bs = s;
return bs->get_extents();
return bs->get_size();
}

if (Object::cast_to<CapsuleShape3D>(*s)) {
Expand Down Expand Up @@ -3658,9 +3658,9 @@ void CollisionShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_i
d = 0.001;
}

Vector3 he = bs->get_extents();
he[p_idx] = d;
bs->set_extents(he);
Vector3 he = bs->get_size();
he[p_idx] = d * 2;
bs->set_size(he);
}

if (Object::cast_to<CapsuleShape3D>(*s)) {
Expand Down Expand Up @@ -3737,14 +3737,14 @@ void CollisionShape3DGizmoPlugin::commit_handle(EditorNode3DGizmo *p_gizmo, int
if (Object::cast_to<BoxShape3D>(*s)) {
Ref<BoxShape3D> ss = s;
if (p_cancel) {
ss->set_extents(p_restore);
ss->set_size(p_restore);
return;
}

UndoRedo *ur = Node3DEditor::get_singleton()->get_undo_redo();
ur->create_action(TTR("Change Box Shape Extents"));
ur->add_do_method(ss.ptr(), "set_extents", ss->get_extents());
ur->add_undo_method(ss.ptr(), "set_extents", p_restore);
ur->create_action(TTR("Change Box Shape Size"));
ur->add_do_method(ss.ptr(), "set_size", ss->get_size());
ur->add_undo_method(ss.ptr(), "set_size", p_restore);
ur->commit_action();
}

Expand Down Expand Up @@ -3878,8 +3878,8 @@ void CollisionShape3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) {
Ref<BoxShape3D> bs = s;
Vector<Vector3> lines;
AABB aabb;
aabb.position = -bs->get_extents();
aabb.size = aabb.position * -2;
aabb.position = -bs->get_size() / 2;
aabb.size = bs->get_size();

for (int i = 0; i < 12; i++) {
Vector3 a, b;
Expand All @@ -3892,7 +3892,7 @@ void CollisionShape3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) {

for (int i = 0; i < 3; i++) {
Vector3 ax;
ax[i] = bs->get_extents()[i];
ax[i] = bs->get_size()[i] / 2;
handles.push_back(ax);
}

Expand Down
16 changes: 8 additions & 8 deletions editor/plugins/collision_shape_2d_editor_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ Variant CollisionShape2DEditor::get_handle_value(int idx) const {
Ref<RectangleShape2D> rect = node->get_shape();

if (idx < 3) {
return rect->get_extents().abs();
return rect->get_size().abs();
}

} break;
Expand Down Expand Up @@ -179,13 +179,13 @@ void CollisionShape2DEditor::set_handle(int idx, Point2 &p_point) {
if (idx < 3) {
Ref<RectangleShape2D> rect = node->get_shape();

Vector2 extents = rect->get_extents();
Vector2 size = rect->get_size();
if (idx == 2) {
extents = p_point;
size = p_point * 2;
} else {
extents[idx] = p_point[idx];
size[idx] = p_point[idx] * 2;
}
rect->set_extents(extents.abs());
rect->set_size(size.abs());

canvas_item_editor->update_viewport();
}
Expand Down Expand Up @@ -279,9 +279,9 @@ void CollisionShape2DEditor::commit_handle(int idx, Variant &p_org) {
case RECTANGLE_SHAPE: {
Ref<RectangleShape2D> rect = node->get_shape();

undo_redo->add_do_method(rect.ptr(), "set_extents", rect->get_extents());
undo_redo->add_do_method(rect.ptr(), "set_size", rect->get_size());
undo_redo->add_do_method(canvas_item_editor, "update_viewport");
undo_redo->add_undo_method(rect.ptr(), "set_extents", p_org);
undo_redo->add_undo_method(rect.ptr(), "set_size", p_org);
undo_redo->add_undo_method(canvas_item_editor, "update_viewport");

} break;
Expand Down Expand Up @@ -493,7 +493,7 @@ void CollisionShape2DEditor::forward_canvas_draw_over_viewport(Control *p_overla
Ref<RectangleShape2D> shape = node->get_shape();

handles.resize(3);
Vector2 ext = shape->get_extents();
Vector2 ext = shape->get_size() / 2;
handles.write[0] = Point2(ext.x, 0);
handles.write[1] = Point2(0, ext.y);
handles.write[2] = Point2(ext.x, ext.y);
Expand Down
68 changes: 16 additions & 52 deletions modules/csg/csg_gizmos.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,7 @@ String CSGShape3DGizmoPlugin::get_handle_name(const EditorNode3DGizmo *p_gizmo,
}

if (Object::cast_to<CSGBox3D>(cs)) {
static const char *hname[3] = { "Width", "Height", "Depth" };
return hname[p_idx];
return "Size";
}

if (Object::cast_to<CSGCylinder3D>(cs)) {
Expand All @@ -81,14 +80,7 @@ Variant CSGShape3DGizmoPlugin::get_handle_value(EditorNode3DGizmo *p_gizmo, int

if (Object::cast_to<CSGBox3D>(cs)) {
CSGBox3D *s = Object::cast_to<CSGBox3D>(cs);
switch (p_idx) {
case 0:
return s->get_width();
case 1:
return s->get_height();
case 2:
return s->get_depth();
}
return s->get_size();
}

if (Object::cast_to<CSGCylinder3D>(cs)) {
Expand Down Expand Up @@ -149,17 +141,9 @@ void CSGShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Ca
d = 0.001;
}

switch (p_idx) {
case 0:
s->set_width(d * 2);
break;
case 1:
s->set_height(d * 2);
break;
case 2:
s->set_depth(d * 2);
break;
}
Vector3 h = s->get_size();
h[p_idx] = d * 2;
s->set_size(h);
}

if (Object::cast_to<CSGCylinder3D>(cs)) {
Expand Down Expand Up @@ -229,38 +213,14 @@ void CSGShape3DGizmoPlugin::commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx,
if (Object::cast_to<CSGBox3D>(cs)) {
CSGBox3D *s = Object::cast_to<CSGBox3D>(cs);
if (p_cancel) {
switch (p_idx) {
case 0:
s->set_width(p_restore);
break;
case 1:
s->set_height(p_restore);
break;
case 2:
s->set_depth(p_restore);
break;
}
s->set_size(p_restore);
return;
}

UndoRedo *ur = Node3DEditor::get_singleton()->get_undo_redo();
ur->create_action(TTR("Change Box Shape Extents"));
static const char *method[3] = { "set_width", "set_height", "set_depth" };
float current = 0;
switch (p_idx) {
case 0:
current = s->get_width();
break;
case 1:
current = s->get_height();
break;
case 2:
current = s->get_depth();
break;
}

ur->add_do_method(s, method[p_idx], current);
ur->add_undo_method(s, method[p_idx], p_restore);
ur->create_action(TTR("Change Box Shape Size"));
ur->add_do_method(s, "set_size", s->get_size());
ur->add_undo_method(s, "set_size", p_restore);
ur->commit_action();
}

Expand Down Expand Up @@ -408,9 +368,13 @@ void CSGShape3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) {
CSGBox3D *s = Object::cast_to<CSGBox3D>(cs);

Vector<Vector3> handles;
handles.push_back(Vector3(s->get_width() * 0.5, 0, 0));
handles.push_back(Vector3(0, s->get_height() * 0.5, 0));
handles.push_back(Vector3(0, 0, s->get_depth() * 0.5));

for (int i = 0; i < 3; i++) {
Vector3 h;
h[i] = s->get_size()[i] / 2;
handles.push_back(h);
}

p_gizmo->add_handles(handles, handles_material);
}

Expand Down
55 changes: 9 additions & 46 deletions modules/csg/csg_shape.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1125,7 +1125,7 @@ CSGBrush *CSGBox3D::_build_brush() {

int face = 0;

Vector3 vertex_mul(width * 0.5, height * 0.5, depth * 0.5);
Vector3 vertex_mul = size / 2;

{
for (int i = 0; i < 6; i++) {
Expand Down Expand Up @@ -1194,55 +1194,25 @@ CSGBrush *CSGBox3D::_build_brush() {
}

void CSGBox3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_width", "width"), &CSGBox3D::set_width);
ClassDB::bind_method(D_METHOD("get_width"), &CSGBox3D::get_width);

ClassDB::bind_method(D_METHOD("set_height", "height"), &CSGBox3D::set_height);
ClassDB::bind_method(D_METHOD("get_height"), &CSGBox3D::get_height);

ClassDB::bind_method(D_METHOD("set_depth", "depth"), &CSGBox3D::set_depth);
ClassDB::bind_method(D_METHOD("get_depth"), &CSGBox3D::get_depth);
ClassDB::bind_method(D_METHOD("set_size", "size"), &CSGBox3D::set_size);
ClassDB::bind_method(D_METHOD("get_size"), &CSGBox3D::get_size);

ClassDB::bind_method(D_METHOD("set_material", "material"), &CSGBox3D::set_material);
ClassDB::bind_method(D_METHOD("get_material"), &CSGBox3D::get_material);

ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "width", PROPERTY_HINT_EXP_RANGE, "0.001,1000.0,0.001,or_greater"), "set_width", "get_width");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "height", PROPERTY_HINT_EXP_RANGE, "0.001,1000.0,0.001,or_greater"), "set_height", "get_height");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "depth", PROPERTY_HINT_EXP_RANGE, "0.001,1000.0,0.001,or_greater"), "set_depth", "get_depth");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size"), "set_size", "get_size");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "StandardMaterial3D,ShaderMaterial"), "set_material", "get_material");
}

void CSGBox3D::set_width(const float p_width) {
width = p_width;
_make_dirty();
update_gizmo();
_change_notify("width");
}

float CSGBox3D::get_width() const {
return width;
}

void CSGBox3D::set_height(const float p_height) {
height = p_height;
_make_dirty();
update_gizmo();
_change_notify("height");
}

float CSGBox3D::get_height() const {
return height;
}

void CSGBox3D::set_depth(const float p_depth) {
depth = p_depth;
void CSGBox3D::set_size(const Vector3 &p_size) {
size = p_size;
_make_dirty();
update_gizmo();
_change_notify("depth");
_change_notify("size");
}

float CSGBox3D::get_depth() const {
return depth;
Vector3 CSGBox3D::get_size() const {
return size;
}

void CSGBox3D::set_material(const Ref<Material> &p_material) {
Expand All @@ -1255,13 +1225,6 @@ Ref<Material> CSGBox3D::get_material() const {
return material;
}

CSGBox3D::CSGBox3D() {
// defaults
width = 2.0;
height = 2.0;
depth = 2.0;
}

///////////////

CSGBrush *CSGCylinder3D::_build_brush() {
Expand Down
16 changes: 4 additions & 12 deletions modules/csg/csg_shape.h
Original file line number Diff line number Diff line change
Expand Up @@ -240,27 +240,19 @@ class CSGBox3D : public CSGPrimitive3D {
virtual CSGBrush *_build_brush() override;

Ref<Material> material;
float width;
float height;
float depth;
Vector3 size = Vector3(2, 2, 2);

protected:
static void _bind_methods();

public:
void set_width(const float p_width);
float get_width() const;

void set_height(const float p_height);
float get_height() const;

void set_depth(const float p_depth);
float get_depth() const;
void set_size(const Vector3 &p_size);
Vector3 get_size() const;

void set_material(const Ref<Material> &p_material);
Ref<Material> get_material() const;

CSGBox3D();
CSGBox3D() {}
};

class CSGCylinder3D : public CSGPrimitive3D {
Expand Down
Loading

0 comments on commit 4ca98c7

Please sign in to comment.