From b406eeb2409c836173e3ddbc171a6abd10781605 Mon Sep 17 00:00:00 2001 From: hexane360 Date: Sun, 6 Jan 2019 16:25:38 -0700 Subject: [PATCH 01/17] Fixed several warnings on Linux -isolated C++-only options on newer CMake -Removed warning for ignored-attributes on Clang and GCC --- CMakeLists.txt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 781dbd01a..6cc3b3a26 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,14 +107,17 @@ if (APPLE) endif () if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - # Workaround for an old CMake, which does not understand CMAKE_CXX_STANDARD. - add_compile_options(-std=c++11 -Wall -Wno-reorder) find_package(PkgConfig REQUIRED) + + if (CMAKE_VERSION VERSION_LESS "3.1") + # Workaround for an old CMake, which does not understand CMAKE_CXX_STANDARD. + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + endif() endif() if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUXX) # Adding -fext-numeric-literals to enable GCC extensions on definitions of quad float literals, which are required by Boost. - add_compile_options(-fext-numeric-literals) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fext-numeric-literals" ) if (SLIC3R_SYNTAXONLY) set(CMAKE_CXX_ARCHIVE_CREATE "true") @@ -131,9 +134,15 @@ if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUXX) endif() if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + add_compile_options(-Wall) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-reorder" ) + # On GCC and Clang, no return from a non-void function is a warning only. Here, we make it an error. add_compile_options(-Werror=return-type) + #removes LOTS of extraneous Eigen warnings + add_compile_options(-Wno-ignored-attributes) + if (SLIC3R_ASAN) add_compile_options(-fsanitize=address -fno-omit-frame-pointer) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") From b96190dc2414b5460161d59c9903a07cd316ed74 Mon Sep 17 00:00:00 2001 From: hexane360 Date: Sun, 6 Jan 2019 16:29:21 -0700 Subject: [PATCH 02/17] Fixed pre-compiled header command line options, especially on Linux --- cmake/modules/PrecompiledHeader.cmake | 28 ++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/cmake/modules/PrecompiledHeader.cmake b/cmake/modules/PrecompiledHeader.cmake index 2880da9f2..e46302144 100644 --- a/cmake/modules/PrecompiledHeader.cmake +++ b/cmake/modules/PrecompiledHeader.cmake @@ -68,11 +68,37 @@ function(export_all_flags _filename) set(_compile_definitions "$") set(_compile_flags "$") set(_compile_options "$") + + #handle config-specific cxx flags + string(TOUPPER ${CMAKE_BUILD_TYPE} _config) + set(_build_cxx_flags ${CMAKE_CXX_FLAGS_${_config}}) + + #handle fpie option + get_target_property(_fpie ${_target} POSITION_INDEPENDENT_CODE) + if (_fpie AND CMAKE_POSITION_INDEPENDENT_CODE) + list(APPEND _compile_options ${CMAKE_CXX_COMPILE_OPTIONS_PIC}) + endif() + + #handle compiler standard (GCC only) + if(CMAKE_COMPILER_IS_GNUCXX) + get_target_property(_cxx_standard ${_target} CXX_STANDARD) + if ((NOT "${_cxx_standard}" STREQUAL NOTFOUND) AND (NOT "${_cxx_standard}" STREQUAL "")) + get_target_property(_cxx_extensions ${_target} CXX_EXTENSIONS) + get_property(_exists TARGET ${_target} PROPERTY CXX_EXTENSIONS SET) + if (NOT _exists OR ${_cxx_extensions}) + list(APPEND _compile_options "-std=gnu++${_cxx_standard}") + else() + list(APPEND _compile_options "-std=c++${_cxx_standard}") + endif() + endif() + endif() + set(_include_directories "$<$:-I$\n>") set(_compile_definitions "$<$:-D$\n>") set(_compile_flags "$<$:$\n>") set(_compile_options "$<$:$\n>") - file(GENERATE OUTPUT "${_filename}" CONTENT "${_compile_definitions}${_include_directories}${_compile_flags}${_compile_options}\n") + set(_cxx_flags "$<$:${CMAKE_CXX_FLAGS}\n>$<$:${_build_cxx_flags}\n>") + file(GENERATE OUTPUT "${_filename}" CONTENT "${_compile_definitions}${_include_directories}${_compile_flags}${_compile_options}${_cxx_flags}\n") endfunction() function(add_precompiled_header _target _input) From 60d3ba69661cd6720a615fb5ee373fe59bdba2a6 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 9 Jan 2019 11:24:05 +0100 Subject: [PATCH 03/17] WIP: Fix of command line slicing. Slice from slic3r-console.exe --- src/libslic3r/PrintConfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 7da839dc3..cb88027ba 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3044,7 +3044,7 @@ CLIConfigDef::CLIConfigDef() def->tooltip = L("Forces the GUI launch instead of command line slicing " "(if you supply a model file, it will be loaded into the plater)"); def->cli = "gui"; - def->default_value = new ConfigOptionBool(true); + def->default_value = new ConfigOptionBool(false); def = this->add("info", coBool); def->label = L("Output Model Info"); From 5d014414508266563dbf476494b9355b99e8cff9 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Wed, 9 Jan 2019 11:48:23 +0100 Subject: [PATCH 04/17] Modified extract_euler_angles to cope with gimball lock --- src/libslic3r/Geometry.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/Geometry.cpp b/src/libslic3r/Geometry.cpp index fc5b158c7..8faa49ea0 100644 --- a/src/libslic3r/Geometry.cpp +++ b/src/libslic3r/Geometry.cpp @@ -1181,22 +1181,34 @@ Transform3d assemble_transform(const Vec3d& translation, const Vec3d& rotation, Vec3d extract_euler_angles(const Eigen::Matrix& rotation_matrix) { + auto y_only = [](const Eigen::Matrix& matrix) -> bool { + return (matrix(0, 1) == 0.0) && (matrix(1, 0) == 0.0) && (matrix(1, 1) == 1.0) && (matrix(1, 2) == 0.0) && (matrix(2, 1) == 0.0); + }; + // see: https://www.learnopencv.com/rotation-matrix-to-euler-angles/ - double sy = ::sqrt(sqr(rotation_matrix(0, 0)) + sqr(rotation_matrix(1, 0))); + double cy_abs = ::sqrt(sqr(rotation_matrix(0, 0)) + sqr(rotation_matrix(1, 0))); Vec3d angles = Vec3d::Zero(); - if (sy >= 1e-6) + if (cy_abs >= 1e-6) { angles(0) = ::atan2(rotation_matrix(2, 1), rotation_matrix(2, 2)); - angles(1) = ::atan2(-rotation_matrix(2, 0), sy); + angles(1) = ::atan2(-rotation_matrix(2, 0), cy_abs); angles(2) = ::atan2(rotation_matrix(1, 0), rotation_matrix(0, 0)); + + // this is an hack to try to avoid this function to return "strange" values due to gimbal lock + if (y_only(rotation_matrix) && (angles(0) == (double)PI) && (angles(2) == (double)PI)) + { + angles(0) = 0.0; + angles(1) = ::atan2(rotation_matrix(2, 0), cy_abs) - (double)PI; + angles(2) = 0.0; + } } else { angles(0) = 0.0; - angles(1) = ::atan2(-rotation_matrix(2, 0), sy); - angles(2) = (angles(1) >-0.0) ? ::atan2(rotation_matrix(1, 2), rotation_matrix(1, 1)) : ::atan2(-rotation_matrix(1, 2), rotation_matrix(1, 1)); + angles(1) = ::atan2(-rotation_matrix(2, 0), cy_abs); + angles(2) = (angles(1) >= 0.0) ? ::atan2(rotation_matrix(1, 2), rotation_matrix(1, 1)) : ::atan2(-rotation_matrix(1, 2), rotation_matrix(1, 1)); } return angles; From c48b9e2e85da68a69aab5862ce8ad6cf57d73651 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 9 Jan 2019 11:57:59 +0100 Subject: [PATCH 05/17] Enable the GUI mode by default on OSX. --- src/slic3r.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/slic3r.cpp b/src/slic3r.cpp index d242df168..04076d567 100644 --- a/src/slic3r.cpp +++ b/src/slic3r.cpp @@ -96,6 +96,11 @@ int main(int argc, char **argv) // apply command line options to a more handy CLIConfig CLIConfig cli_config; +#ifdef __APPLE__ + // Enable the GUI mode by default, to support drag & drop. + cli_config.gui.value = true; +#endif /* __APPLE__ */ + cli_config.apply(all_config, true); set_data_dir(cli_config.datadir.value); From 41d189a3558ac44c9247868616924bf69d1b9290 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Wed, 9 Jan 2019 12:15:08 +0100 Subject: [PATCH 06/17] Fixed model for mk3 bed --- resources/models/mk3_bed.stl | Bin 59984 -> 91884 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/models/mk3_bed.stl b/resources/models/mk3_bed.stl index cfa6d8c6d63e3f8e767556727c04277de82285c6..1bd1a8faac668c98333114facd74187c54433f97 100644 GIT binary patch literal 91884 zcmb`wdAuG)nLXY?2#W#2A^}8}I3UY)V1yt`a=Y*Qh7bWmh9!h$k^n;j5)}MOL}ExI zAT#VD%wS+30y3!RAo2_Q?JJuM!WR)36lO$64G2MyVOSKBU!AHxRp;q`-~9aJ_kQH& zv8qm;=Xq-B+PXT+{{Q_Ates_tAG>qD{YH6(oOl2F$=z)6D?iGzqUe+-cefqAq9G%d zB2p?vt6UVo;8%K%o98m$EK_unn}{)M+&C08$+8{)=BXZXjVQ^HQWZr)7e#sHNf8}X zsu5+Y3LKZdx=r=S@Amf`>L1mFa^O$|W004kDF=>CFaPP_kAD(;^~NDH zy?>C`4nLUT{f1PO1BW6QgH(#9960`JxBc_4JrQcj)9)M_Ysr*7505p2;V9WG1LE=q z0x?7&Um^m>_6bq;N~P#v$0mQ+CZAn)nl7saAgPsVVo)fHFm5@Y_f zk}~{8ndxb{YLaC46kRp8kL5qOe648V_RIH*sT56?P#$VwN|j}AT>fywa{4OeTNFvo zvcG@+W0BkXs*|O1PUYdAiBkSnD`i)$KKZE|8(Ps<%C1_SzihKUT4{_T)Q3$wQjOD^ zm}FW(U(KJlW-Rkm{wVWtF`SrC9-~JkL_!xul9`?y=VZNWVycx*gleMsCaq-bt7+%G`1icSsdWtnsYlGI~ zB$I=PRIjY=$qsT*tHf^0IcW=yS&J6tf1H&M13kQWsQc1S&-Syef4X6)yW{g;^fJT4 zQ%w;}g&0l6@bFZ-eED&C=R>c04vpFUsiE#WJAU5q1r9|p6=H~n%<#Zbt~Wm4Z?`EG z?3l7yr(3LdiqH4^^E%z>zdq5+3=bTNU@F9DDu&lj=PlRGyMHs&b1()7%1Cv~mmS}j zz~}z|CR6fvKR(_gR9|uc!SJA!BA5y>nu_5;s|~OI*TFY`b6R!(jJx)I_JL0K)E7_q z5fHoH*Xdrh`CM=Lgq5A{j<^23m)#TV(20W+HeFbqap8IQDMC{X=iTl z_pN(|pAVLuvfItRbG+xE3{8eBMHHvpH2m(k&sXdI=DvMznK(IW_2{U{QIo^ElcR=N zw(~3d3?I4u!s^L+=iR3W%~#P`_NS4vC(ZaWXQ@dm)m=5rvaLS+!r;GsW^Q%$q6_ZU zl2Tu(N3!gr?+y+YtIn*R@09m3FL+l|DPNZTpZOoDKJd(^s?DZ-b>g$qs}wOtMl_~hIxFYvX2GB{BFk8FE!&7la5p^SWq4jku< zSuy+%yBzO1Q0B+%eW~Ywcc(79%;!tFjbIEkQ8ZmFSCYp+J;7|l( z)LNusPJ!bapF6&KWUW_xd8kJzBNZ)gBQ%CGIEW5fefr3J@CNrRM0xlc_srM4uh7ov zE6QyIW5BLx%0a7VKJd!m7N>^tAOd;e`GK-QD$0RF5sX19MN*{6HN;DuxFRL1avY7){0Sz)_C?P#z_o$gJ%g0U#B_1BW17iwdI*#Aqsp2aciQEP2W>+*{$EooO?B8CAHn*Jx8vHgcJkZ_Tm`#_WQAY^lwpn%^V+lIQ9nMOWtkv zS63{%CfYIMfGwjPr>u2hA3LZo@>Q+we{hG|j+!Idp&V~bSrP5%@2eRDUx`{>w&B0J z))o4aL*AUzM=P>JE9Ia^;M1^nMel0guKh}jBif-_sdxMPN_z(OYS56aD?UFW$1NwL z2ME^clVSQ+d-(7+f-%Tf5np_KzZxNy`&N6-hR7@QK8heWJY@TJMJ&E+Y}AnbSR28f z3|g_rfy|z$jnJMmtaxY-j`YpCtGc(JyG79t5xh(PsNdRJwKWOov?g=^NjvA?TsN

aKB&9zs@YzX<*!fcF8jLJ5ji>|2X~K~ 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 LB}?zYs#gCmVnz~> literal 59984 zcmb7t3$!Lxb!Mr=krl>K2GrFfc9R8@s5k=M3_8HAOBu1nD9$*DM917UNJbJ9uuV({ z5r2rFJQ~oz7+RwYG>@pk1&VfTxpgTYLAlLie2ntQ7?GC^sG&z5J>1Ox_Bs3PZ`WVd zedk{b?(RDKJKuhsbLv#psZ+0Af6B@0{^Z1Wt@{0SC;!o^<~=9=@w-l3_lkr6-J!2u z^;_@z)Bn2az?WA4U%zX2tE%6A)dBSjPdcIn@W=b#)4cwM>gyuPzwc?z_*P$@TYw&Z z6GgDr?TdF8gv&tenqzLkxtGTQEwd2vvG=^LeaRCmYcZ|*FHfJ-{hJ^DtPv~cU9Q?= zK6!5U%{_4({_VB*?em|0;3P#n{nGQhkG|v~Eg`x3hqs;Ao&NznE}$=b=6Umbo&3Q* zq9TOUyP>P9RFlY8u56E4xmFQWS4(n5RtX3D!6oEJ@NX2s-u4jh`PaA4Je@uNjjJy( z4_lI}XZ>J2OTXe5@=0zpC*S+h)5>Y>n=w5Qw%KEgIB+prkn`WI;>Yow2q{Q4F3_6u@`o%Gz2Yc^GoeHK`vn=0~qCYvCMS;n?!jn{Tj@VfE@w z-P7y-Nqf}R#jkWrQ!;w(t`Tz!UK0>+`Lhqy-97cZP*?ZA?wn@NkK8BLR4vK!&vS(L z0UVd#Z@=k;`jcmGQ^dBb&S|c>?Wc+$nQIcno$ubae%6Whj zXAZq?UHjmB-+kDgA33kN|8-hdwcnqg*L?Jisov}U?|IGKzQ!?o&5<*IcmJvF;w#tR z$OzV2IXS=C?Ky_nymE5mWgq&GS|x2pqL?^HZvXK^8wep*&6`z^uD_sIbH4y^O9ZvFeB+tD^12TCsk^1NY8carlYtt2bP{h2ze#;)qn$%G2tZ z>z+8ZJ>d^0Hv>(E%vL!9aT$3QAUDeXA zlmlZ%j!8?hj#oK`g2*OR|oMo}0DDoKRnX<~BuOthEf1tmBpEBafnL6-G77 zAjvvDTBJ2r^A;sJYMnW!)Kq;c9nz1jFx0=?fKj#mdF_gJxUQg8Zd%n(UVbh z9;4{7D=yx`qXCcSarBYsw$e&8y2Qbw0gpanRUR1>K_fuWqOnA*%7__6m&Ok%;qjx$ zay*Z_H4yO7S|ayak_9m~me44{V~HTf#uDNS+}aWmEA@lf$)}!wV`B;T50aA~gJTJg zJ|qhw&r52=ipCF}m)Q70Jy;N9V+oH8Bnu+X$kcN#A-=#}W@Ks=v-6lpvT)%1G&Gj* z_(8HDWag^%L#nE!=C4 zKdu(O?11*S{&Z&?&@yhwZ&-6c`^EPp#6D!nz58$KEV?c)4>7mkH34D2fBxq*=iU0& zugq3eD!Jr^@0T+&t#7%l2xZS&cW!a@|uhz zU41Qe-Wni(B>S<6jz`2}Qu0XFVl*S_53W8qp>XeqW5OIu-R^6yy~!eCEI@F{Qup{R zHyvrw9rt5t-Ge#0oAVVUBE2N?`6cR+!%I%@JZ{Wq`YBcqisz4K&p8TTrQ?Q3`CtTV z-I04*Y72&e=Ul=FZtbR@tYS;PK)GS`%QjzeU_ya|GsXGfJQ+uBSJXyXi}PfNWYuLi zrK|Ylp+}b^9T8mbe&PqlM4;K)h+uCy3gZaQ2S@sz(R{GI+?KeFMXR{vNojqL9eO6~yO0`~L2leIC#GIHeqShSYYM!_gSWyd67c(#Coj@fqQGGV?K_ zsxIh0^y(^SkhM0_@rXFHlpK5P2fMf2yd&4kH8CPu#T;V@wu(7oP0WGb>HVA|Iu#jChQWn|^A$cjV_P7&*U5@>d06=PpC!a}<>@dI*s?_*n`g9;BL#BOwqU z8_(Hx_Gubn5oPo^f@8%T<5sbUj2=fUH9i-Kt;AbT^y9K4y?;n=DKo%$el!f)?kSBU zcs>_vV#H?zVWZ5cBwx_@7-RY=AFOpIX^kV;Dn>JRJNVLI_BVq!~rcko)D%Dgxwc`?MuxqHAV@Rmxq9s)dZREGu%rnAoiiVI4&;_F}L6~0kPq` zZ>`rK_UpCSTlur*$-K)|`)jv;yu0r=f1Z6BMntqDCUXCD7%`c5E#??URFxwFT5SLB zo8R32`eJHVNBrc9=IY$8x_ve_pWP30->P*Pp5HBqr*GLAVs61}0wVp=y`|e1ugJ3u z&N?VD)-@BULMEXf^#pA16pRGbHJNPedT>ynlp}ivXg&^A2x@B zY;!Hh{_7*|kXG?aMIU|3^+k4laJ+rR{e>g)Er)~Au*&$xIljCGZ8cdnj__4FRomzA zJCn{bkvROa)XN-iU-5sMzq&%7lEqlH-@W6Xn%8{)7oF4+(BlX$xoiEenj7Bvb49=9 z+U-sAJ6020b?}}~GzahbsA@5SYjS;za%>fAjdQS8^E*#9Z@D%-!Mx#}Pd0b0e>nT+ zEE9>S$K*BNf2#TJ9qG9$qg_9Zy|~6q&ubZ7RXdu4UU&Zh2TBaV91-m-la^z}T75r| zYx`~Q{_}6(z6dgCGJ4VW?x3r1?n*ss9N}7qKuzhFP=9sl$z7U-qr}ePEQ90yZ+vsx z-JZrP*81pSr*w7}b=mv*&N${4oO^j3&@u}l-zuZ%o_X9oi!7P>$r+uEyDkIqzXY+{ zP7!kpUQ^$y!>Qh?vbz+BmB~P)U-H~bs&>t4(_(pf9CHiKy*v(R86V_#$Z#WUHKg)vU`^%Tdtiwiey0 zx+q5x2$QRpEv%~7OJsN7ut#lH{ii!0)#$>iBqzkLzK^RrcrI4Wi&ct9mf%bS4#X$T zkl@F0XC+xP*h&T!;U%kPT~4twKDov?Z;x7Hr3hrrta3Sd?i}wCi@q%Jf*;;~V3oHe z7QcE-~=Bp}cB{R}W6oI%W_EobkTPrco#j4h1I-tvKv zevVe699-gj+&_TG`A~#glJb#83GN?2$mlcJKiop@A3#VeX|0ubpNJXsY-X!4meiI0 ztWU(&?kyjPJTfSPOPr7U2M~EoRD`$D*b==}0x{M#5AG ztpwwhS{2zX3fw=kRfGK__6h4BKwvJ7|EFJ>`^Z0w+{W3G+`||}%&+@)Cs0Ma;nSbb z^3D*hwWImrw=Y}-m!2(M)W!U!)>p^7_1Rx^f*Ga8ZaYkjQ;-FC&@GD5vvN~(7hkb zT05FEzW53p7w*1Q%;8!)ns>kBzh%UL=Y_*9+0i)P&N!|<^P*huj%LMif4dB;HoW{h z1(B^C@Wboc(F`EO`My=|;f{u_@`wz0-bqFBi}`Q_ziII|w_hT5Foj5BDo^Z#SiA-x?HZ9PY`3#rFuEKg5Wn_ z$daJNXo2W&A~BGs2K2^&tpBF#Hj~q}LDEi0D?t=Dcdyi|Mwa_m6T=*H3x0fg9MCfE zKF5KpH#PPa1nv$^%RtDT)Yk6Sveqo!VRLzT9CHiKy*v(RnT5nrr|8D#vgx@&)ou;< z=aObRdrC=py5KVMVKpTg|Mv5(J&)jeUG7`u^`;WD$~hd7c!uXbJl9$^3r+h?>NxYV zSq9Iwc82g-AI}*Xfzgz;B43=BxK+cmSJcZhWYbR(_7djfnp_`kxEh)I8Xvsa~B0C~UrQRym>*%B> zaZ;;}zU5%5%hBs!bT%Ca23FxOvqvpQLoXq2cs9bx)3*$C63c~=u0ax zEo9JSK@@8>3n{ukoV@ft~sE-BCiqllB#|2olloF!Y-$?!LB%Jdp+)zAMR3qC-W{>?eG5DS>5mqnMx{> z+f#pVRyRCDrg|%vC-a0B4|s-5C2UDR$GPZ^gFcd7RllxYA33`!f zv78X8H;r>Z%ea@vkr4g$yNPFU@zO4>%!2K<;*({d<>^xGPnTTl8~bc5&v9JtTQ$sq zD;DEk9tX6Hn>gweD?MAvd82COO1O+GF2kqvOCu?j;Oe&^@|cgB%Fo7L=U}af-b3C> zxjMg<@>6=}L#|TjY+&-VA68Pei{)B`WgvFVF}L8{%j1BSaYO#}GY+X=|C~cKYKwP0 z-5vaivTjALYx{EIus9)bwwfDpU+QSpOO}C<`fK6Y35T?j!o55WXc>1xz?zA2Y+ZaT zuLXxywtAf9X^yBh{InMgJLkZ8(72b!0WIT(oOdIs!L;hmZ_th>ye`A!!~tE)iIr6C zfvbn)<#Eg{IQQ~6pk;iJc`P~nCs%Z~76+}5?lWYWI5dN-wTAX;aCvzgcwTGV%j1BS zSqRx?m6iT>$oQdmYsJbP9o^ZsTl;Eyi*D=U z-TA!|-2E`Q@A)tSds&RU^Mh;W#-2gSRb%5%NzQH3lj>Eo$);=>u2LJjf@HKjyBk4p ziQEY(Xs&6R!>*SZ4GZnLdPHyutV++!_3lUGH92Ndvn9*{tCoYEo=!9I}R~v-Mu=pX;adl+I+dURm$e*(x-yDI(%s6-SRFxJ1^D zb+$fDR-tvaZY^@KC5+&jB7(hTt;n(TvIA;+hxe!Z-&5WVmNkB5OmvyXMClv&xz=JC zIWZ&SQB>YVuI*jqVGhj5jC*+;&@yhw+n-ufKla>1)T*2Bdb*(*nXGj#GqNlv4maX`zsA@g&C1zLeCvwON8G&ym=emfUhN!8v?cPU(69>?5* zb1#nrTE-3evE2@7@gHnkv)}gSJ8w!W{$$3QbEC6Y%G0h9vhu9dlx6^^9luE}`&V?f zW0LG&L01zSNKV=bA^Q<^wyzSSWhbR_-1TubkiCLB+gC|;)hRO9|ZkI2m4o5KYHZ!`gix;as;q4o@3=| zBVtRk{8QH&;JEyLPxkgX{Oq(}MqWv(2$HM3?lmLc^PKnB*Z=tjU9m+aEy>I+96yqs zbe@}c(#fk>m4oDp`Ks!DXKkDLc;0m=uk2L>$yHu2oUQun7jHS@LGfOlN_S-yk?!E( zeyFUoPb-=;;;K_O%&Zk(dL_2PShbi>^u&jsiZ4JAdrNY~K1m-Gi$3?F>3qZ-lzg;u zEh1ijR`x0a2gM{rmm)2Q{l$lkADGSu=bU6g{72cH>Cf^mP-HJ=99R*po|7zyv3#)S zBn#rCeYPBN|3E%C2P6w(EFYW$k_B;=_;6I-X^Pp&C(ef;{D+Z&XDmzI`7c}Oq+GQ8 zZnW#Cu_PjHJ@Y&Aq$DBU^6UdL+A-i*>Rc=b;YU|-2AC5Z#Zt_ z7ZWP^;a7J{-Pcz9Lta_4)O~B;eX|@nmb!ociPM_IzSJH4KM%<=Unlkv&%gG63}`KN zAAR08^YMt_y6lceiq-NE&d1h94zAbvq_tzdJ7|?7q=jRCowe+(|NdExwWM8P_PPs% z^iIsxRg2MR3qB7T^Mh^Ynp{7%M9v!L+@nxce|g-BH3>J}+P%Flb>7B|1?O71O36=k zE8fqNcf+I}1%yBKuG*2^FbQF2XIq=id~s(?vkC~_O_LGK?fQL=STD}nwl3T;h?PCn zuUg)nRIb%ZL|h*nyuYYipO@9+!wAHR>t%FA{O>=$(cXg;t2nnyosSOR-R2!ApH4%?ptvh8ca?W%88z8{e5n!ORw(W8PZ|w!m6%XQHyQo7&^;DXBpNHxV3XHaQ&1I zk2{YaJW4nMe(=fxoRO_Z;XG*E5y9gtYhi5nQQI*#%SdAsbNJpu{hV_Nd!EkcsU~ND zA8Zx-#1=*bTf&H;H4{KiYTxsyYJCk0Y`1qU`+oS2NpUqzM7v#+ISSO^!i6Tq~l_q%{Z;;U$b<|6IQxE7ltJ9Br3N?)vi9yjNV+e&vr|PUD!d0Kr;} z{`h{o7qsc?bHczO2sxwa{gPG?c~2hBAUL>$5yCxyfah#Uw0)?RWY3Ewf@o~i9_Qe5 zRO}y~S@#@P;XaJN+r#f_+fGV-&vCEVXDs|K(T>L7F>;o~;co*mVyPLv@`6=f7hAa0 z_+1L)K&*h^_k8>)K+WTp^EG#T<;_nxa)) zm(1Hrti}=GFngJUxt#-kaJ|eY*CGS?u(s>{AofS^H_n1SxYT&tU26Ou8Mot$j$1)@ z)wq8!n%}N64r{yoj+(!5#(ajb(TCsja`aN;_v9jCsqy<_{EiyGC1wb-ir+Z%H_?`w z(fe@WjWf4!sqwpp#$oyJl4#-8<&8Q+m{oqylHZB5CviOPf+OC+<~!zN2);`m(PIc- zWl^_{_0(W(nh&&Gdd!;g!z1p278WJ$s8`fmxdBsg`#i$=G7OB zfK`lOK1N5YAbYeC0rk|;@Jx$WcFHS9F9OfWTr>#&KGNP46JfL z7%g*AdUKKy921;BETS?aFK;-yen01o9!GG!Y~i?7X$-gP4EHJ4k)nonyQu(i@rB>!Y+jw0vuoZWE%*t%2vF<2h#zU&B=4yIZBFMGo$FQOj09 z_4_$Rs2jZ z`oSD>cTftPReSTgqt;c`3 zGr=t!*R<)n_Sj>8RN9#9Cl1$Qbo9wFXjhKlcC|AO_k*8+bN-zHXB_V5af})p8Te|O zuhoa|0VL1kb*8PEL9g|>w%Y~ISDSs|ndD#3_Tw3tsI;)ARZQUtMMg;24CebN;|t*j85 z%7^qWu};_4O0`9nnq`GhD=UPi^1;z1SrD>9sFf8$Q~BT=kSqvUA=JtWA@zgoWIVcAqx)f>A8_NghfMh|)3ZYh32q_1%lTTP7WNl3Jc)wS_ zcG552mU$ar$&4ZNd$}1gnRi5ghgjxtt*Ui-93kzZTpKcnG#I>VS-$%^qSf+TTi@p_ z-l?CV#^J}&o8@iU@`Y8p+QJ*T z0|-P{-ZCv;?qw~K@y4lLtBD`-p75YmWC`;Lg1;0?o^!o;N0m6ntYR&a#q+%8PFuV5 zoW|D8lPs3#d<7$){PMa!MM(c>Y~?%2mGmgvy;Tr-m7XG~q$SzbS!RyBN>35e*BV>@ zPqMA1%!s@O(#ET@W2=m6CfnM`jL7RObrhBM*U(!DCfl0SjL54dl|#lptdvEGt&~+Q z<}0fv)sK8_pa_y}wPEJSYf=?KIgo#I4vH+t$MV6^C0P(-`5->d2W&~JSRt{!wu)74 zr~HdvUL!n}5B8j7LF9GFQ~97sb3O!-R~1j?gL6PKIMS+Ok#t^ym8+T$ZdW9Wo{a6S z?HBHIYTb>y++pKuxG{w8<((0_+jtr0#}KT=_W<(PK46vZNnYwDtHfI#cg2sqqABbu z-o~fl{M~RW!G2U_tqDIp8{>$(m=n5Z6_v0hVGr~;ipmw1WDk8o_Xq22hXp_0AKPhF z2=*fzK=j9U)*>1Ec-cA`@q@>9XV+cQvW3#?oKFxuwv*>vFR#TB1dr`hSI{D>w2kA6 z%YI`!am6?9#}Vm0VZ0?`2t-%*?62+HfU?tmc@xQHeCf~j00DXo!CEeZ!+*NBdguGM z+q*>2vM-M99B~KoA^%lveE*9%WY6}(Av>iPd3hX+2EzE90avN4B|Eo}))+!&@#Wnv zMn|h;m;c&!`Ir6w%U%YuvwwLn*=6KIz9dlFmjs3pa|?bPh;)^WzxeSk-@axB$J5hy zAo#6#FVQ!Hy7Z0_%gf_{mT^PoxBG`V62h&T{oWf75nr^0-MaW#^NjbUwS)5Jb=e=z zWuT7|gxp=(31V)+YXX9I1@KS}p%D}Ka#$h@z!m*}p*#VY59RlVJ& zGyAGpw!|X>MBM4t?rZ^JvhML)ER_9_X}@s4-OJLvbTEKL7Dr9xBT>EG(EKhg7Pt@1t*M+T0_ zc>izfKhO&z}mpC6k)dvUfl2;iUoG!eY)%N0D@K=Z-fP>Xy6`pgQZHMm-wmI!?}p3w!3zh;;uhY=*#`gQ zC*O)M-&mLL!xukDt|D5#M_*r(-!hdizgv7-lJTwhVqyOq>mReYOIt27z7=nI606o8 zb3$!jm#31J)V5Jj~r%koe6 zseF%Kdo3(^_~k!U1j*{hHMi+;K})-;pOx>V!rpCHVYk4lC0V1JYm%Z358OL*#o;Hm zuikL+7JeU`-=jtb?|+@vB#7B-j-2_s`%i5bU%CE9F5x$%`Tc6yb!gk=GlyQcu6^*m z?>>wX%)#iYdcn45*WbGEc=eoZC%I*7J7{Xk#KnbMKLvWEWX`MC9>7q@4e zdUX5w=U;v}*GpP0`gzW*W6%@yYSbp$HmZl_Q@^dNqxm4S1v`SvX|eo&Wp%<~^coX9GS1 zkSvJY5^MOub&-YYxt+Vl&jvigk({g=JR2aJ*+M=W2;!6SUiixVjysLWVcexLSP(cr z$=IvWrO`5s?KI8{BDY;da0&78*+39^6s-{}X2H@ipQwf|0U{Xi)yt6Lu)(#_Bi#f&-${}axbU#`6vTO`?*Nb;ObeVTO z#jKyLaxLsT=kLL}oMOfIUTxoF)MYZXY~RUUA=2)Yj3BGjKG^{;f59BKn~Yr@@6N{) z2RxZfAy~_0=TKC=@zVd^ZM^g%iKKi#c=6^SZ(Y>AGf-516Gd!YoGl2Jt)`+bf*}^L ztA=t&y(FiarV(}oR^P!(^G#B(<{)bo*|hktA*@em8`D@ZdKzI- zgci$V`B1C4-Xa@1a^PQ{56+F&R3c%hG-7)`pk?`Rv}xn7AuI=4uSPV*a3~*)kGXL) z>lBWh1Jx=rYnp5b%ZK`rW94Ym#@~dnD8ee1hw}lPv=Xkj$cBcF{j`-FY5BlWmZheF ze267SS`L6z2q`sy+QbaY$V^;ok|t@^C)Z z7Q2D4`WS7;@V9WNX4Wb)Ynp6`l#hg9c{-aVR%#g#mJdc-{rGDfDF@lADRe~0d5QAD zxk1#2@&SbBgLC8PX%5ea)|+$V=xKx2+IfOhSAd;7R6kz=7Z7G2s;8T zmaQf`hQDZuuqx#vb7(#oJ%mV6%$6t*qo)xTMQE`+I$psluD8gBb`HD+k=9=PvcpkX zZC2KT%Nj3Rzv}>zCN*m@TGo-3b?6M4)U-xe3c!{4#yMm)p6wmnTRraR$Pw9Hi&kJ0 z0G{*RA-Zc6EF_3{&Q`G>(Lcvb0tX}b4x8&Ex@-yG@nUpD&^q?s`hSl?MDSe|X;+=J z7|p-5=^{I#-%98%7tTHd2>8KT%(pW{S&uK|Zu>X_CDN+Zc8SZMcp-E;WC z@u53Yy{9sci3s+b(XJ1U$nKuU{5vMKE4zEf7Si28SI=KT_2*o27r3!!f^x5~v3tD) z(G2Q*N25#krg7)4vAe2$gxgMcn)x0w1B62|g{vav;5*xN$9oE)*JnBB@wvfp2J`ij zBIv%K)az&_nbgp-y4WhVHX_(wjuo`bzlh*_tbFg4vl$U7qUk9aqsI|kFGpb7diO8I>&7|R<&0gsOnkxQC%)W=|;S<_^VE=GNwQ$;OD zn>PO9Y@j8|k*&(JSG6{CJ7!Y*8ezT00iSB+=nf$I95&y{e9J)CoC*j-yG`&T&n9wR zI@+n6XCDI`d5)tcdFC{QjvTBN>vg_}$Y(OGH(KaXA4lX_jiU2RCR^y3NiAl=B|dpf9I%Q@ zXz$mG_Tpv7HM)8}*SeU4(F_TDp2=A5Xvq!c5(8GThipmAle3gLoYuu0jCOsrc7J0; zzejHGf6!OvSRV*_Lm_C<8wvq3skwyPF~1$*5S(k-Dn<;qb|5(C@R*m2kh~_;Blq98#~`Nlmj? znKLxD`cGyuOwkilwu(epuk!O}AqKxkI8A`qz zE?KiR42&4&FwgDEixFIt)sMe=HPM*uj2O>(n%$+DzO=s5VlZd4Rd11lOBjJXnY9tY zTFi&GFwDUS_G6p_tjUdh^y>IKSKJ z2w26vi224jSWD(U_69J&8R`@w>0LE@*V4WWqdk~wVn{@=mdvm0ZD0ln2WxQ@*g}R( zYMFnQcY|eSY47ujlE*C~Yf7QHGeu>#ueWpPcek5QU}3`!vqMS~2I& z=Nzz#`#I->qYx3oj-z7Z;^xF8fPs=k0UtJoSTSXKiGC|p%K9)TranUh>&_a_R#tS z^F>4+Gwi;PwDxi(EU_Azz2-4WO10Obf7pE=J;wDzP9vOXDMx>V>uV=OpTq9lBx`4< zc*?k&OOWF-u22tlwleN!gpPwM=ZNIvjNq2R`4~s^{h+&1C2r1uSaE#%Xx22jAk^MG zwrATt3Z{*}dfx{-o=j=w`NM$c+@m-Oa`j64usBQD=MHc87cEA+e)8PyWv%h(%3U?g zuhiZ=Lz?m_azqcEFVB_+JdY)ghmCy+>H2UPaG;29lD&x4-6ggyUFHy{BwI9bV zH`54?sO5lb8bYLeWZQ{jC?BZH>d01U4zg7P`N$=^!H+=Yi6Q9FOA=UUS= z!lIb{(CBha(+G*8Y5`$rAWZHfeC1-QH}wz6=1pVyKuL;Xt~W>5YntY;7M^V{2&-ut zVMnr6IUj1(U_P`&qX>kfeRZoH!(TlQ!VisA=E!KTX&PZs%zk9FMnvUlgyjPWNBauO zh`_%@OYQIHU^pK@SQLRUG}i>#emHaLoh^!}_X(@XwDC6~>`1n%YN4 zlFcg1N6dlM#K?r;h*~zG#j>G{BlV9QtCBUV$+YoTTS-~>h$EH*LF2kj^MvE}O9+ml z-fRM9H zi6XQt2RLrBS(N-pB_2`B0oOEyuokYichKOPrV(}|Tc!EPR;g^|_^Y!e*sD?G900+Z zCL1EP>dc|&%%QSr<8MNEK0F86k0~DGuzYBHRV^T_rpO^#EBVNlXsmF2I3KAbuJ*nJCdzZbhb)mE5~0Q8A?8Yuu>pQ=D&tW`N$lagUq4wG{T~o z{m{B|M5cI*Bjp1KLjz%Q{vQ$-Yz?4+4r?%zpVio?+KC^tQZR_Ht1M>0^c(>DP0wV8KtbWk?65Fdd zww>vsDxsTAeijTJ#9*jcq`5w{@n?#7CswJNr2wsH`+ zAoAYPGa}-e9IK$!Dw1t&wW7=Z)JFh8?W!f&*79aV-fdbrXpIkcR>h9rs>OU|w`ui* z))d)p(~2Pf#E!g|w<0JeVio70$Z|aIPpt@wNr)~*S`cITAU<314GRU4cmGxnvNzB)w0?6vpp^Phg;Bt_6uD}3kPzNr_UH0chp^Lw5A!9JoQ zgw$J}t3keUWqZuZwThspRxQa`O;?`$ML)R2eTx2#BHCdzGRV8o($klgxhv1{;?BdQMfCcSSS7nOx2L^ix|MJSNfxxU-5G1U6vf~G`^p4RNA!;hmO4Bkxu@!N8fUAXR@m1|0P8C(EX}~gN6pe12QGn>FmC}^2E;#SS8Q4g~N9nj#`e69AXL8EPjU!^FHg*1us*g!N^r?O?R`|}nX`wCI z?sBry$@Xp|MDoKCQEQ9??JBPw)OKvUXEC?O3K?WeSPSjg(T>4*(G1cinSy@ww@Ma z;s631K)CJBk>*^1`+!7ggZB4s)TkhhK=gAM} zU@aN>O57p`Rw&yZjZtek92__1iyT<3YP&Zw2UbuHXHdo^Tg{I#v1lt=4>B+HJ?MGhQw8ugQw?3&!{_M9Zk-pECEgtYdWwYc74gv3fYZ1iCZx#c?t k5VC)F@dFkbdbG9IYzcclZWU{>Rgv56idHd#Ev%~l2k#cgO8@`> From 1947925263f7107916af4970fc3de769fe7bcb6f Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Wed, 9 Jan 2019 12:21:43 +0100 Subject: [PATCH 07/17] Added parameter for pillar connection mode --- src/libslic3r/PrintConfig.cpp | 16 ++++++++++++++++ src/libslic3r/PrintConfig.hpp | 20 ++++++++++++++++++++ src/libslic3r/SLA/SLASupportTree.cpp | 7 ++++++- src/libslic3r/SLA/SLASupportTree.hpp | 9 +++++++++ src/libslic3r/SLAPrint.cpp | 9 +++++++++ src/slic3r/GUI/Field.cpp | 2 ++ src/slic3r/GUI/GUI.cpp | 2 ++ src/slic3r/GUI/OptionsGroup.cpp | 3 +++ src/slic3r/GUI/Preset.cpp | 1 + src/slic3r/GUI/Tab.cpp | 1 + 10 files changed, 69 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index cb88027ba..1efbe2209 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2527,6 +2527,22 @@ void PrintConfigDef::init_sla_params() def->min = 0; def->default_value = new ConfigOptionFloat(1.0); + def = this->add("support_pillar_connection_mode", coEnum); + def->label = L("Support pillar connection mode"); + def->tooltip = L("Controls the bridge type between two neigboring pillars." + " Can be zig-zag, cross (double zig-zag) or dynamic which" + " will automatically switch between the first two depending" + " on the distance of the two pillars."); + def->cli = ""; + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("zigzag"); + def->enum_values.push_back("cross"); + def->enum_values.push_back("dynamic"); + def->enum_labels.push_back(L("Zig-Zag")); + def->enum_labels.push_back(L("Cross")); + def->enum_labels.push_back(L("Dynamic")); + def->default_value = new ConfigOptionEnum(slapcmDynamic); + def = this->add("support_pillar_widening_factor", coFloat); def->label = L("Pillar widening factor"); def->category = L("Supports"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 4e12114df..4842156d6 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -61,6 +61,12 @@ enum SLADisplayOrientation { sladoPortrait }; +enum SLAPillarConnectionMode { + slapcmZigZag, + slapcmCross, + slapcmDynamic +}; + template<> inline const t_config_enum_values& ConfigOptionEnum::get_enum_values() { static t_config_enum_values keys_map; if (keys_map.empty()) { @@ -162,6 +168,16 @@ template<> inline const t_config_enum_values& ConfigOptionEnum inline const t_config_enum_values& ConfigOptionEnum::get_enum_values() { + static const t_config_enum_values keys_map = { + {"zigzag", slapcmZigZag}, + {"cross", slapcmCross}, + {"dynamic", slapcmDynamic} + }; + + return keys_map; +} + // Defines each and every confiuration option of Slic3r, including the properties of the GUI dialogs. // Does not store the actual values, but defines default values. class PrintConfigDef : public ConfigDef @@ -949,6 +965,9 @@ public: // Radius in mm of the support pillars. ConfigOptionFloat support_pillar_diameter /*= 0.8*/; + // How the pillars are bridged together + ConfigOptionEnum support_pillar_connection_mode; + // TODO: unimplemented at the moment. This coefficient will have an impact // when bridges and pillars are merged. The resulting pillar should be a bit // thicker than the ones merging into it. How much thicker? I don't know @@ -1003,6 +1022,7 @@ protected: OPT_PTR(support_head_penetration); OPT_PTR(support_head_width); OPT_PTR(support_pillar_diameter); + OPT_PTR(support_pillar_connection_mode); OPT_PTR(support_pillar_widening_factor); OPT_PTR(support_base_diameter); OPT_PTR(support_base_height); diff --git a/src/libslic3r/SLA/SLASupportTree.cpp b/src/libslic3r/SLA/SLASupportTree.cpp index 5239255b1..bc02d2b58 100644 --- a/src/libslic3r/SLA/SLASupportTree.cpp +++ b/src/libslic3r/SLA/SLASupportTree.cpp @@ -1249,8 +1249,13 @@ bool SLASupportTree::generate(const PointSet &points, if(chkd >= bridge_distance) { result.add_bridge(sj, ej, pillar.r); + auto pcm = cfg.pillar_connection_mode; + // double bridging: (crosses) - if(pillar_dist > 2*cfg.base_radius_mm) { + if( pcm == PillarConnectionMode::cross || + (pcm == PillarConnectionMode::dynamic && + pillar_dist > 2*cfg.base_radius_mm)) + { // If the columns are close together, no need to // double bridge them Vec3d bsj(ej(X), ej(Y), sj(Z)); diff --git a/src/libslic3r/SLA/SLASupportTree.hpp b/src/libslic3r/SLA/SLASupportTree.hpp index c187cf5b3..5a86d4623 100644 --- a/src/libslic3r/SLA/SLASupportTree.hpp +++ b/src/libslic3r/SLA/SLASupportTree.hpp @@ -28,6 +28,12 @@ using SlicedSupports = std::vector; namespace sla { +enum class PillarConnectionMode { + zigzag, + cross, + dynamic +}; + struct SupportConfig { // Radius in mm of the pointing side of the head. double head_front_radius_mm = 0.2; @@ -46,6 +52,9 @@ struct SupportConfig { // headless pillars will have half of this value. double headless_pillar_radius_mm = 0.4; + // How to connect pillars + PillarConnectionMode pillar_connection_mode = PillarConnectionMode::dynamic; + // TODO: unimplemented at the moment. This coefficient will have an impact // when bridges and pillars are merged. The resulting pillar should be a bit // thicker than the ones merging into it. How much thicker? I don't know diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index aa759a47a..5cddadb5b 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -407,6 +407,14 @@ sla::SupportConfig make_support_cfg(const SLAPrintObjectConfig& c) { scfg.tilt = c.support_critical_angle.getFloat() * PI / 180.0 ; scfg.max_bridge_length_mm = c.support_max_bridge_length.getFloat(); scfg.headless_pillar_radius_mm = 0.375*c.support_pillar_diameter.getFloat(); + switch(c.support_pillar_connection_mode.getInt()) { + case slapcmZigZag: + scfg.pillar_connection_mode = sla::PillarConnectionMode::zigzag; break; + case slapcmCross: + scfg.pillar_connection_mode = sla::PillarConnectionMode::cross; break; + case slapcmDynamic: + scfg.pillar_connection_mode = sla::PillarConnectionMode::dynamic; break; + } scfg.pillar_widening_factor = c.support_pillar_widening_factor.getFloat(); scfg.base_radius_mm = 0.5*c.support_base_diameter.getFloat(); scfg.base_height_mm = c.support_base_height.getFloat(); @@ -1058,6 +1066,7 @@ bool SLAPrintObject::invalidate_state_by_config_options(const std::vector(ret_enum); else if (m_opt_id.compare("display_orientation") == 0) m_value = static_cast(ret_enum); + else if (m_opt_id.compare("support_pillar_connection_mode") == 0) + m_value = static_cast(ret_enum); } else if (m_opt.gui_type == "f_enum_open") { const int ret_enum = static_cast(window)->GetSelection(); diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index 0a27af9fa..6cdb2ab7e 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -200,6 +200,8 @@ void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); else if (opt_key.compare("display_orientation") == 0) config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); + else if(opt_key.compare("support_pillar_connection_mode") == 0) + config.set_key_value(opt_key, new ConfigOptionEnum(boost::any_cast(value))); } break; case coPoints:{ diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index bf7b3ed58..72c6f676b 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -557,6 +557,9 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config else if (opt_key.compare("display_orientation") == 0) { ret = static_cast(config.option>(opt_key)->value); } + else if (opt_key.compare("support_pillar_connection_mode") == 0) { + ret = static_cast(config.option>(opt_key)->value); + } } break; case coPoints: diff --git a/src/slic3r/GUI/Preset.cpp b/src/slic3r/GUI/Preset.cpp index 14ddaad49..102b0610e 100644 --- a/src/slic3r/GUI/Preset.cpp +++ b/src/slic3r/GUI/Preset.cpp @@ -410,6 +410,7 @@ const std::vector& Preset::sla_print_options() "support_head_penetration", "support_head_width", "support_pillar_diameter", + "support_pillar_connection_mode", "support_pillar_widening_factor", "support_base_diameter", "support_base_height", diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 4601d05d3..22aed5cf9 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -3153,6 +3153,7 @@ void TabSLAPrint::build() optgroup = page->new_optgroup(_(L("Support pillar"))); optgroup->append_single_option_line("support_pillar_diameter"); + optgroup->append_single_option_line("support_pillar_connection_mode"); optgroup->append_single_option_line("support_pillar_widening_factor"); optgroup->append_single_option_line("support_base_diameter"); optgroup->append_single_option_line("support_base_height"); From c0df7f343ee28ccd96185a6599da8d848f692d35 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 9 Jan 2019 13:08:00 +0100 Subject: [PATCH 08/17] Updated OSX manifest to reference input / output files. Bundled OSX icon files for STL/AMF/3MF/gcode --- resources/icons/gcode.icns | Bin 0 -> 116397 bytes resources/icons/stl.icns | Bin 0 -> 68486 bytes src/platform/osx/Info.plist.in | 102 ++++++++++++++++++++++++++++++--- 3 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 resources/icons/gcode.icns create mode 100644 resources/icons/stl.icns diff --git a/resources/icons/gcode.icns b/resources/icons/gcode.icns new file mode 100644 index 0000000000000000000000000000000000000000..d5be3bd5796e5286cba744d9d0eacc62a1e12243 GIT binary patch literal 116397 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 literal 0 HcmV?d00001 diff --git a/resources/icons/stl.icns b/resources/icons/stl.icns new file mode 100644 index 0000000000000000000000000000000000000000..a969895986fb598721fc51bbac1adcea17f822eb GIT binary patch literal 68486 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 literal 0 HcmV?d00001 diff --git a/src/platform/osx/Info.plist.in b/src/platform/osx/Info.plist.in index 099cb5c37..35958acde 100644 --- a/src/platform/osx/Info.plist.in +++ b/src/platform/osx/Info.plist.in @@ -22,11 +22,99 @@ ???? CFBundleVersion @SLIC3R_BUILD_ID@ - CGDisableCoalescedUpdates - - NSPrincipalClass - NSApplication - NSHighResolutionCapable - - + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + stl + STL + + CFBundleTypeIconFile + stl.icns + CFBundleTypeName + STL + CFBundleTypeRole + Viewer + LISsAppleDefaultForType + + LSHandlerRank + Alternate + + + CFBundleTypeExtensions + + obj + OBJ + + CFBundleTypeIconFile + Slic3r.icns + CFBundleTypeName + STL + CFBundleTypeRole + Viewer + LISsAppleDefaultForType + + LSHandlerRank + Alternate + + + CFBundleTypeExtensions + + amf + AMF + + CFBundleTypeIconFile + Slic3r.icns + CFBundleTypeName + AMF + CFBundleTypeRole + Viewer + LISsAppleDefaultForType + + LSHandlerRank + Alternate + + + CFBundleTypeExtensions + + 3mf + 3MF + + CFBundleTypeIconFile + Slic3r.icns + CFBundleTypeName + 3MF + CFBundleTypeRole + Viewer + LISsAppleDefaultForType + + LSHandlerRank + Alternate + + + CFBundleTypeExtensions + + gcode + GCODE + + CFBundleTypeIconFile + gcode.icns + CFBundleTypeName + GCODE + CFBundleTypeRole + Editor + LISsAppleDefaultForType + + LSHandlerRank + Alternate + + + LSMinimumSystemVersion + 10.9 + NSPrincipalClass + NSApplication + NSHighResolutionCapable + + From 8515852efc5296f3e0e3e8cdcd01d619b7ae1a44 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 9 Jan 2019 14:09:08 +0100 Subject: [PATCH 09/17] Ignore the extra "Process Serial Number" parameter generated by the OSX finder https://stackoverflow.com/questions/10242115/os-x-strange-psn-command-line-parameter-when-launched-from-finder --- src/libslic3r/Config.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index c9fbe90ac..6f22ba89e 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -561,6 +561,12 @@ bool DynamicConfig::read_cli(int argc, char** argv, t_config_option_keys* extra) extra->push_back(token); continue; } +#ifdef __APPLE__ + if (boost::starts_with(token, "-psn_")) + // OSX launcher may add a "process serial number", for example "-psn_0_989382" to the command line. + // While it is supposed to be dropped since OSX 10.9, we will rather ignore it. + continue; +#endif /* __APPLE__ */ // Stop parsing tokens as options when -- is supplied. if (token == "--") { parse_options = false; From 713ec1f06549315c198fff787880321198028e59 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 9 Jan 2019 14:15:18 +0100 Subject: [PATCH 10/17] Fix of Segfault moving support blocker #1506 Fixed unsafe access to support layers from the G-code preview UI. --- src/slic3r/GUI/GUI_Preview.cpp | 35 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 1092c761f..560d5b69c 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -685,29 +685,24 @@ void Preview::load_print_as_fff() // we require that there's at least one object and the posSlice step // is performed on all of them(this ensures that _shifted_copies was // populated and we know the number of layers) - unsigned int n_layers = 0; + bool has_layers = false; const Print *print = m_process->fff_print(); - if (print->is_step_done(posSlice)) - { - std::set zs; + if (print->is_step_done(posSlice)) { for (const PrintObject* print_object : print->objects()) - { - const LayerPtrs& layers = print_object->layers(); - const SupportLayerPtrs& support_layers = print_object->support_layers(); - for (const Layer* layer : layers) - { - zs.insert(layer->print_z); + if (! print_object->layers().empty()) { + has_layers = true; + break; } - for (const SupportLayer* layer : support_layers) - { - zs.insert(layer->print_z); + } + if (print->is_step_done(posSupportMaterial)) { + for (const PrintObject* print_object : print->objects()) + if (! print_object->support_layers().empty()) { + has_layers = true; + break; } - } - - n_layers = (unsigned int)zs.size(); } - if (n_layers == 0) + if (! has_layers) { reset_sliders(); m_canvas->reset_legend_texture(); @@ -761,8 +756,8 @@ void Preview::load_print_as_fff() show_hide_ui_elements("full"); // recalculates zs and update sliders accordingly - n_layers = (unsigned int)m_canvas->get_current_print_zs(true).size(); - if (n_layers == 0) + has_layers = ! m_canvas->get_current_print_zs(true).empty(); + if (! has_layers) { // all layers filtered out reset_sliders(); @@ -777,7 +772,7 @@ void Preview::load_print_as_fff() } - if (n_layers > 0) + if (has_layers) update_sliders(m_canvas->get_current_print_zs(true)); m_loaded = true; From a476e4ca0f88d31c5307d4f1c921e149004fdf63 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 9 Jan 2019 15:07:10 +0100 Subject: [PATCH 11/17] One more fix of Segfault moving support blocker #1506 Fixed unsafe access to support layers from the G-code preview UI. --- src/slic3r/GUI/GLCanvas3D.cpp | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 9d70fbc1b..253fcb951 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -6915,22 +6915,31 @@ void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, c } } ctxt; - ctxt.shifted_copies = &print_object.copies(); - - // order layers by print_z - ctxt.layers.reserve(print_object.layers().size() + print_object.support_layers().size()); - for (const Layer *layer : print_object.layers()) - ctxt.layers.push_back(layer); - for (const Layer *layer : print_object.support_layers()) - ctxt.layers.push_back(layer); - std::sort(ctxt.layers.begin(), ctxt.layers.end(), [](const Layer *l1, const Layer *l2) { return l1->print_z < l2->print_z; }); - - // Maximum size of an allocation block: 32MB / sizeof(float) ctxt.has_perimeters = print_object.is_step_done(posPerimeters); ctxt.has_infill = print_object.is_step_done(posInfill); ctxt.has_support = print_object.is_step_done(posSupportMaterial); ctxt.tool_colors = tool_colors.empty() ? nullptr : &tool_colors; + ctxt.shifted_copies = &print_object.copies(); + + // order layers by print_z + { + size_t nlayers = 0; + if (ctxt.has_perimeters || ctxt.has_infill) + nlayers = print_object.layers().size(); + if (ctxt.has_support) + nlayers += print_object.support_layers().size(); + ctxt.layers.reserve(nlayers); + } + if (ctxt.has_perimeters || ctxt.has_infill) + for (const Layer *layer : print_object.layers()) + ctxt.layers.push_back(layer); + if (ctxt.has_support) + for (const Layer *layer : print_object.support_layers()) + ctxt.layers.push_back(layer); + std::sort(ctxt.layers.begin(), ctxt.layers.end(), [](const Layer *l1, const Layer *l2) { return l1->print_z < l2->print_z; }); + + // Maximum size of an allocation block: 32MB / sizeof(float) BOOST_LOG_TRIVIAL(debug) << "Loading print object toolpaths in parallel - start"; //FIXME Improve the heuristics for a grain size. From c258375fe298083e2d10f270db5039d6ca7e3e04 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 9 Jan 2019 15:40:12 +0100 Subject: [PATCH 12/17] Trying to redefine GUI_App::MacOpenFiles to get events from the Finder --- src/slic3r/GUI/GUI_App.cpp | 11 +++++++++++ src/slic3r/GUI/GUI_App.hpp | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index ce7ea8bac..b2282a5ee 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -742,6 +742,17 @@ void GUI_App::load_current_presets() } } +#ifdef __APPLE__ +// wxWidgets override to get an event on open files. +void GUI_App::MacOpenFiles(const wxArrayString &fileNames) +{ + std::vector files; + for (size_t i = 0; i < fileNames.Len(); ++ i) + files.emplace_back(fileNames[i].ToUTF8().data()); + this->plater()->load_files(files, true, true); +} +#endif /* __APPLE */ + Sidebar& GUI_App::sidebar() { return plater_->sidebar(); diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index e388910d7..4944bbd2d 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -144,6 +144,11 @@ public: void delete_tab_from_list(Tab* tab); void load_current_presets(); +#ifdef __APPLE__ + // wxWidgets override to get an event on open files. + void MacOpenFiles(const wxArrayString &fileNames) override; +#endif /* __APPLE */ + Sidebar& sidebar(); ObjectManipulation* obj_manipul(); ObjectSettings* obj_settings(); From 0222492e29226fab81b79f35e35208f55c8a9d52 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 9 Jan 2019 16:05:36 +0100 Subject: [PATCH 13/17] Fixed a typo from the last commit, fixed one compilation warning. --- src/slic3r/GUI/GUI_App.cpp | 2 +- src/slic3r/GUI/wxExtensions.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index b2282a5ee..c1ef3e10d 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -747,7 +747,7 @@ void GUI_App::load_current_presets() void GUI_App::MacOpenFiles(const wxArrayString &fileNames) { std::vector files; - for (size_t i = 0; i < fileNames.Len(); ++ i) + for (size_t i = 0; i < fileNames.GetCount(); ++ i) files.emplace_back(fileNames[i].ToUTF8().data()); this->plater()->load_files(files, true, true); } diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp index b6f7a4220..18e7155be 100644 --- a/src/slic3r/GUI/wxExtensions.hpp +++ b/src/slic3r/GUI/wxExtensions.hpp @@ -329,7 +329,7 @@ public: { if (GetChildCount() == 0) return; - for (size_t id = GetChildCount() - 1; id >= 0; --id) + for (int id = int(GetChildCount()) - 1; id >= 0; --id) { if (m_children.Item(id)->GetChildCount() > 0) m_children[id]->RemoveAllChildren(); From d681eef10e9e3b83b1f9cbc65bab705ceb15e77a Mon Sep 17 00:00:00 2001 From: hexane360 Date: Mon, 7 Jan 2019 17:30:47 -0700 Subject: [PATCH 14/17] Added version check for Eigen (>=3.0) --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6cc3b3a26..34edb3822 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -248,7 +248,7 @@ endif() # Find eigen3 or use bundled version if (NOT SLIC3R_STATIC) - find_package(Eigen3) + find_package(Eigen3 3) endif () if (NOT Eigen3_FOUND) set(Eigen3_FOUND 1) From cde0aa4443b43b21956b12e932c5d70e3924a4db Mon Sep 17 00:00:00 2001 From: Vojtech Kral Date: Mon, 7 Jan 2019 19:17:10 +0100 Subject: [PATCH 15/17] Fix: wxWidgets 3.0 back-compat Fix #1599 --- CMakeLists.txt | 1 + deps/CMakeLists.txt | 1 + deps/deps-linux.cmake | 14 +++++++++++--- doc/How to build - Windows.md | 2 +- src/CMakeLists.txt | 14 +++++++++++++- src/slic3r/GUI/GLTexture.cpp | 2 +- src/slic3r/GUI/GUI.cpp | 6 +++--- src/slic3r/GUI/GUI_App.cpp | 8 ++++---- src/slic3r/GUI/wxExtensions.cpp | 7 +++++-- 9 files changed, 40 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 04e023c09..76c937cae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,7 @@ endif() option(SLIC3R_STATIC "Compile Slic3r with static libraries (Boost, TBB, glew)" ${SLIC3R_STATIC_INITIAL}) option(SLIC3R_GUI "Compile Slic3r with GUI components (OpenGL, wxWidgets)" 1) option(SLIC3R_FHS "Assume Slic3r is to be installed in a FHS directory structure" 0) +option(SLIC3R_WX_STABLE "Build against wxWidgets stable (3.0) as oppsed to dev (3.1) on Linux" 0) option(SLIC3R_PROFILE "Compile Slic3r with an invasive Shiny profiler" 0) option(SLIC3R_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1) option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1) diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 1b23c5864..386320d81 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -33,6 +33,7 @@ endif () set(DESTDIR "${CMAKE_CURRENT_BINARY_DIR}/destdir" CACHE PATH "Destination directory") option(DEP_DEBUG "Build debug variants (only applicable on Windows)" ON) +option(DEP_WX_STABLE "Build against wxWidgets stable 3.0 as opposed to default 3.1 (Linux only)" OFF) message(STATUS "Slic3r deps DESTDIR: ${DESTDIR}") message(STATUS "Slic3r deps debug build: ${DEP_DEBUG}") diff --git a/deps/deps-linux.cmake b/deps/deps-linux.cmake index 3f504b400..bf39f59e7 100644 --- a/deps/deps-linux.cmake +++ b/deps/deps-linux.cmake @@ -88,16 +88,24 @@ ExternalProject_Add(dep_libcurl INSTALL_COMMAND make install "DESTDIR=${DESTDIR}" ) +if (DEP_WX_STABLE) + set(DEP_WX_URL "https://github.com/wxWidgets/wxWidgets/releases/download/v3.0.4/wxWidgets-3.0.4.tar.bz2") + set(DEP_WX_HASH "SHA256=96157f988d261b7368e5340afa1a0cad943768f35929c22841f62c25b17bf7f0") +else () + set(DEP_WX_URL "https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.1/wxWidgets-3.1.1.tar.bz2") + set(DEP_WX_HASH "SHA256=c925dfe17e8f8b09eb7ea9bfdcfcc13696a3e14e92750effd839f5e10726159e") +endif() + ExternalProject_Add(dep_wxwidgets EXCLUDE_FROM_ALL 1 - URL "https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.1/wxWidgets-3.1.1.tar.bz2" - URL_HASH SHA256=c925dfe17e8f8b09eb7ea9bfdcfcc13696a3e14e92750effd839f5e10726159e + URL "${DEP_WX_URL}" + URL_HASH "${DEP_WX_HASH}" BUILD_IN_SOURCE 1 PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/wxwidgets-pngprefix.h" src/png/pngprefix.h CONFIGURE_COMMAND ./configure "--prefix=${DESTDIR}/usr/local" --disable-shared - --with-gtk=2 + --with-gtk=2 --with-opengl --enable-unicode --enable-graphics_ctx diff --git a/doc/How to build - Windows.md b/doc/How to build - Windows.md index 898c830d0..90fcfde7d 100644 --- a/doc/How to build - Windows.md +++ b/doc/How to build - Windows.md @@ -7,7 +7,7 @@ CMake installer can be downloaded from [the official website](https://cmake.org/ Building with newer versions of MSVS (2015, 2017) may work too as reported by some of our users. -_Note:_ Thanks to **@supermerill** for testing and inspiration on this guide. +_Note:_ Thanks to [**@supermerill**](https://github.com/supermerill) for testing and inspiration on this guide. ### Dependencies diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fa043cf9e..fd5a735d7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -59,7 +59,19 @@ if (SLIC3R_GUI) endif() endif() - find_package(wxWidgets REQUIRED COMPONENTS base core adv html gl) + if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + if (SLIC3R_WX_STABLE) + find_package(wxWidgets 3.0 REQUIRED COMPONENTS base core adv html gl) + else () + find_package(wxWidgets 3.1 QUIET COMPONENTS base core adv html gl) + if (NOT wxWidgets_FOUND) + message(FATAL_ERROR "\nCould not find wxWidgets 3.1.\nHint: On Linux you can set -DSLIC3R_WX_STABLE=1 to use wxWidgets 3.0") + endif () + endif () + else () + find_package(wxWidgets 3.1 REQUIRED COMPONENTS base core adv html gl) + endif () + include(${wxWidgets_USE_FILE}) endif() diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index 0ac7e983e..292ef472a 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -36,7 +36,7 @@ bool GLTexture::load_from_file(const std::string& filename, bool generate_mipmap // Load a PNG with an alpha channel. wxImage image; - if (!image.LoadFile(wxString::FromUTF8(filename), wxBITMAP_TYPE_PNG)) + if (!image.LoadFile(wxString::FromUTF8(filename.c_str()), wxBITMAP_TYPE_PNG)) { reset(); return false; diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index 6cdb2ab7e..bb5ab29e0 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -234,7 +234,7 @@ void show_error(wxWindow* parent, const wxString& message) void show_error_id(int id, const std::string& message) { auto *parent = id != 0 ? wxWindow::FindWindowById(id) : nullptr; - show_error(parent, wxString::FromUTF8(message.data())); + show_error(parent, from_u8(message)); } void show_info(wxWindow* parent, const wxString& message, const wxString& title) @@ -324,7 +324,7 @@ wxString from_path(const boost::filesystem::path &path) #ifdef _WIN32 return wxString(path.string()); #else - return wxString::FromUTF8(path.string()); + return from_u8(path.string()); #endif } @@ -405,7 +405,7 @@ void desktop_open_datadir_folder() const auto path = data_dir(); #ifdef _WIN32 - const auto widepath = wxString::FromUTF8(path.data()); + const wxString widepath = from_u8(path); const wchar_t *argv[] = { L"explorer", widepath.GetData(), nullptr }; ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); #elif __APPLE__ diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index c1ef3e10d..1eaa6ccc2 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -67,7 +67,7 @@ wxString file_wildcards(FileType file_type, const std::string &custom_extension) out += std::string(";*") + custom_extension; } } - return wxString::FromUTF8(out.c_str()); + return from_u8(out); } static std::string libslic3r_translate_callback(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)).utf8_str().data(); } @@ -464,7 +464,7 @@ bool GUI_App::select_language( wxArrayString & names, { m_wxLocale = new wxLocale; m_wxLocale->Init(identifiers[index]); - m_wxLocale->AddCatalogLookupPathPrefix(wxString::FromUTF8(localization_dir())); + m_wxLocale->AddCatalogLookupPathPrefix(from_u8(localization_dir())); m_wxLocale->AddCatalog(/*GetAppName()*/"Slic3rPE"); //FIXME This is a temporary workaround, the correct solution is to switch to "C" locale during file import / export only. wxSetlocale(LC_NUMERIC, "C"); @@ -492,7 +492,7 @@ bool GUI_App::load_language() { m_wxLocale = new wxLocale; m_wxLocale->Init(identifiers[i]); - m_wxLocale->AddCatalogLookupPathPrefix(wxString::FromUTF8(localization_dir())); + m_wxLocale->AddCatalogLookupPathPrefix(from_u8(localization_dir())); m_wxLocale->AddCatalog(/*GetAppName()*/"Slic3rPE"); //FIXME This is a temporary workaround, the correct solution is to switch to "C" locale during file import / export only. wxSetlocale(LC_NUMERIC, "C"); @@ -520,7 +520,7 @@ void GUI_App::get_installed_languages(wxArrayString & names, wxArrayLong & ident names.Clear(); identifiers.Clear(); - wxDir dir(wxString::FromUTF8(localization_dir())); + wxDir dir(from_u8(localization_dir())); wxString filename; const wxLanguageInfo * langinfo; wxString name = wxLocale::GetLanguageName(wxLANGUAGE_DEFAULT); diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index 61aee6a67..e78917312 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -9,9 +9,12 @@ #include #include "BitmapCache.hpp" +#include "GUI.hpp" #include "GUI_App.hpp" #include "GUI_ObjectList.hpp" +using Slic3r::GUI::from_u8; + wxDEFINE_EVENT(wxCUSTOMEVT_TICKSCHANGED, wxEvent); wxDEFINE_EVENT(wxCUSTOMEVT_LAST_VOLUME_IS_DELETED, wxCommandEvent); @@ -37,7 +40,7 @@ wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description, std::function cb, const std::string& icon, wxEvtHandler* event_handler) { - const wxBitmap& bmp = !icon.empty() ? wxBitmap(wxString::FromUTF8(Slic3r::var(icon)), wxBITMAP_TYPE_PNG) : wxNullBitmap; + const wxBitmap& bmp = !icon.empty() ? wxBitmap(from_u8(Slic3r::var(icon)), wxBITMAP_TYPE_PNG) : wxNullBitmap; return append_menu_item(menu, id, string, description, cb, bmp, event_handler); } @@ -48,7 +51,7 @@ wxMenuItem* append_submenu(wxMenu* menu, wxMenu* sub_menu, int id, const wxStrin wxMenuItem* item = new wxMenuItem(menu, id, string, description); if (!icon.empty()) - item->SetBitmap(wxBitmap(wxString::FromUTF8(Slic3r::var(icon)), wxBITMAP_TYPE_PNG)); + item->SetBitmap(wxBitmap(from_u8(Slic3r::var(icon)), wxBITMAP_TYPE_PNG)); item->SetSubMenu(sub_menu); menu->Append(item); From a33b64c9a301b23f4a0d99996993de5106b0ec73 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Thu, 10 Jan 2019 08:37:54 +0100 Subject: [PATCH 16/17] Gizmo shortcuts disabled if selection is empty --- src/slic3r/GUI/GLCanvas3D.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 253fcb951..8875bc157 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2983,7 +2983,7 @@ bool GLCanvas3D::Gizmos::is_running() const bool GLCanvas3D::Gizmos::handle_shortcut(int key, const Selection& selection) { - if (!m_enabled) + if (!m_enabled || selection.is_empty()) return false; bool handled = false; From ef446f6930ce757aa86aa57262a6c772037c70ee Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Thu, 10 Jan 2019 10:35:30 +0100 Subject: [PATCH 17/17] Fixed orientation of visual hints for sidebar size fields --- src/slic3r/GUI/GLCanvas3D.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 8875bc157..20ecc70b9 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2041,7 +2041,7 @@ void GLCanvas3D::Selection::render_sidebar_hints(const std::string& sidebar_fiel if (is_single_full_instance()) { ::glTranslated(center(0), center(1), center(2)); - if (boost::starts_with(sidebar_field, "scale")) + if (boost::starts_with(sidebar_field, "scale") || boost::starts_with(sidebar_field, "size")) { Transform3d orient_matrix = (*m_volumes)[*m_list.begin()]->get_instance_transformation().get_matrix(true, false, true, true); ::glMultMatrixd(orient_matrix.data());