mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-08-27 03:48:46 +00:00
Merge remote-tracking branch 'upstream/main' into local-fp
This commit is contained in:
23
.github/ISSUE_TEMPLATE/feature_request.md
vendored
23
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,23 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
||||||
|
|
||||||
**Which printers will be beneficial to this feature**
|
|
||||||
E.g. Voron/Klipper based printer/etc...
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
||||||
66
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
66
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
name: 🚀 Feature Request / Enhancement
|
||||||
|
description: Suggest an improvement to make Orca Slicer even better!
|
||||||
|
labels: ["enhancement"]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to fill out this feature request!
|
||||||
|
|
||||||
|
If your idea is still at the formulation stage, or you're not sure it would
|
||||||
|
be useful to many users, you can raise it as a discussion topic under [Ideas](https://github.com/SoftFever/OrcaSlicer/discussions/categories/ideas)
|
||||||
|
or you can raise it on the [Discord server](https://discord.gg/P4VE9UY9gJ).
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue for this feature request?
|
||||||
|
description: |
|
||||||
|
Please search to see if an issue already exists for a feature, or perhaps one similar.
|
||||||
|
You can then comment and react so that we know know much interest there is in the feature request.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing issues
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Is your feature request related to a problem?
|
||||||
|
description: A clear and concise description of what the problem is.
|
||||||
|
placeholder: I'm always frustrated when [...]
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Which printers will be beneficial to this feature?
|
||||||
|
description: Select affected printer firmware type.
|
||||||
|
multiple: true
|
||||||
|
options:
|
||||||
|
- Klipper
|
||||||
|
- Marlin
|
||||||
|
- Others
|
||||||
|
- All
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the solution you'd like
|
||||||
|
description: A clear and concise description of what you want to happen.
|
||||||
|
placeholder: It should do [...]
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe alternatives you've considered
|
||||||
|
description: A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
placeholder: |
|
||||||
|
1. [...]
|
||||||
|
2. [...]
|
||||||
|
3. [...]
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
|
description: |
|
||||||
|
Add any other context, diagrams, illustations or screenshots about the feature request here.
|
||||||
|
|
||||||
|
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -6,6 +6,7 @@
|
|||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"inherits": "fdm_creality_common",
|
"inherits": "fdm_creality_common",
|
||||||
"printer_model": "Creality Ender-3",
|
"printer_model": "Creality Ender-3",
|
||||||
|
"printer_variant": "0.2",
|
||||||
"printer_structure": "i3",
|
"printer_structure": "i3",
|
||||||
"default_print_profile": "0.20mm Standard @Creality Ender3 0.2",
|
"default_print_profile": "0.20mm Standard @Creality Ender3 0.2",
|
||||||
"thumbnails": [""],
|
"thumbnails": [""],
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"inherits": "fdm_creality_common",
|
"inherits": "fdm_creality_common",
|
||||||
"printer_model": "Creality Ender-3",
|
"printer_model": "Creality Ender-3",
|
||||||
|
"printer_variant": "0.4",
|
||||||
"printer_structure": "i3",
|
"printer_structure": "i3",
|
||||||
"default_print_profile": "0.20mm Standard @Creality Ender3",
|
"default_print_profile": "0.20mm Standard @Creality Ender3",
|
||||||
"thumbnails": [""],
|
"thumbnails": [""],
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"inherits": "fdm_creality_common",
|
"inherits": "fdm_creality_common",
|
||||||
"printer_model": "Creality Ender-3",
|
"printer_model": "Creality Ender-3",
|
||||||
|
"printer_variant": "0.6",
|
||||||
"printer_structure": "i3",
|
"printer_structure": "i3",
|
||||||
"default_print_profile": "0.20mm Standard @Creality Ender3 0.6",
|
"default_print_profile": "0.20mm Standard @Creality Ender3 0.6",
|
||||||
"thumbnails": [""],
|
"thumbnails": [""],
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"inherits": "fdm_creality_common",
|
"inherits": "fdm_creality_common",
|
||||||
"printer_model": "Creality Ender-3",
|
"printer_model": "Creality Ender-3",
|
||||||
|
"printer_variant": "0.8",
|
||||||
"printer_structure": "i3",
|
"printer_structure": "i3",
|
||||||
"default_print_profile": "0.20mm Standard @Creality Ender3 0.8",
|
"default_print_profile": "0.20mm Standard @Creality Ender3 0.8",
|
||||||
"thumbnails": [""],
|
"thumbnails": [""],
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "machine",
|
|
||||||
"setting_id": "GM001",
|
|
||||||
"name": "Creality Ender-3 V2 0.4 nozzle",
|
|
||||||
"from": "system",
|
|
||||||
"instantiation": "true",
|
|
||||||
"inherits": "fdm_creality_common",
|
|
||||||
"printer_model": "Creality Ender-3 V2",
|
|
||||||
"printer_structure": "i3",
|
|
||||||
"default_filament_profile": [
|
|
||||||
"Creality Generic PLA"
|
|
||||||
],
|
|
||||||
"default_print_profile": "0.20mm Standard @Creality Ender3V2",
|
|
||||||
"nozzle_diameter": [
|
|
||||||
"0.4"
|
|
||||||
],
|
|
||||||
"printable_area": [
|
|
||||||
"0x0",
|
|
||||||
"220x0",
|
|
||||||
"220x220",
|
|
||||||
"0x220"
|
|
||||||
],
|
|
||||||
"printable_height": "250",
|
|
||||||
"nozzle_type": "undefine",
|
|
||||||
"auxiliary_fan": "0"
|
|
||||||
}
|
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"inherits": "fdm_machine_common",
|
"inherits": "fdm_machine_common",
|
||||||
"printer_model": "MK3S",
|
"printer_model": "MK3S",
|
||||||
|
"printer_variant": "0.25",
|
||||||
"default_filament_profile": [
|
"default_filament_profile": [
|
||||||
"Prusa Generic PLA"
|
"Prusa Generic PLA"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"inherits": "fdm_machine_common",
|
"inherits": "fdm_machine_common",
|
||||||
"printer_model": "MK3S",
|
"printer_model": "MK3S",
|
||||||
|
"printer_variant": "0.4",
|
||||||
"default_filament_profile": [
|
"default_filament_profile": [
|
||||||
"Prusa Generic PLA"
|
"Prusa Generic PLA"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"inherits": "fdm_machine_common",
|
"inherits": "fdm_machine_common",
|
||||||
"printer_model": "MK3S",
|
"printer_model": "MK3S",
|
||||||
|
"printer_variant": "0.6",
|
||||||
"default_filament_profile": [
|
"default_filament_profile": [
|
||||||
"Prusa Generic PLA"
|
"Prusa Generic PLA"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"inherits": "fdm_machine_common",
|
"inherits": "fdm_machine_common",
|
||||||
"printer_model": "MK3S",
|
"printer_model": "MK3S",
|
||||||
|
"printer_variant": "0.8",
|
||||||
"default_filament_profile": [
|
"default_filament_profile": [
|
||||||
"Prusa Generic PLA"
|
"Prusa Generic PLA"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -205,6 +205,13 @@ var LangText = {
|
|||||||
t104: "Nombre del perfil",
|
t104: "Nombre del perfil",
|
||||||
t105: "Autor del perfil",
|
t105: "Autor del perfil",
|
||||||
t106: "Descripción del perfil",
|
t106: "Descripción del perfil",
|
||||||
|
t107: "Modelos en línea",
|
||||||
|
t108: "Más",
|
||||||
|
t109: "Filamentos del sistema",
|
||||||
|
t110: "Filamentos personalizados",
|
||||||
|
t111: "Crear nuevo",
|
||||||
|
t112: "Unirse al programa",
|
||||||
|
t113: "Puede cambiar su elección en preferencias en cualquier momento.",
|
||||||
},
|
},
|
||||||
de_DE: {
|
de_DE: {
|
||||||
t1: "Willkommen im Orca Slicer",
|
t1: "Willkommen im Orca Slicer",
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ static int run_script(const std::string &script, const std::string &gcode, std::
|
|||||||
{
|
{
|
||||||
// Try to obtain user's default shell
|
// Try to obtain user's default shell
|
||||||
const char *shell = ::getenv("SHELL");
|
const char *shell = ::getenv("SHELL");
|
||||||
if (shell == nullptr) { shell = "sh"; }
|
if (shell == nullptr) { shell = "/bin/sh"; }
|
||||||
|
|
||||||
// Quote and escape the gcode path argument
|
// Quote and escape the gcode path argument
|
||||||
std::string command { script };
|
std::string command { script };
|
||||||
|
|||||||
@@ -418,7 +418,7 @@ Vec3d extract_euler_angles(const Transform3d& transform)
|
|||||||
|
|
||||||
void rotation_from_two_vectors(Vec3d from, Vec3d to, Vec3d& rotation_axis, double& phi, Matrix3d* rotation_matrix)
|
void rotation_from_two_vectors(Vec3d from, Vec3d to, Vec3d& rotation_axis, double& phi, Matrix3d* rotation_matrix)
|
||||||
{
|
{
|
||||||
const Matrix3d m = Transform3d(Eigen::Quaterniond().setFromTwoVectors(from, to)).matrix().block<3, 3>(0, 0);
|
const Matrix3d m = Eigen::Quaterniond().setFromTwoVectors(from, to).toRotationMatrix();
|
||||||
const Eigen::AngleAxisd aa(m);
|
const Eigen::AngleAxisd aa(m);
|
||||||
rotation_axis = aa.axis();
|
rotation_axis = aa.axis();
|
||||||
phi = aa.angle();
|
phi = aa.angle();
|
||||||
|
|||||||
@@ -1298,10 +1298,9 @@ public:
|
|||||||
|
|
||||||
// BBS
|
// BBS
|
||||||
void rotate(Matrix3d rotation_matrix) {
|
void rotate(Matrix3d rotation_matrix) {
|
||||||
auto R = m_transformation.get_rotation_matrix().matrix().block<3, 3>(0, 0);
|
auto rotation = m_transformation.get_rotation_matrix();
|
||||||
auto R_new = rotation_matrix * R;
|
rotation = rotation_matrix * rotation;
|
||||||
auto euler_angles = Geometry::extract_euler_angles(R_new);
|
set_rotation(Geometry::Transformation(rotation).get_rotation());
|
||||||
set_rotation(euler_angles);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec3d get_scaling_factor() const { return m_transformation.get_scaling_factor(); }
|
Vec3d get_scaling_factor() const { return m_transformation.get_scaling_factor(); }
|
||||||
|
|||||||
@@ -1246,7 +1246,7 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me
|
|||||||
toggle_printable_state();
|
toggle_printable_state();
|
||||||
else if (col_num == colSupportPaint) {
|
else if (col_num == colSupportPaint) {
|
||||||
ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID();
|
ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID();
|
||||||
if (node->HasSupportPainting()) {
|
if (node && node->HasSupportPainting()) {
|
||||||
GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager();
|
GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager();
|
||||||
if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::FdmSupports)
|
if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::FdmSupports)
|
||||||
gizmos_mgr.open_gizmo(GLGizmosManager::EType::FdmSupports);
|
gizmos_mgr.open_gizmo(GLGizmosManager::EType::FdmSupports);
|
||||||
@@ -1257,7 +1257,7 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me
|
|||||||
else if (col_num == colColorPaint) {
|
else if (col_num == colColorPaint) {
|
||||||
if (wxGetApp().plater()->get_current_canvas3D()->get_canvas_type() != GLCanvas3D::CanvasAssembleView) {
|
if (wxGetApp().plater()->get_current_canvas3D()->get_canvas_type() != GLCanvas3D::CanvasAssembleView) {
|
||||||
ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID();
|
ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID();
|
||||||
if (node->HasColorPainting()) {
|
if (node && node->HasColorPainting()) {
|
||||||
GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager();
|
GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager();
|
||||||
if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::MmuSegmentation)
|
if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::MmuSegmentation)
|
||||||
gizmos_mgr.open_gizmo(GLGizmosManager::EType::MmuSegmentation);
|
gizmos_mgr.open_gizmo(GLGizmosManager::EType::MmuSegmentation);
|
||||||
@@ -1269,13 +1269,15 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me
|
|||||||
else if (col_num == colSinking) {
|
else if (col_num == colSinking) {
|
||||||
Plater * plater = wxGetApp().plater();
|
Plater * plater = wxGetApp().plater();
|
||||||
GLCanvas3D *cnv = plater->canvas3D();
|
GLCanvas3D *cnv = plater->canvas3D();
|
||||||
Plater::TakeSnapshot(plater, "Shift objects to bed");
|
|
||||||
int obj_idx, vol_idx;
|
int obj_idx, vol_idx;
|
||||||
get_selected_item_indexes(obj_idx, vol_idx, item);
|
get_selected_item_indexes(obj_idx, vol_idx, item);
|
||||||
(*m_objects)[obj_idx]->ensure_on_bed();
|
if (obj_idx != -1) {
|
||||||
cnv->reload_scene(true, true);
|
Plater::TakeSnapshot(plater, "Shift objects to bed");
|
||||||
update_info_items(obj_idx);
|
(*m_objects)[obj_idx]->ensure_on_bed();
|
||||||
notify_instance_updated(obj_idx);
|
cnv->reload_scene(true, true);
|
||||||
|
update_info_items(obj_idx);
|
||||||
|
notify_instance_updated(obj_idx);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (col_num == colEditing) {
|
else if (col_num == colEditing) {
|
||||||
//show_context_menu(evt_context_menu);
|
//show_context_menu(evt_context_menu);
|
||||||
|
|||||||
@@ -266,11 +266,8 @@ void GizmoObjectManipulation::change_position_value(int axis, double value)
|
|||||||
selection.setup_cache();
|
selection.setup_cache();
|
||||||
TransformationType trafo_type;
|
TransformationType trafo_type;
|
||||||
trafo_type.set_relative();
|
trafo_type.set_relative();
|
||||||
switch (m_coordinates_type)
|
if (selection.requires_local_axes()) {
|
||||||
{
|
trafo_type.set_local();
|
||||||
case ECoordinatesType::Instance: { trafo_type.set_instance(); break; }
|
|
||||||
case ECoordinatesType::Local: { trafo_type.set_local(); break; }
|
|
||||||
default: { break; }
|
|
||||||
}
|
}
|
||||||
selection.translate(position - m_cache.position, trafo_type);
|
selection.translate(position - m_cache.position, trafo_type);
|
||||||
m_glcanvas.do_move(L("Set Position"));
|
m_glcanvas.do_move(L("Set Position"));
|
||||||
|
|||||||
@@ -10136,23 +10136,21 @@ bool Plater::open_3mf_file(const fs::path &file_path)
|
|||||||
}
|
}
|
||||||
|
|
||||||
LoadType load_type = LoadType::Unknown;
|
LoadType load_type = LoadType::Unknown;
|
||||||
if (!model().objects.empty()) {
|
|
||||||
bool show_drop_project_dialog = true;
|
bool show_drop_project_dialog = true;
|
||||||
if (show_drop_project_dialog) {
|
if (show_drop_project_dialog) {
|
||||||
ProjectDropDialog dlg(filename);
|
ProjectDropDialog dlg(filename);
|
||||||
if (dlg.ShowModal() == wxID_OK) {
|
if (dlg.ShowModal() == wxID_OK) {
|
||||||
int choice = dlg.get_action();
|
int choice = dlg.get_action();
|
||||||
load_type = static_cast<LoadType>(choice);
|
load_type = static_cast<LoadType>(choice);
|
||||||
wxGetApp().app_config->set("import_project_action", std::to_string(choice));
|
wxGetApp().app_config->set("import_project_action", std::to_string(choice));
|
||||||
|
|
||||||
// BBS: jump to plater panel
|
// BBS: jump to plater panel
|
||||||
wxGetApp().mainframe->select_tab(MainFrame::tp3DEditor);
|
wxGetApp().mainframe->select_tab(MainFrame::tp3DEditor);
|
||||||
}
|
}
|
||||||
} else
|
|
||||||
load_type = static_cast<LoadType>(
|
|
||||||
std::clamp(std::stoi(wxGetApp().app_config->get("import_project_action")), static_cast<int>(LoadType::OpenProject), static_cast<int>(LoadType::LoadConfig)));
|
|
||||||
} else
|
} else
|
||||||
load_type = LoadType::OpenProject;
|
load_type = static_cast<LoadType>(
|
||||||
|
std::clamp(std::stoi(wxGetApp().app_config->get("import_project_action")), static_cast<int>(LoadType::OpenProject), static_cast<int>(LoadType::LoadConfig)));
|
||||||
|
|
||||||
if (load_type == LoadType::Unknown) return false;
|
if (load_type == LoadType::Unknown) return false;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user