From d3326f9f0c7f9868adc7231d5912f616dc406615 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 9 Nov 2022 22:04:03 +0800 Subject: [PATCH 1/3] wip --- src/libslic3r/PerimeterGenerator.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 47d6eeda32..e9dcdf387a 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -612,13 +612,18 @@ void PerimeterGenerator::process() } // nest loops: holes first - for (int d = 0; d <= loop_number; ++ d) { - PerimeterGeneratorLoops &holes_d = holes[d]; + int idx; + for (int d = -1; d < loop_number; ++ d) { + idx = d; + if (idx == -1) + idx = loop_number; + + PerimeterGeneratorLoops &holes_d = holes[idx]; // loop through all holes having depth == d for (int i = 0; i < (int)holes_d.size(); ++ i) { const PerimeterGeneratorLoop &loop = holes_d[i]; // find the hole loop that contains this one, if any - for (int t = d + 1; t <= loop_number; ++ t) { + for (int t = idx + 1; t <= loop_number; ++ t) { for (int j = 0; j < (int)holes[t].size(); ++ j) { PerimeterGeneratorLoop &candidate_parent = holes[t][j]; if (candidate_parent.polygon.contains(loop.polygon.first_point())) { @@ -645,13 +650,16 @@ void PerimeterGenerator::process() } } // nest contour loops - for (int d = loop_number; d >= 1; -- d) { - PerimeterGeneratorLoops &contours_d = contours[d]; + for (int d = loop_number-1; d >= 0; -- d) { + idx = d; + if (idx == 0) + idx = loop_number; + PerimeterGeneratorLoops &contours_d = contours[idx]; // loop through all contours having depth == d for (int i = 0; i < (int)contours_d.size(); ++ i) { const PerimeterGeneratorLoop &loop = contours_d[i]; // find the contour loop that contains it - for (int t = d - 1; t >= 0; -- t) { + for (int t = idx - 1; t >= 0; -- t) { for (size_t j = 0; j < contours[t].size(); ++ j) { PerimeterGeneratorLoop &candidate_parent = contours[t][j]; if (candidate_parent.polygon.contains(loop.polygon.first_point())) { From ff2cf17a7390a9e6b9e9c8f894b07a4c7b691ba5 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 20 Nov 2022 09:23:16 +0800 Subject: [PATCH 2/3] special outer wall order --- src/libslic3r/PerimeterGenerator.cpp | 43 ++++++++++++++++------------ 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index e9dcdf387a..dd06f9cc78 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -612,18 +612,13 @@ void PerimeterGenerator::process() } // nest loops: holes first - int idx; - for (int d = -1; d < loop_number; ++ d) { - idx = d; - if (idx == -1) - idx = loop_number; - - PerimeterGeneratorLoops &holes_d = holes[idx]; + for (int d = 0; d <= loop_number; ++ d) { + PerimeterGeneratorLoops &holes_d = holes[d]; // loop through all holes having depth == d for (int i = 0; i < (int)holes_d.size(); ++ i) { const PerimeterGeneratorLoop &loop = holes_d[i]; // find the hole loop that contains this one, if any - for (int t = idx + 1; t <= loop_number; ++ t) { + for (int t = d + 1; t <= loop_number; ++ t) { for (int j = 0; j < (int)holes[t].size(); ++ j) { PerimeterGeneratorLoop &candidate_parent = holes[t][j]; if (candidate_parent.polygon.contains(loop.polygon.first_point())) { @@ -650,16 +645,13 @@ void PerimeterGenerator::process() } } // nest contour loops - for (int d = loop_number-1; d >= 0; -- d) { - idx = d; - if (idx == 0) - idx = loop_number; - PerimeterGeneratorLoops &contours_d = contours[idx]; + for (int d = loop_number; d >= 1; -- d) { + PerimeterGeneratorLoops &contours_d = contours[d]; // loop through all contours having depth == d for (int i = 0; i < (int)contours_d.size(); ++ i) { const PerimeterGeneratorLoop &loop = contours_d[i]; // find the contour loop that contains it - for (int t = idx - 1; t >= 0; -- t) { + for (int t = d - 1; t >= 0; -- t) { for (size_t j = 0; j < contours[t].size(); ++ j) { PerimeterGeneratorLoop &candidate_parent = contours[t][j]; if (candidate_parent.polygon.contains(loop.polygon.first_point())) { @@ -675,18 +667,33 @@ void PerimeterGenerator::process() } // at this point, all loops should be in contours[0] ExtrusionEntityCollection entities = traverse_loops(*this, contours.front(), thin_walls); + // if brim will be printed, reverse the order of perimeters so that // we continue inwards after having finished the brim // TODO: add test for perimeter order - bool is_outer_wall_first = + bool is_outer_wall_first = this->print_config->wall_infill_order == WallInfillOrder::OuterInnerInfill || this->print_config->wall_infill_order == WallInfillOrder::InfillOuterInner; if (is_outer_wall_first || //BBS: always print outer wall first when there indeed has brim. (this->layer_id == 0 && - this->object_config->brim_type == BrimType::btOuterOnly && - this->object_config->brim_width.value > 0)) - entities.reverse(); + this->object_config->brim_type == BrimType::btOuterOnly && + this->object_config->brim_width.value > 0)) + { + //entities.reverse(); + if (entities.entities.size() > 1) { + std::vector extPs; + for (int i = 0; i < entities.entities.size(); ++i) { + if (entities.entities[i]->role() == erExternalPerimeter) + extPs.push_back(i); + } + for (int i = 0; i < extPs.size(); ++i) { + if (extPs[i] == 0 || extPs[i] - 1 == extPs[i - 1]) + continue; + std::swap(entities.entities[extPs[i]], entities.entities[extPs[i] - 1]); + } + } + } // append perimeters for this slice as a collection if (! entities.empty()) this->loops->append(entities); From e022c5ad5b52707c19af288130b94265f081a5e3 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 20 Nov 2022 11:22:35 +0800 Subject: [PATCH 3/3] New inner-outer-inner/infill mode --- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 3 +++ resources/i18n/zh_cn/BambuStudio.mo | Bin 172866 -> 172967 bytes src/libslic3r/GCode.cpp | 3 ++- src/libslic3r/PerimeterGenerator.cpp | 28 +++++++++++++++------------ src/libslic3r/PrintConfig.cpp | 3 +++ src/libslic3r/PrintConfig.hpp | 1 + 6 files changed, 25 insertions(+), 13 deletions(-) diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 015b1f9d76..3b73c53869 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -5519,6 +5519,9 @@ msgstr "内圈墙/外圈墙/填充的打印顺序" msgid "inner/outer/infill" msgstr "内墙/外墙/填充" +msgid "inner-outer-inner/infill" +msgstr "内墙/外墙/内墙/填充" + msgid "outer/inner/infill" msgstr "外墙/内墙/填充" diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo index ae116a398ac75bfdf0507616ad67a877e9d8fc4e..841ec9074e8d8a8a203b700828368da95f6100ce 100644 GIT binary patch delta 42135 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 delta 42070 zcmZAA1C$-v{`T?ej&0kvZM$RJ&cr&gZQIGjb|$u+iJeR)&cyHcIs2FYn{{igx}R;; z-gQoQlDW%|hW+bESl{ia!KZp$OG9~Hd@NqT^Rk5Xymq~n>Uo(LdtLx$!7!K&<6;2} zjkT~aHpX1I2*cqGRK3So1fOCtOuNMMQey|q=y^VGI)Pv$96|c^PGAw|y;qeN_!w0AV{=}FVW|5YK zd@DUK1{OjMq&jL~O)vts!}Qo2L*sH(x%C(e_h2==jGA%URnC%FlXw%|LlMu6s-N59MNsw1pjNUzs@=wz5Zht`9EB-y z#TwRMBRoq&1H6OvvEZMs;v7`LWf&e$n>WlSs2ROStysvluD$q}n|ONE9%zm^aT+eb z(|8m+_}2N4ftPc=+a%2~H5oflBfgK?WC0sIF9gQMaF`HPE-j|Rs;EusL#@mg)WiZe zx)q6vrHQA+q}UOa@0&y*3xP#g2`{0REcqr^F(ayAQLKPLsFhfNdiH;s+ff5Mh?DJX^P=#q25$9tBT#M>>x5ZCkGU7Kd4gRor>Md@i%A*F< z7DHlp)G_Ucn$RGOjbl&)U5ep#{x=YaLc(6lIER^u-$E9{i?G%0*8QmCbRP9+{y~)s zzs>V1V*ymd<4_&W!Vb6uM`EHHrekP5G%o{hJ|jXW7@CaF;?kqKjC zA=ECeg^{s4YLgDfLbw+D<15r=Zokv>65&bw17D!_Ov7C~|Iq|S6BvQ9cH6VX=*0g- zE$LsV6*`U4@DA#Dy+b|YPpBCO-{T%#MAX3IqXwPS5d`brwdd&45j?F{Z~ulK#Cn1T>VQKyHFj!M!h+cops(sJ;L}HmUwE^X~>2NFgKRL8W&i9&18XP?7}3( zuVYF4idu=H7u~L{iJ^$MM|~J|L*>uJXt>tme_;gTS5X6agfHV@7nns zFR_tP$FL9vVRO_Y*^Ym$3!u+q;Q+1UnzN868Hg z$Q2xoFHsZd`OrO*fv8F%N$`WN$K*e9OX6iZ=AT#bPNyg#rM@efbk*Z2a@IMT$&;!pgF>hSAx_i7IL!VTD$ zkAOBsbJV8kf|~hYb1J4Kz8p263#b|0L+zO-7XO0UgnG@%7^p{;7E@wj42dl*zXK-H z`5$ZSaA(%WMk;sY=O&O$w!6_^4KVnTd|>M-=b?#&ntRX#1M zd~Q^KRWTI(do2j4;SQ*dN1z_TOjJXw&8?^vIDp#qCov*k!btc4mH*D--^~cGUAqZT zE1VIv=h~w$D}kW|isE)mj9-ywdd_ z+=o#L)Bua1&VLouK-;`y{k1e*EnyJq!(xY!?+{|Y1HXHn#4!R^=v@1xqO@Si&+fB6V#CRb4z_fRjG8lU+(g>^AGjzlft zT5~U|+!<_)7cn~K_`(MZmPMU{#9!Ttrou+V3!?g)k8#kql7JdIh+2VTs3p6O+N}>U z9{xlF&w&oT_}*Yp?<)p2RFidhHMaZ}V@=zw}b4MeTzNK`wsFg~uqgm@ei zvH!fM1T@0X!24>V_DY|=NNp6v53m?)>*AK}$aZHGpa6Y}Bq_fO-V$Q8WD;RsJJB#^51c`U_O~;Gx_~ zM8~wm6Jk0ngL(wrQ2k5_-6kuCs$U;9pbn^+4nnQia7=(xQ7LGe2Tt;^88> zhSH6_Yzkzm3GXb?U%dNmx z)C>-wmhdvFfj6iZQ?Mv*rU_9q$%NWuB~TLy!VK6F)$UZxg-a}c3nT0E{{;b^f^Vn> zf=6{m!KuU(q8i+cTEgR)1+QXz3==KD|HEVt)H6PSDt`^N8UHcAqb3v~x-$ue*7?st zKm#ax zLrl)U8aQYfCr~rGWbs?5ijOV+0@d*c)CzgA0{mY{B4ci%xlx<6GcLoCs25k}*sfkx z)Lv>}_KwZ@*9&DD33}75!{m4omHr=UCQ;(JB~68zX=c>3E{Mvnj#|OCsG0S|Y&Z&Y z;9kprkE$0CH^Bd^nAko7nsJa>2Q{-Ms7KHR)xj{-%;umv+Kk#{2TWR$dB4HzH$WAVFOgf4yXYQLRB1v+9Oj@9nUsbU`FCwFc>~WJ=>?K zdT&wfd`EQ@BEDO>*r)-dL?+<#auCoSD2t7-3aY`4sHNPBn)xx@gm+OhpOU~0e5JX= zJZ@e`E%h_gOX%XU%#4^+=f4C2eK@p2?SUzn9=Bs6e1xenL?XADGMZJ)uI6;)TbH*J zHN!25orlbe=6%#Lej|1M!zXbGsm!8Sg!KBTM>F4CXYMo4Vs-NGpdL|J(f>9iMNgB~O&heRyO?J+dIwX{e2AxTWbc zr(6Cy)ByLO_QpZfUOSV_&i{Q9^u~II`X=-i)nWMLZYD`kOPUVVP+rt-E^O%~FdXq} zW+T*h$#$r6<1BqLP9;7cwV89I@VRGQG=;OHImbMXI({Ef&n$dOdk>(FTV~XN%b=FL zDXLt1)Uh0an%GRsUxa!TYfuAQ?<1gsTTnATg1PV}>i9%U72yAoDjsU7>tb1KjatIZ zsF@!_4d4=LiEpDGr3{t9I>t`KqoC>y!u&YJ;^$G1_<{Kz+Yk?tkq-+=>g>9Vd7hI zx;@Y*muqh{s=q0ymG{jepbl1{2C&ZxoJMtY5%nX}UDV$Aju|mtZnxRWqL#b|`Ui~u zb8k*UJ;GV2J+l^7ZYMGjpLdWzIueefp5+JBOuwNXML?bauP}zkR9FGiV>i^BauL?Y z8>oTi&g))a)ln1cgDN)xwb_qh2K*IQYM^UT9qq>5cm~zs=n}4-)u?)#PGiy-N6>N+86#E19C2}O{!)JlzKeYUpsL%VrQf{v#zz4)L;~ZwCgXSHs4Lu(!E1H%fK=&KO*)Z9s~8P$D$gTj9S4NsD>AzR&EvQ zLu)4n;dRs|OkdU=<1VQ7eG@D&2emXSPz~=ueIMA1YWS+<-$AX^Ym0x!WW*zubM>>L zPE9e?#A=`(S$(q$s-NLbpErYmzCx`;RXB)xrY9_Z5jCS5sFitc@z1DZ6sCND|BvMh znjKK*d!Bg;^$5S91{$S;i|4?UI{)PfXheUY9>EaQ63;<(xX9dq8pwY09O?yi7qvn! zEd3p-y>VJWXFjd6>tHtOnJq&->s_dsAG7pp z7XJseV&75cJVq6F46~v-E{y50JZk1WQIB9UYGT`}aQ;&f*h7LkdW1>vE$aA14{|G# z7B!%JsF_zr4R{jj+)p=`q8i?WTFD)#l{kTF|GatI(q9B|{f^dQYK11D-ua7A-yOG_uPr@oHJ4uyHGv=>0WDQc^zQ*wL*2}w zs1By0mT&`V#ZIA~<$KiT`i|;2M0NKAMjX^LPJn8!0BQv)pe9rY_1^HcvI1RD9SuSi zoQK+_t5L`4Fsi|Ks7Dd4Mu7j1T2ft4xOxFzKa7Uj{S#5o zev!pDVgup_Q7f9XKIdPr#!LisPD`RHc0p~n!Kht7&(c?-j?+%8ga=SFjMBi>ONXV2 z=f^*AD5{;$m=&WpbQ3Iv8gPY%oPRyT>Llo!%pa&3Z$J&`DQYi7Z{)t?B}E<20p>K+ zOxB=QZimJ9VHM)1P!menIKZ2anJ_(`#k%;dvCsWbSgVQKRAaCp84FOm{SNlPpQv5m zqp2I%7*xaCQ8PS_Y4IWEz(~ykyg66`wPN?pXV{bYYt$ob?Q8CqxErn_VE}3-=~}p@ z&4QVTmqQ)HKB!Z%5;c=+*cC&xbOY**+N`7T2+l&a*SM8SZ;9Fy-BFv{H;jM^j7J^6 zsi-Agj+)74)Xbivj$Mq_ZboTPyE!u!!W^h$)(zG06mu@B{bhI$*PvE*TpRxv68`=N zff^*dM{SC7ZQTf~qL#QRYG7Sadu13_z$KRd*7Ae3bLC^8HepJOcfs3mN|{KSvrXbjoO6`X|XXa#CO2T=pMfm-^{s7IBjvwM?v#CF7o zqXzUI)p6u5Ze6&%EQ90B<{f$HKUEtlPYwP@kS5#<___!i~f$qBdo~c(;PZal6j{egfK+y(YK{ z=TXNd^27lDU!_Qo$B73{3h?&hDO`+WC%c(vnc~uGp^jsmsji*cs7Elv;*anw@#ND2 zyjS=htI)sqV0wW6FCONY;X3S$`j99!)1BA-s8{VdEQXg+&p6I3H`9iwm1~VEw+jPt zKk9fM#L##KHGr$A&AEIw=U;E8Qv~!(@1Zin%yDn5jHm{Sp_a6?8H9Q@*F&BA_81Ji zp;oS!OxFX}yVaSrES4Lu`4A1+@|@rZNX3n&rlMUxJdUljG>R0Fjc zn_?vFh9Ph$s{Uxyi);?+MYakxkgcdaun+TL;5?3>W>#>Xt5_OC60eQ=X444OVQ-5M zN4*IbntL%8@tdfxXzx%RhM(^`jE!nP32LC}P%D}bHQ>TN0(!TXw1mc}3N6jfs0w{h z9Sp$4I1|;tPShjVkLutUCc$f{75IXhQ0N6NKN2dQ2(=e{DG8{Z)6 zzZ?N|)Dm@GJE1!0gQ_^t@<(D8;*(JI4xxS^DZVVg|F>mBFL$2>Pf+!XtZ)-5g&Jr* z)XFtRtw=}oX~caAXvC9H$6^U;rgtqp)JnJc;-JcB#Y|Wl)o@SL`R|9Cz(8z_W3V{B z!UmXamHQhLlQ21PZ#Cz?5T;li;QtGS%~2l~Cr}NATH`ibRJ^EisJ-$T)p3PC-7^nD z&8Qw~=B-hiwj*j{-OUlG3Cuzr@AZHB+%7&rg5F#=QM>ySYU#tSbqz#C?TzH9^gNgh zi=dumb4-kbQ5`NpwX+qqX^*2$%Qf?v`Nd~}aO+&b_^1Zbp=MYBHIt&K8J0mEqZ+8) z-3Ilp?~UrPpE!MU-HHT5J(5_ca`{l3xh$%~VW8{)Qs?Lv0nOwAYSTSME$uthyFS<^cWe@) zW|9$;VlLEsqYmnkbVdzyC~A|jV#1wx8$Kw=QKR3 zp}434Wwv->i`T%SEI|v@O03-CR&q6JAlp$BI*D2EiWz#VJ2iQc{m%=8fM!w>6Jvdg z_eYIV(_)8JOjhIh^A+uXO^(x?HnL=C*R#YdrD(Q{EBX3Mv6{*|!b3YNg4#3jP#vVk`j{Ivp=qc`Is-LNr(Ktw>{3xpt^W*B909DAWYEnEO!Wj$;YD?jxWN ziA1~H3~Hk?wxJ4sN6j?CZnx{>qLwxZDnGlW7e}pJIkPdUUJr8!s{BM${e`A)vlTdM z1umHnt-yQB54FcN7~M>QYA7SB<07b2P}9=eqK;{QbEr86HL%Gp?(-H{!g5SP#%A*h zY6<^CjXc?2_dA#{4X_Ya#b%bjUF!TFwuB3) zO?b!Ri4MAvr^l>n0QKqE1+|3hP#y0!FJm3zuTV2CbI7ekJ+p<`$?T0jjd%zFIU2R( zlgvG+NAeW4)L{?1j-#UCb6-4y z9do}jX@x3q88zbjsE)s43XFK%rDsPCynS>oB$4qHvL-pq?Oh5&z zT1FkzQnfTUn*nFs&-)c|4f!)ro43SSmwwocbk4OB zP%~PLs<;VtZ1$rDasvIIk`{l5T8WUCU3wx^dpS_`^P6Q*?bJY(Z-hPtdRf9GbG3QM z{M-D9dXq)E;(isA9kr{MppM%qRL4(I9sg^7Gs9eU1Bi)w&m_KT=f4~Ysu+Z-SR1th zEzIty84tq_I0scO+%>mnVx#Kk#dKH%RlhxI#rmNJI002|4XV9O*Es)b=r{@K@d{SN zVAtJDgD@HK9;gOqqsp&Fz1z2=zFJ+y+!*GD>#!*5dqQ=yHmc+LsCJrRPVDNlz-rVN zj{6pmeA5k}6zWv8Lv=I`%i(_1%);Mt&oU8KBc2=8(OA?Br=U7qW$8Py3-JS}uWr8V zf4dG^p?;Gw3e~_Ob0uoV>&-pp3G*td{6mYsKy~;ZYHx+U?FNzrwPLx@zX_3gKCh7r zcrDEisAts;i{eC7gO@D*A!=sc9k+xrQ3I@C)g@82{nM_sDT|p|M|Z| zKpniqrT7i~D{$8}yb_ha)#67`1GtEK1kcQGsCtp^x$-el`6*Eo%7eB zK*wsdxgPcDb{SP6~>7)lmbC^}r1{73!;4cGOQorBUC4YnrW5kDw3w z6c}m=<56FcW}?1`tU?XoIX1vIsE#T>bTev%iuXmeGX^!|X%=6JdNiBN{g!?j^+o0C zLp%RjAGv~gPz{tstw?RudG2rNt5DBy4{BhyP#rulU!zXTchtZVJ$CJ6LbY2BmEO|g zJs$hqvm8Z&j>7^}!19JadLeRfvXq4&lhefM__m2t55?>^3rwC0M8QdidvE4|F{8GMAfg0 zJ+Uon01qwyh4~*c5T6&~m0Oy$sD=ulc55lruU2ZK8tj2uf#IkIr=XT}wxzE%cUk^1 z)Hy$E=}%F6;{)oE#`;(7asILq(7U=Y>YZF1)j=QBfCiyD8iP6&^HBr2W4=Va4?d%g zWu({c&lAd^ew15?ckv09#ba;Wt2)}-0I#{ue=7n<@eHcrY46-;!D7_2I*$vy(|9%{zHKDdGrPyheh2Ci9z^Y(d#DK{{OHQ3`^foMLRJz~p%Ch8b{W)<(H+fx zsE$UXUQqK;@AP%3`iCt4JZfeSQT4y0j$gP>?wO}W<(EX|H~eJhzdZ?RXs{KSfa-81 zYGAujOMAr9ub9s){Tr%W`2U?#~{*!FgGqmJ)+xK8b6~3Q1pvii6GP_?u=Rq-v$euK+X7p`4Kg+Fkjt= zNla8cEvj5Di9G3-xRIrT7PKzz`rii)P#q6IeIXf+8F4%675W6{V6YH@{$Hmrz(vG&qUzNT8R&nr zHbcc*p;odZYJj~$2D~ zRX#&#TT!zVY5>(x?~S?^?-bhS3icpD9S=dxY&vQsHklVt19)SG4ddd;Q1$YoW>g8) zQA3NjKn&?rkCi?>4mpa0DypaHByjc_Y!07pEEdO_spl3@B5cPWHLTmM%cKnViZ&d@lX|0qZ-O&`PnSJfTb5ll`n1S)lmbj zhx&|Zi+Z$UQ7g6!hv@vDA)w<|HJ`3g1TAE*I`j_)2- zBvgkfPy@`3`V1(6$@TePhk$;_^jU$`sE)Rye$={zYB*#9XJk}^am@^7VY4b~0xeK` zr90{enlY$HG!M1=_n`mJ|F2lWThz$IC3Fo$HItfI&7!DsL8yV%ws=$24BMDJP@keh zP>*g6s@{6krrd`9pa1_Nppl+Jjr=~Up|_U)6IC%rBKJy-kBWCdtwcA}j7H!}TxjX# z61$J<24*|6w>cs)=U^ z%ma9t{A;N15o?qBTwr%n=Lz!~YCw<8PiE+3Ep^Zh5z^nXemFK-%v{#EV*0S_^3^j36);a(p#dw=l4b(uc?;4&C*Yx+I@uT_$6wf zpUqGyT-+CffC?l-Rmg1dT&QPT9JR@6Vl-@wTJmnFdZSVGW}wQ=N6m1hrT>X4x7j>k zo2&TmPr~wW^ zt>ifL|NOt4fGTYEC-7!M&ES}&pF*9Ai>QG-Kz)pUwES$T1N}czgt?i)~e z)BuX1I_`(6Hwra?xu_Lbg8u*h&mIDr@nI`)998k0`8Vo?@!ax1So$|q$6?aBj-z2A z;$^WLjzV?lrFVuxO(Y_!{eyCEhMGy346dR0n38yU z)TXS8%5RP8xUV@F2NEBJ>NtExH{duKIse+#l}S)WGgJeeu{91s4d4~3T&PU0Ts%|< zsV$z#%#S*bWh}p~*#$MgUZ~HS@u**J@A6s34^)HEGrQd!54Fj%qE@6MYU!q%%P}qS zZK$u^_fdN#W)?Sqe5eW4N7ZYC8bEK<1Sgoj#RODvD{6)ZQ5CLQfhQLKg6c4AR#!d; zs==bD25X@v&=$2Px}bjd(-+nLEOR-k{AQ=mJ4!$mZyfBwJGGIp3pPy@M$dN16-M0nfMf0!Y1 zyFCydwF#4=e#u+|wHbY=J+lP$qu5#0iYCe9ES!h)uV>qk1U1kRRbese7@fg#_!_m@ z^5=C1p&Dw1n(=VdfTy6^n{DycmcP-`_gVT`OTUtr^Y4Gbkf1l$H`G$*&ll+b^T1kI zi}+B~pIF>Rb(kl=>#!s$UI8;<9ZMgDLBuDbUd0bBJz)X2^eN0tJ_33(1@CIhU;6+@z zFDn5pZ6Qmjj#_~xs0R95`Z83*o6LjeMbu_`fO>TQpf+vnqON>8RDM3xKuVZFxLBY6 z4J{#9F*mcwsDiODDJI8;Sjy6uqgG(E#dn#rowCu=MK|e~dbA|5*B0OAlSrm5+pt$d7699%g^k3JgUJU_5Fi=b-=3 z|JD%5O2R(WZ!+F01Jjmr4HqzrqZ%k@@mi>I4K3cq@_U)XP&1#5I*uzX{S2z!P4u7t zR|IqlK9~_pyN*(s*-;}df|^Mcvo30-np=K5v#&V@)zKW(7nXIXJ#`ngS3;NJ{3{__ z8CS3_>P6E5)!{hQBbkSq`F_;qJdNu3nWeurznfvpy7IA515S=ApApq=4$Ci5*5@*U ztUztlk~Ok|-7S3>Y5-%+S*U?5xBP?V2~>yYF(=+c9k;0E+>8sO+G&d#P*0yF{Bn$C z%tQ@j0q(}Fmi|ZiK>x4Nd!ruNFjRx{Q8Qa(>ANj{*?fc=@CVc*iBiGU^Cc&cjD#$x zjOwU@txzKzf_g-wQ5|hUb-W){?z*LaFas;PZ#I!o^@A`h)<)HDhWbqDjP&Q@U%R`6 z5msP~ITO{uGV@Q=(r!j|ycad&8>oRlM|JSs;$bVf^aN&RRDLnDGUn9zuTMa`bBbjg zMm2Z=HGoH`j$Wc3$v4Z7TG^FLfm)H=sFkXM+TFcS^_QSJUX5yJyQLpP|Ihztt-uTO zKUBdGRb0gwr~xHK4Il?9znsPEqBdD))XL094QLlOz)M&cvjw^K#-j!{2YnjZVoO+W zZbSWwWG||ti>LuSFh8Q6X_%^RrqNOD6haNKyx9abu%4I_m!SrB+VUS)<@{^J-$+P| zv8%ZT@}L^5g!&asJ=D^ULydeZ>b7$_R`bp zod3iG-jbjOqt$Q)b6_~)`OVU(FCx_}e*tP`mZQ%3Hq^{sp*|x*)pP@jfhw2O;#sj9 z@j|HI32pIN;HVY2j{1`L7`5cZYq^GMVmji@EIt9%;arPvMU_8j@hhl5e13ph;WV|~ zKuVy#X;sHw=o?8u&n#FSx5RN!OH%~3WaUsx8-#hWA?nY7W})gGxBNS(6?%ypNbb7M za;W+ZQ0=v~co(ES{`;SnuoH(+;3#U-l&=@){~JxcQD33XqB;yy-z|9})FZ2bjj$)G zqwALb7&Va44cyG*p;jUts=ZP;ROf#n0nIp6L-!(zg6)aNKs7iRwc97)9Gs1sN$y6j zgF>i*1esmUY36q9L;elaUZ~O7*#Z~Szt^3B8jRb-4J3(~4wat6%#RvSF|#u2#Z@2m z`92Oc<4u--1Xcecs@x6K3WRIw29OHvhH4h*|F@w@P(Q6ULX}&L zn#n42r+EVPh;E?DzeWu>TXQ$D!l-yz)FY_bob#`Qi6kt+d8meqwQyg@tD=6Om~8Gw zb?^xF{r{^Ox1~GRc~I%~F(vjzJ(|Us1`nfF;9t~xAY3b-8&RfKZt3!)22=@SVLjBB z(5|SCr=yO~pV$oVS$fIVuA_RW4*H{x=PWFQn@|&Zhx(~Few#qA3Fh??P{LeP$GcEV zd<@mVS@Wso2efr76cJS}p~X|6>gOa;>}UzyP#IM7wY}s8%aRFXgG@+Y4~=5 z{{OZ^d8|Nu4tB=ps9jvIy*qB#P)nVsgX^dkHYMHxi{S-Sdoeq@@-dm*#;t@K#b6yHHlm4jBfGKzocccEU$bc^HN3&(983p{|;-&Bh@kOYW zT-Y_x|Id7PqS}etP3fG!yae>C)T*c#PX~VnGe>QnE#_6!$UkGS0G7VHGii@N|9@sH zWly&^wqPU5Jwr{bY%k{!)ZW=^zQvsM@1^V==>JQn^>HZiHK-A0?cfSQk|O8Z3!_VI>SR!2MxXZPaJRYt$x8G|-uHAm=|j2^mOOi%n27 zk21(LkOyZGABp<(OFr2Bgj5+dun{;G7n+%d1p5EGzk6^R>CJ|^34O&C#A6L}6Wxym zh<_i(NVQAz4R@QZ56&dM5zk=x5pD_NjdUG0#vP>hM*T)3`zUwphM{IQ8I?ZEd};Xw zN4p7?LzSD2!Elj}fX?GG)Q8Yk+=Tm4&#dbh*TH1e=39VDKWym_Q4PMq2>73+haBsE zrxXp)4IKkz|My)_1 zRL5yh6U(W%&VK^}YN)N*#q5PgNgsf!SbCzHadp&8TcH{rh{_+0dZshX6_&moRqn9G z&ziT;r#I3w0;-r`lItLYSr{vlUe#QL`XccLHGrg(-S>oi7@v4`)IhqR9*qyx@gz&1 zW3EK?yLB?>UlpEP#wRoQlt7O+tQQ3nVKh{^Y^Z@2My*(7R0lOtr=zhs%<@;88&NN| z9jJj_Mz!~J3gAP zOopdX1ASwDKn?ga);ktpmZ4_$5;c*4 zg|1#i)PQ54CKdCzR1+SL-;mz@)GWfXG!1Btt*I| zFGl}&@wc+Q0<`n5kA`9}s!C+Vu_Y=-<)5(-j{Bi1(x63{I2#`JZg=pdre{E7UIlXy?M zTuHGU+-Dh1EaEB2A4*tPJjz_A>so~0Vron8WlgKhW6F#mJqGsx>Srget0Cnh6W6sR zIFCCem9jIwkrb@MSbx7NTZ6O7UqGII94$&%*Com~$H~NdSmS(K@v>T2W%$QJ{;QsO z82_|B+L1Fw+pRC78EKU&A^%R!+e<_I;}5Sb18B$HobNa&}Z6X22;Tr zPC$Mo+I(h(0%=Rvc`)7A;<&8FpDkcy53XnKk{^SpwXY?^P439 zb$||P60T0HJY{-PR+oNr*xka%f-(ONWL~3SV-nZXh_3L~XhPE7x+MSqP9*;vc|~Yk z*9+>Erp({mjcriRFfL`1V;Rc4<_<;tId#TZ`zZ;p;=ZHjzk+{{Ry8V?`ty z`gLuyN{SaJe2hB@oo7M5Lwk#?>@LE;u5{$3|2vlIhyu(fxSwsZ}*LA-KN@0&SV|GA%1S_TTN;(p0p zlt%c6KK^SRaek@iWhZSg;mVZN&pfkm7V&X(REo0K$k(-rv{7^#mh{Jjn~**or&1;u z>3?8o8`Nmpm>z=X-;O|C>(DjBD%cD*(|LLeEAI+rA6uacc8bHD}=?{VGrWB z8ALMf2E@bB&wRW<-L|CF*Zk3Zz2!*3jv4xd+Mfp_RIf>_? z5nWj*)0umkmDxr(BX>5+O(nl7v(9gm+(i1X%f~;+^Ojr2zohn~fos2V%|m#^$_%xE z?Io=fjVB|$2)40~Ul1-#XEiOpop^4_CZp3X*vi@==*^+aXe{__M*{s)>wWTs!rkHmN%I2uPeM7q25pua!~#@4Rva(#LUMqU>xMdPtsrR^neM`>#OK zdeBJ->Ln!Y1L2E=r=zY5+@a{>2=)B${|p2+kPwGihoiEtxTIYmJdOJp6&sNk73+|$ zs{`@lH2UlMmvVhbOGUyd!uKfmo&4Lxn-LyB`wd7xMH>xBPe58xeg2E_X{B)lY%dDgT6gT@?v$rranO_5XjUpQPM) zf4+bIE~gBmUrWIn*4Z^IWR<>H+KJx=_>2x$ke>*3wdS5nqj4R(|9&i^I5p*z-JCvp6wE+|(FDYdd zO|A}e+X$Om0W}anI4XaoX2k~$ioBSK34YW4;=tt3kBQeY`>-;E<vXb?a>cnH zk=BCzbJPvby@R~SR{ph>PeocS{pRro1x{E8zuI0+=6|H6!9OYU9-opqibFA184sjm2gLcdc-4 z!bb?dqD)lWMwzMHBPl<}8li139C=Hq8$kIj+?BbHayKGeS7m?dHh(gP_W7_C4Q8+9a5v-$GRGLRx z2P{tI>@>cTa7^;+`kQnAQ#S;jUv7NLLyz#6$lBh4&4mh?Open;Jf)ZIYct(4J~lkghS zA5kW*wZ(rV!z<4qVq-6ze_e;EP>{+$$T&$_V=~u}ww?O|;cZkdPPjK^;&I31o@g_f zLnjZYQ-iwdOhmQV^B%Be_ive^A6;%pxw^2GnRfT6Yu28`Mf`DH04MrNk&sTY+)U$ zq5i}(5pP4Dt{e`pFX{KFJH+Z+vUiKXPx5|Ud#Rht22%dF!G&fZ$@O2J7(>ZhRCrB8 z&onyXz3HqyVO=}TNi@=r`?|%mQDz)lTFv5Z_Nh{rS))>_WLKq#Ywq*8uL;R;LH`GjVUFTw>Dh zQnoPRFtneL^nTo(yvjzB>Cep3vKk&`JYSXSR$FJ^!ruTDm}CT zDQ`aEwN!3u0|?KcZV~@Z`X6+p>j}OgP1iz{}~cB?#wiYF|r z{OeT6X#>eZ-Wxi;Py9G#()t^4|C5#he6@IE$~>XWK;jRmpN-CH65mc4U9)JXCgDH1 z8|g=pzic*NNoYz1ANLjRvfLY89gm>@nn2}1%1@*0dK>5}GH(+9bsZ+YgAO}Wu0E#6 zG}Md4Ky)=BZ8h=vr2AqKSWeFPC#4lh<_(feCqT1e&FR2oQr zL>fuXt?M-LZ-lclkm}U=b>*RaG|~!Lxd!;f!oA7+^~T*rA1(PWFL@DYybT#2Xkj_w zKgifdxGs&X`PC|JqLaMj>-x;SfpWjD0P0Vs{A}{KkoYHgiAdA+!_CxNKw1(TNLR{+ zCjL>+IuDhyQFs~&W65|zTBF})w1V_)zr`n6xGZJwTX->Tw6X9BI!SDux2JAN(i_oc zUhBLFHsY>Fy00gJjod+0h~ozAt*6pg;;C%5N`7Q{Vn6vl@>0?0dm1T2*-S)Jso%G~t!hkE!qf6-anVLS?J)2KQN5b*`&3;>&4NS9BR+^3*S5-@EN1CoE z4C58O{_Ub(YpWl}KPJUF@9bBQ# z8o~=Gmw~)7l(}Jp2_o-2c~j`17Ws>85MqLbhhtdsYU__{bj_v0eH!|8rKLfS2IF&& zvjNs6ypTIPSv9%mQGOl%LqlmOGt35;hP1Xe(`VRMS;RuxLNBleu$5yABfL%kZjYH-F%AciN z9s2N{`E6tgnZZ;l7Np`x?(P&!O`*l4PoTmN(h6Z{>g1uZ#pGuuEi`HENejY@7zx`@ zFBstplvzS}Eakcq?n+qKbvGEd{y8XE-lhBhm#DX!PBUO~8mme|3hpg5psOKwPtvd2 zk}Itc;VcaP5M|=gNpCF4-Gq+flKzRbSk`$}Yv-GOU9W34_fqxBb(hR%6pVzGX!If- zJ-4M({!uIUk@RKcufXHDfxL-y6wC5eb~x!T$zP3MEWH-Kr|ss7|N4Qu9^n@xq^6^A zSlWL$*D{Q|AVG)VojK zMH@_S!fz;3f_M=I@fY!Z)SGJUpCmmp9qWq9eS~|E{}&hpno^+`nV)Ik2L;nvXECW9 zlJx%M|9*X^@$A3NauWHuNeiOxQR-Gplkh?s8c%o%WsgzjZyH=e+EU6iBfgDzN5Z-)+Tcs!CTlMl zh9>TNOalXnWTSFO67~}=PQ$@TZ_BOgGL7k)LYbtNHixpwxHH>8o0F$&Gx5XRxhVIa z<-KAci7fw$q>o;%P5vyMNGEGFABhtvPyp}Y0<2?W){n?md(}k9Cy5b&vcMzrIfWK|)~~`gKjD zAzfE#s5A|>XXMQ-Ex!4gbX`5k>qWU8g#Y8-LAW4g#?V1R;;GnaTo;(t&sInH7NRmh7>_$g_f ztbSACcStX2{Sf_i`Mg_XtmDqlKy-bjQW)-&g!ho1+BywM{y1x3imlXN)gBX6z3a7Lb% zv{u9us36xto6Qy+#6YK69gQgp;VN{{hxDxY7xz`tcUXI^NS~q3xqKZdoSp)@>RSPY zk5~s?D0rTGH)U=rgR2g`1S4LIhCWj64fPJuPBPN!V+YD~C$B%|!XeiFzqHed@?HOb dKZ6@C-p2p=Rlast_pos()); } else loop.split_at(last_pos, false); diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index dd06f9cc78..c0faedfe75 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -673,26 +673,30 @@ void PerimeterGenerator::process() // TODO: add test for perimeter order bool is_outer_wall_first = this->print_config->wall_infill_order == WallInfillOrder::OuterInnerInfill || - this->print_config->wall_infill_order == WallInfillOrder::InfillOuterInner; + this->print_config->wall_infill_order == WallInfillOrder::InfillOuterInner || + this->print_config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill; if (is_outer_wall_first || //BBS: always print outer wall first when there indeed has brim. (this->layer_id == 0 && this->object_config->brim_type == BrimType::btOuterOnly && this->object_config->brim_width.value > 0)) { - //entities.reverse(); - if (entities.entities.size() > 1) { - std::vector extPs; - for (int i = 0; i < entities.entities.size(); ++i) { - if (entities.entities[i]->role() == erExternalPerimeter) - extPs.push_back(i); - } - for (int i = 0; i < extPs.size(); ++i) { - if (extPs[i] == 0 || extPs[i] - 1 == extPs[i - 1]) - continue; - std::swap(entities.entities[extPs[i]], entities.entities[extPs[i] - 1]); + if (this->print_config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill) { + if (entities.entities.size() > 1) { + std::vector extPs; + for (int i = 0; i < entities.entities.size(); ++i) { + if (entities.entities[i]->role() == erExternalPerimeter) + extPs.push_back(i); + } + for (int i = 0; i < extPs.size(); ++i) { + if (extPs[i] == 0 || (i > 0 && extPs[i] - 1 == extPs[i - 1])) + continue; + std::swap(entities.entities[extPs[i]], entities.entities[extPs[i] - 1]); + } } } + else + entities.reverse(); } // append perimeters for this slice as a collection if (! entities.empty()) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 89d9ff106b..b36b47d4c1 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -159,6 +159,7 @@ CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(IroningType) static t_config_enum_values s_keys_map_WallInfillOrder { { "inner wall/outer wall/infill", int(WallInfillOrder::InnerOuterInfill) }, { "outer wall/inner wall/infill", int(WallInfillOrder::OuterInnerInfill) }, + { "inner-outer-inner wall/infill", int(WallInfillOrder::InnerOuterInnerInfill) }, { "infill/inner wall/outer wall", int(WallInfillOrder::InfillInnerOuter) }, { "infill/outer wall/inner wall", int(WallInfillOrder::InfillOuterInner) } }; @@ -1000,10 +1001,12 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("outer wall/inner wall/infill"); def->enum_values.push_back("infill/inner wall/outer wall"); def->enum_values.push_back("infill/outer wall/inner wall"); + def->enum_values.push_back("inner-outer-inner wall/infill"); def->enum_labels.push_back(L("inner/outer/infill")); def->enum_labels.push_back(L("outer/inner/infill")); def->enum_labels.push_back(L("infill/inner/outer")); def->enum_labels.push_back(L("infill/outer/inner")); + def->enum_labels.push_back(L("inner-outer-inner/infill")); def->mode = comAdvanced; def->set_default_value(new ConfigOptionEnum(WallInfillOrder::InnerOuterInfill)); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index dfc0888d66..9e009f7e31 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -75,6 +75,7 @@ enum class WallInfillOrder { OuterInnerInfill, InfillInnerOuter, InfillOuterInner, + InnerOuterInnerInfill, Count, }; //BBS