mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	Merge remote-tracking branch 'remotes/origin/3mf_io'
This commit is contained in:
		
						commit
						c3d7be5994
					
				
					 5 changed files with 30 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -40,10 +40,10 @@ use Wx::Event qw(EVT_IDLE EVT_COMMAND EVT_MENU);
 | 
			
		|||
use base 'Wx::App';
 | 
			
		||||
 | 
			
		||||
use constant FILE_WILDCARDS => {
 | 
			
		||||
    known   => 'Known files (*.stl, *.obj, *.amf, *.xml, *.3mf, *.prusa)|*.stl;*.STL;*.obj;*.OBJ;*.amf;*.AMF;*.xml;*.XML;*.3mf;*.3MF;*.prusa;*.PRUSA',
 | 
			
		||||
    known   => 'Known files (*.stl, *.obj, *.amf, *.xml, *.3mf, *.prusa)|*.stl;*.STL;*.obj;*.OBJ;*.zip.amf;*.amf;*.AMF;*.xml;*.XML;*.3mf;*.3MF;*.prusa;*.PRUSA',
 | 
			
		||||
    stl     => 'STL files (*.stl)|*.stl;*.STL',
 | 
			
		||||
    obj     => 'OBJ files (*.obj)|*.obj;*.OBJ',
 | 
			
		||||
    amf     => 'AMF files (*.amf)|*.amf;*.AMF;*.xml;*.XML',
 | 
			
		||||
    amf     => 'AMF files (*.amf)|*.zip.amf;*.amf;*.AMF;*.xml;*.XML',
 | 
			
		||||
    threemf => '3MF files (*.3mf)|*.3mf;*.3MF',
 | 
			
		||||
    prusa   => 'Prusa Control files (*.prusa)|*.prusa;*.PRUSA',
 | 
			
		||||
    ini     => 'INI files *.ini|*.ini;*.INI',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1616,23 +1616,32 @@ sub export_3mf {
 | 
			
		|||
sub _get_export_file {
 | 
			
		||||
    my ($self, $format) = @_;    
 | 
			
		||||
    my $suffix = '';
 | 
			
		||||
    my $wildcard = 'known';
 | 
			
		||||
    if ($format eq 'STL')
 | 
			
		||||
    {
 | 
			
		||||
        $suffix = '.stl';
 | 
			
		||||
        $wildcard = 'stl';
 | 
			
		||||
    }
 | 
			
		||||
    elsif ($format eq 'AMF')
 | 
			
		||||
    {
 | 
			
		||||
        $suffix = '.zip.amf';
 | 
			
		||||
        if (&Wx::wxMAC) {
 | 
			
		||||
            # It seems that MacOS does not like double extension
 | 
			
		||||
            $suffix = '.amf';
 | 
			
		||||
        } else {
 | 
			
		||||
            $suffix = '.zip.amf';
 | 
			
		||||
        }
 | 
			
		||||
        $wildcard = 'amf';
 | 
			
		||||
    }
 | 
			
		||||
    elsif ($format eq '3MF')
 | 
			
		||||
    {
 | 
			
		||||
        $suffix = '.3mf';
 | 
			
		||||
        $wildcard = 'threemf';
 | 
			
		||||
    }
 | 
			
		||||
    my $output_file = eval { $self->{print}->output_filepath($main::opt{output} // '') };
 | 
			
		||||
    Slic3r::GUI::catch_error($self) and return undef;
 | 
			
		||||
    $output_file =~ s/\.[gG][cC][oO][dD][eE]$/$suffix/;
 | 
			
		||||
    my $dlg = Wx::FileDialog->new($self, "Save $format file as:", dirname($output_file),
 | 
			
		||||
        basename($output_file), &Slic3r::GUI::MODEL_WILDCARD, wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
 | 
			
		||||
        basename($output_file), &Slic3r::GUI::FILE_WILDCARDS->{$wildcard}, wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
 | 
			
		||||
    if ($dlg->ShowModal != wxID_OK) {
 | 
			
		||||
        $dlg->Destroy;
 | 
			
		||||
        return undef;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@
 | 
			
		|||
#include <boost/algorithm/string/predicate.hpp>
 | 
			
		||||
#include <boost/filesystem.hpp>
 | 
			
		||||
#include <boost/nowide/iostream.hpp>
 | 
			
		||||
#include <boost/algorithm/string/replace.hpp>
 | 
			
		||||
 | 
			
		||||
namespace Slic3r {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -91,7 +92,15 @@ Model Model::read_from_archive(const std::string &input_file, PresetBundle* bund
 | 
			
		|||
        throw std::runtime_error("The supplied file couldn't be read because it's empty");
 | 
			
		||||
 | 
			
		||||
    for (ModelObject *o : model.objects)
 | 
			
		||||
        o->input_file = input_file;
 | 
			
		||||
    {
 | 
			
		||||
        if (boost::algorithm::iends_with(input_file, ".zip.amf"))
 | 
			
		||||
        {
 | 
			
		||||
            // we remove the .zip part of the extension to avoid it be added to filenames when exporting
 | 
			
		||||
            o->input_file = boost::ireplace_last_copy(input_file, ".zip.", ".");
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
            o->input_file = input_file;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (add_default_instances)
 | 
			
		||||
        model.add_default_instances();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -290,13 +290,13 @@ void BedShapePanel::update_shape()
 | 
			
		|||
void BedShapePanel::load_stl()
 | 
			
		||||
{
 | 
			
		||||
	t_file_wild_card vec_FILE_WILDCARDS = get_file_wild_card();
 | 
			
		||||
	std::vector<std::string> file_types = { "known", "stl", "obj", "amf", "prusa"};
 | 
			
		||||
	wxString MODEL_WILDCARD;
 | 
			
		||||
    std::vector<std::string> file_types = { "known", "stl", "obj", "amf", "3mf", "prusa" };
 | 
			
		||||
    wxString MODEL_WILDCARD;
 | 
			
		||||
	for (auto file_type: file_types)
 | 
			
		||||
		MODEL_WILDCARD += vec_FILE_WILDCARDS.at(file_type) + "|";
 | 
			
		||||
 | 
			
		||||
	auto dialog = new wxFileDialog(this, _L("Choose a file to import bed shape from (STL/OBJ/AMF/PRUSA):"), "", "",
 | 
			
		||||
		MODEL_WILDCARD, wxFD_OPEN | wxFD_FILE_MUST_EXIST);
 | 
			
		||||
    auto dialog = new wxFileDialog(this, _L("Choose a file to import bed shape from (STL/OBJ/AMF/3MF/PRUSA):"), "", "",
 | 
			
		||||
        MODEL_WILDCARD, wxFD_OPEN | wxFD_FILE_MUST_EXIST);
 | 
			
		||||
	if (dialog->ShowModal() != wxID_OK) {
 | 
			
		||||
		dialog->Destroy();
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,8 +39,9 @@ inline t_file_wild_card& get_file_wild_card() {
 | 
			
		|||
		FILE_WILDCARDS["known"] = "Known files (*.stl, *.obj, *.amf, *.xml, *.prusa)|*.stl;*.STL;*.obj;*.OBJ;*.amf;*.AMF;*.xml;*.XML;*.prusa;*.PRUSA";
 | 
			
		||||
		FILE_WILDCARDS["stl"] = "STL files (*.stl)|*.stl;*.STL";
 | 
			
		||||
		FILE_WILDCARDS["obj"] = "OBJ files (*.obj)|*.obj;*.OBJ";
 | 
			
		||||
		FILE_WILDCARDS["amf"] = "AMF files (*.amf)|*.amf;*.AMF;*.xml;*.XML";
 | 
			
		||||
		FILE_WILDCARDS["prusa"] = "Prusa Control files (*.prusa)|*.prusa;*.PRUSA";
 | 
			
		||||
        FILE_WILDCARDS["amf"] = "AMF files (*.amf)|*.zip.amf;*.amf;*.AMF;*.xml;*.XML";
 | 
			
		||||
        FILE_WILDCARDS["3mf"] = "3MF files (*.3mf)|*.3mf;*.3MF;";
 | 
			
		||||
        FILE_WILDCARDS["prusa"] = "Prusa Control files (*.prusa)|*.prusa;*.PRUSA";
 | 
			
		||||
		FILE_WILDCARDS["ini"] = "INI files *.ini|*.ini;*.INI";
 | 
			
		||||
		FILE_WILDCARDS["gcode"] = "G-code files (*.gcode, *.gco, *.g, *.ngc)|*.gcode;*.GCODE;*.gco;*.GCO;*.g;*.G;*.ngc;*.NGC";
 | 
			
		||||
		FILE_WILDCARDS["svg"] = "SVG files *.svg|*.svg;*.SVG";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue