From 444c2b2808575494fe4a8dbc6735503c37bca547 Mon Sep 17 00:00:00 2001 From: xiaoshenxian <125880321@qq.com> Date: Thu, 22 Feb 2024 14:24:10 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=8E=BB=E6=8E=89vs=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index add57be..4460bfb 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ bin/ obj/ /packages/ riderModule.iml -/_ReSharper.Caches/ \ No newline at end of file +/_ReSharper.Caches/ +.vs/ \ No newline at end of file From ce1041f05c0b4bf376a3b4756468a3265741ac9d Mon Sep 17 00:00:00 2001 From: xiaoshenxian <125880321@qq.com> Date: Thu, 22 Feb 2024 15:25:19 +0800 Subject: [PATCH 2/4] Add a parameter to indicate whether to convert the upward Y-axis to the upward Z-axis, as the upward axis may be the Y-axis or the Z-axis after some objs are exported. --- .vs/Obj2Tiles/v17/.suo | Bin 37888 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .vs/Obj2Tiles/v17/.suo diff --git a/.vs/Obj2Tiles/v17/.suo b/.vs/Obj2Tiles/v17/.suo deleted file mode 100644 index 3a12552e2917f2e64b55e77940e1ab3f1a582c7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37888 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 WJty`3znFqx!GE>y|D_iHFaHN)rF`lD From 53f291caabd167edba078ab47e19c73c519aaec6 Mon Sep 17 00:00:00 2001 From: xiaoshenxian <125880321@qq.com> Date: Thu, 22 Feb 2024 15:25:34 +0800 Subject: [PATCH 3/4] Add a parameter to indicate whether to convert the upward Y-axis to the upward Z-axis, as the upward axis may be the Y-axis or the Z-axis after some objs are exported. --- Obj2Tiles/Options.cs | 3 +++ Obj2Tiles/Program.cs | 22 +++++++++++----------- Obj2Tiles/Stages/Model/GpsCoords.cs | 19 ++++++++++++------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/Obj2Tiles/Options.cs b/Obj2Tiles/Options.cs index 18dfc6b..afa4c9e 100644 --- a/Obj2Tiles/Options.cs +++ b/Obj2Tiles/Options.cs @@ -46,6 +46,9 @@ public sealed class Options [Option("keep-intermediate", Required = false, HelpText = "Keeps the intermediate files (do not cleanup)", Default = false)] public bool KeepIntermediateFiles { get; set; } + + [Option('t',"yuptozup", Required = false, HelpText = "Convert the upward Y-axis to the upward Z-axis, which is used in some situations where the upward axis may be the Y-axis or the Z-axis after the obj is exported.", Default = true)] + public bool YUpToZUp { get; set; } } public enum Stage diff --git a/Obj2Tiles/Program.cs b/Obj2Tiles/Program.cs index eb3d616..9ee33f1 100644 --- a/Obj2Tiles/Program.cs +++ b/Obj2Tiles/Program.cs @@ -34,13 +34,13 @@ private static async Task Run(Options opts) opts.Output = Path.GetFullPath(opts.Output); opts.Input = Path.GetFullPath(opts.Input); - + Directory.CreateDirectory(opts.Output); var pipelineId = Guid.NewGuid().ToString(); var sw = new Stopwatch(); var swg = Stopwatch.StartNew(); - + Func createTempFolder = opts.UseSystemTempFolder ? s => CreateTempFolder(s, Path.GetTempPath()) : s => CreateTempFolder(s, Path.Combine(opts.Output, ".temp")); @@ -50,7 +50,7 @@ private static async Task Run(Options opts) try { - + destFolderDecimation = opts.StopAt == Stage.Decimation ? opts.Output : createTempFolder($"{pipelineId}-obj2tiles-decimation"); @@ -82,7 +82,7 @@ private static async Task Run(Options opts) return; var gpsCoords = opts.Latitude != null && opts.Longitude != null - ? new GpsCoords(opts.Latitude.Value, opts.Longitude.Value, opts.Altitude, opts.Scale) + ? new GpsCoords(opts.Latitude.Value, opts.Longitude.Value, opts.Altitude, opts.Scale, opts.YUpToZUp) : null; Console.WriteLine(); @@ -114,7 +114,7 @@ private static async Task Run(Options opts) { Console.WriteLine( $" ?> Skipping cleanup, intermediate files are in '{tmpFolder}' with pipeline id '{pipelineId}'"); - + Console.WriteLine(" ?> You should delete this folder manually, it is only for debugging purposes"); } else @@ -137,38 +137,38 @@ private static async Task Run(Options opts) } private static bool CheckOptions(Options opts) - { + { if (string.IsNullOrWhiteSpace(opts.Input)) { Console.WriteLine(" !> Input file is required"); return false; } - + if (!File.Exists(opts.Input)) { Console.WriteLine(" !> Input file does not exist"); return false; } - + if (string.IsNullOrWhiteSpace(opts.Output)) { Console.WriteLine(" !> Output folder is required"); return false; } - + if (opts.LODs < 1) { Console.WriteLine(" !> LODs must be at least 1"); return false; } - + if (opts.Divisions < 0) { Console.WriteLine(" !> Divisions must be non-negative"); return false; } - + return true; } diff --git a/Obj2Tiles/Stages/Model/GpsCoords.cs b/Obj2Tiles/Stages/Model/GpsCoords.cs index 3713565..a7a493d 100644 --- a/Obj2Tiles/Stages/Model/GpsCoords.cs +++ b/Obj2Tiles/Stages/Model/GpsCoords.cs @@ -6,13 +6,14 @@ public class GpsCoords public double Longitude { get; set; } public double Altitude { get; set; } public double Scale { get; set; } - - public GpsCoords(double latitude, double longitude, double altitude, double scale) + public bool YUpToZUp { get; set; } + public GpsCoords(double latitude, double longitude, double altitude, double scale, bool yUpToZUp) { Latitude = latitude; Longitude = longitude; Altitude = altitude; Scale = scale; + YUpToZUp = yUpToZUp; } public GpsCoords() @@ -21,6 +22,7 @@ public GpsCoords() Longitude = 0; Altitude = 0; Scale = 1; + YUpToZUp = true; } public double[] ToEcefTransform() @@ -30,8 +32,8 @@ public double[] ToEcefTransform() var lon = Longitude * Math.PI / 180; var alt = Altitude; - var a = 6378137.0/s; - var b = 6356752.3142/s; + var a = 6378137.0 / s; + var b = 6356752.3142 / s; var f = (a - b) / a; var eSq = 2 * f - f * f; @@ -75,8 +77,11 @@ public double[] ToEcefTransform() 0, 0, 0, 1 }; - var mult = MultiplyMatrix(res, rot); - + var mult = res; + if (YUpToZUp) + { + mult = MultiplyMatrix(res, rot); + } return MultiplyMatrix(ConvertToColumnMajorOrder(mult), scale); } @@ -86,7 +91,7 @@ public double[] ToEcefTransform() 0, -1, 0, 0, 0, 0, 0, 1 }; - + public static double[] ConvertToColumnMajorOrder(double[] m) { var res = new double[16]; From d6e40f2f2f66549e4952d2da0cfb2a674c9c20dd Mon Sep 17 00:00:00 2001 From: xiaoshenxian <125880321@qq.com> Date: Thu, 22 Feb 2024 16:31:06 +0800 Subject: [PATCH 4/4] Add a parameter to indicate whether to convert the upward Y-axis to the upward Z-axis, as the upward axis may be the Y-axis or the Z-axis after some objs are exported. --- .vs/Obj2Tiles/DesignTimeBuild/.dtbcache.v2 | Bin 95247 -> 0 bytes Obj2Tiles/Options.cs | 4 ++-- Obj2Tiles/Program.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 .vs/Obj2Tiles/DesignTimeBuild/.dtbcache.v2 diff --git a/.vs/Obj2Tiles/DesignTimeBuild/.dtbcache.v2 b/.vs/Obj2Tiles/DesignTimeBuild/.dtbcache.v2 deleted file mode 100644 index 3b2a9ddf2e4437e74c7e7b1375b683e5b027b52a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95247 zcmd6Q2Yeev_P;h-k&qA)QV5+8It0fh#R+W_rw~$!orGctvb|1}$dZxdB&PS?d++^d z2OJz6aP$sGhokpib_l)xzi(z|q#emQW6$RIhtFGmBYi#Zy_wnR`}X=+BobM3qTA56 z@WAn@_MtVi=N=f@a6(%m*;Es6T;$fIQ@MB|m7N{W`Z#G z+nAf2NG)_Tt(inB7jY^po8n_fHpk1yR*o9o*j(PwFsh=ws%m6Ib9J*jYUJ3FP1Vh# zt4B4B8Pyz*SG%J}S2a~tjc%^4Dlf097&)>rvTjW}nMA6!Z3`E=*__)nKb={UOvjtD zk@ftaCTHR;?lOEm$8B~qZmQAETJR!b(beifmni+)sTet?y1Ba29TRV?sEjwc@ydAP z=w`RNX>8Nj^6JV_&E=z-s;V0rM>aK8R#n6+s>Y5QTQ#P!p?Xx+sK$7CW$9E$RWwvq zG{dRp(QZ||d}O?OWYy^E%F0pY4Wpnf-t3mUV@8%&kFFY9T~S>=wxYVaqH%1zv2tX2 zMfI5S28*&hGI&O!F_X@wn{#C|C)L%YGj7@V*49XLd@>o?bdH-%CzrZ@2It+J=w=fO zQ+0_Jw^HTC_*6XEzQ3Ev=6|$SBMk@FjH^cq3z1txCnu6_w!SHyOS!rFY}1nZ(Piaj z73CxAYnzs2>jS2g;j8*wJhRZvW$Vkz>fn;piELR-?V@<5wQQ!FQ>K(P z!3#T=X>%jXR*@CDdTRjXL5JE~DyvPmWg6WnZpzKXa|wJw&JXeH>TKwVFLWoSm!(7{-b|LQ|AX7=rkYTP6K+8P zM%JrMET0~4NN2KTQ(N%&Jc~zEmQ|EhL}KD&P$^1eEV6rU7PX;1*@QB$FH5zdAnVCp zB$KVrCYC2fx(P}*OGQ^N5?re$-O`G`$=9RE>LXI=#&oJVu`tqWL|ZD0y1gB~M7z+q z#BJIxG8Dfri)T{fD#nyo49BICE6!~jcd(7e=gE<1W$2v8)(o|K8Mg_obUd|iTq3vK)VfH&5sMNF7rCii zCf(Y;G`?-5|A-W_KHiXY$GIu`i0q?Pjx4Xa^_2hF`dJN&E9-bOp-|cML_;Q?X|Hcc zr0RJeQIGZmO-G(ADZJ7z9>Fc67J1yTj_&);-FZkz>dLoHeoKSYu%+NZ-x(@hr128{f-rAQt|)rp*3yETwBK7G3B=9GV$c_p|jf>l8MG? zZhKvNiJRJyiY1a>h4z!_);d(5wnKwnGzm3@wM}aTI^RRo!)m%IVZR%1ZLKP+s4vwAkw$9+%D^R|IOli37%kD@l)7PF zzc(a}i^9}6p{*J1u3szB!MC&^i>IT5!r&NPF1qLHvU2L4>0?=#miU7Uv^p4mrBjV< z=nYaLA0o+BrI_EGG-wEBLuBcyGGJ;;OIwaQHc`h%|Bs5@C@f8)z*>2MVcfGyOKN61 z#Yc(gQFx6VMm2W%s>-d}R<{u|xWxXhXcMeWN&Nxgs&8pcr%*FzV7`zn8=p$0b9@jZ z?jdV4vfz+aXaP-Mi>%n3tSD?C%?(}rriupE1^K`We~VS^`=q5P2#jakrt#VKlwSq6 zgca7-WXk@luo$!+-r9x?IA|3bP}kl{D;rDQOwP@Sn{iv1U=1fjQsEjxv#GZHOmUc1 zMoL5NxZo<*6GSsH$|g=e^k&^P;dfYu;dR3H_q4wqz6Y+(#9FS<_ z;~31A8gqW%Fp`vqGxYbXX`ymHxfOMGG${_XF$ySFIUtsigbh284F?v~CF5OEp$)V+ z=ucv&rkc~jgdNF*a3*{u@*nGzSjF{=erHl0?k%ixJzG|r!`fIKYM$R_Ii&qaYgJ`F zts~CQB+w6W8>V9tN-K%H5F#xFR%p#h*Vk@nX{Bflfb?18$@Nus&()>VNx#HvNO7nm z;lldPGrI70n?&kYSzRaf*fJ5f*)F7d--2Q`ey8)Md@894b&N4F6JMshnnvofVR|Li z=|jmGq`5Uz&F!gp3#M>$+EO`e#E4>?MQRK0R^!DuIh|>VqjMaeO;re;yOGXNZ<;B| zbOX&8#kNLGJc)H^%$$Y#T2deCSUISk*WMR=0Vu?RX z!^*M=nRG6h5IMdlDGzm`swwALUJs?#0#Y676j4)6V-kOyz^#ar0iliwGz0cbw2}=X z=Nn0TW0=(r+PR-DX$p1Z2TcW;JHC;|U9^yzNhgH~3(15~Z|tB6-0uV_4Ye@~DxH|Y z219)loh=?}YIDJb^&@fh z!R|A!Z;`f;@2eSZOFGj&13MOO6J>$uzd~J=3rJPQL?6lC%Z>=_{vzC$4 zuq*i76t)6Tu1zA#YjfBqY7vdf{-i(DRVQr3>?d>`NV@h5GlRLVNy}v~?T?5KCcU9H zoLnzbQ2y4Y zaduE2N>wSrZdk91Ct-R8U_-Jughd9JvBMkXF84~IqsLT(3 zyWd9YLY;w1b^5LL57HcN_vY_??t%l*azWL)lhlSfww4Z0#j$TZ<)W$^&+ofP{Ryk2 zp6U91yYv~k^)Fat-9vV*l6nBM@DL^*Sn=ns_mSpM$KtX;rsMfc+2Gz!TElJV{n|HE zj+S}(KS+AR9ai{yQSbOc>ipV^^$;mvHH}q{(jICrptRQ{^t%f=@crm=js$hX0ImRt|D?y1YV{SLyN^E|G)7+(RmD=qx;OU7Pjq(f^VW{}**uZ>?S@ zLyie`_)b*6`l@ZPFL&C`su<&f{_W*0^5- z-X+bU_LwC!yNf;K0Skyt+|8B;}zF*Zg6+SYpJ=t(c8{OnO5d zocekLN6SAYt)b3Qcw7k87E+*$*%W6%IQ==P4|TgEsGi?iUy{;LS9OC*_37x>q(9VK zJD@*H+dVwHBjLm&@Q)>OrE1u_3Mv(zP;X1dGeyTvyzujP5f1Y3zP)BqJe6|gvHfpJ zbGVtTH1n$b9Vra;yjY!5I15h)Ci$T;aqs>>y2HJVlf}FSF5VB;VBA#tvp6*L)|3D!#7x)<~xvnpWKslhTAYR=^K7J;zPMSmA^PCq? zwz+j}t@0duAJQ1=K|0y@T75}Xs5OXG(LuVoxkOT(o#{tvLtW$#4Bh*Oo}p?rX#lAT zbw)<2@~3DAlD<%zJ<=z(>I(O*29w@UA3`L(!PQIN(``hGLmixx;@u~v8?kOJ&s+^9 zrJ>#?Txm-(sCL*Y$z-UO`7B%b%}8;mLq_iJYy_MWJ=qqdFw_nIyh5#Pw<6WyoO$;f zAqwZg-9*&9CW_&?EyBQYFs>CL_2|5|wGCOZ=7?r&(BfIXg{g6)Dk`nv_|ht)OF3OA z(xo+$E~Du(hA!1~8HWo(_N80#s3RiBY!}&fM7k|EF5R%WGx6XmX>qS4AK!QI4Dt@7 zvEK+0fN~rnPEi0lYbW})FOLiemnmrAc9uim^%>EYYp#Zl*0!8ALHuo#i~W$6L<)~m zCmOd!3_XgHhtWJeP&cjuA=<2oAX<}&T|WYQ^*nxNBad^~8Q1(XHF(USmIq3m)Re$s zEj&Yo$R1@b|A$D-+J#gcYw0>VJigwE$ehyLY<&X-X{{HUM5IbY<4n3s-QP$HJvOv;{U)R9A6wSBb$nrVrHjJ>0AgyRZ@R7 zc<3-|Hkq;pp9o=JHH&b3k+r6{=@u6O>gp$?msd{2SJoV21-`H1-`COi{S|*Qg*HG6 z1JpM&5ciWOp?$~yJTge}5ELTk`pV`}qWVul-|qC&5bdvMR7Qqdd*WBCo+um5!1^+6 zoo4H&CX;QrL-`J>SQrFzA0iFTlO&>4_NCwY%WtyvbEZt7uNx@wCi-n;C)yr-0Zc9V5eS8k9rwwhiQVs)}Nq1#YDzjuT zO%)$g{yBf<5Sj-SHfGz7n>n{)bonT25hb^oe{6VeYh4;^0B#M1Tb;$5xPsWM8~Uso zj3w|ukRNE)H#r;Gv{WM0T;=jwU~U^q7xxQiJS!4YN1Pt zF0FLgAD76c|Er@RleXz(2SZ#uR?P!T`|)?1#Gxf#195cCk0YJW8}uxGALK4~twYJK z!|8G)U5+9P_eMkxEG`$vSMFT%KwV%;L{lvl;WSdG_ZllHrq1_B$CLRd(&c3GVPOb9 zl!}~col4qz``JZzUPH*5smO<~EX#OogTl5TjJ&`&ttg_Ybsgo!HY>4BYb&f9=nvcw zGEA6P82Z$@3A(JC>2eEcooh^MVcgTm?#7bEEhIx_Q8yl$iIfWiV2cx(9mhCcS!`oU zuSrWUlyIq$jaE_{$cmNyj%Jicb~e)%`MVpz=&F&8R??i4{=JNqr?0;t)~a zNNOZyURfX%s1}UWdWt;EgshbIm2}0=kYaOvvVRxT7%Ld~)OvnZcvvFVsr51xTd$Dz zmXPx|c(jM->R;)RhZ`FE>k~iLYQFBocV%2(wv>5M> zxfZ$Nu4UXacqAygXVwhU*Q-&FD5(2tZ0L@zd z%oPp2tq(|T+Vp)|sFuR__$wSTc9ZonX*D-@E0M7nSj*s~)+eOReC1c!smCL=J|l(Q ze2r1TQbP&%=pa)E5lF2sNV~b2XDRJ63aIrJbXguLG(N;DtV0xj(=DjA-;%~q>kn!4 z&s$pGk+xdX_Xyp6KTyiXdoLMhlQjH98k$YpE;R&4P1Y}@tkJl#;^3XuZ=`8o)0)JC zIr(^<)*nz~{YkovSMOlV%0Qe>E7AiRjSrrJ8mV&hAU#Rbxfs+FJQ-%$q|$irjWBgI z=qwJvX{|>3jL(rYeUz8INRjbbil(R_8X)QHO*)NtY?{u3pqkbiq;Q_;3Im1YO+QN9 z_)r9i7vx&eGgsDHq}BMn7Su}K4J19rTaloiK!8kZFljV?cLz0U9l#J$8OGgRP=p0x zFs*e-pYh%eE|v&-X{}Gn7KKpxO9s2NHX?Ol+}s@mxwM8tp*4)O)`#Gv3T|m_Mk>On zmmP+(w6-AEwj#a8C-U;}owW_=7*0B9`@!hKKG&f=LtvGWD&q|oS5G-6~RVm(?5NR9E)vhSEI zse+7*L!Z@1N<+DY;hR)S^}U%CnQzYv;>TEvNQL=ZN~$Ob=x8mbyi1ZkhzF} z)`6tf_)>K1A!T>!$_a;RrmsZg|Qf|BcRPXI&2rUamcZx&-kid zfs4gq7p>z-r}0*;RHQ}g#E{$*2l%oWYzb5lT+uouWcTvVrCFzus;u!A&5s~OE6yE6 zP_)h<&AC;kxgchubrz{MzNaK3h*2AU4m4Qjks9N3DXB)=HMoG3neR3Hf-H!LXkA2_ zj1M-YTY3;e%FRnDH!ml(2ZvQ(bhW-YTI@sXN-`p}A`M15w5}m##>b&Dqo=FjhSqhY z$b56^*PX(6hSuLmmH7_1WW+kEIyXX}bu%dqt*MdEf{M6_!N`Tyt)$xcaZ6c-LDgz; z>h@LWuQnREgH)Rz4U{ZjdP0@T_@AWH_%f1OnJC^6yPFgmZ)=speB43no={3Muc_m3 zgVuealw@hueuP2m{#B_{L>9CjB%Q|3CYSb81<;~u`!Ffq&vb`YT5&;eK1#&bW=FfVTlo{_{N+>G`4`Mw> zN{#p7N+|~g!ThWjNT2cHiN7Qqh~HGrx#a3|!GX(HNRjbDbRc3J&ifQZ>9bxV zjmFoagBq#+zfO9LFUtk>Xmg)8Nu}{yE}&9{-!u4ptbc5j>rrF3x5KL#r6cWG?}U?k zD(YKda6RiiQfBTEW0{3Y8P&iKNQd!LDEVk+!4P`ZN2Jbtg;y>WN6oW7flBK$(rbJa zns-x0%d@^DO~!i}U6XcGf4xewHE@o@BbCNGngTyn7(DA+QWaty6-s5~JL@}A7iL|N z!S1XdNR#o6L7X)Y#J974A~oil{6aM#Q*t%Irqqp35h!(a4sJD4VZ5Co6?)t`s~4#<{-g`3 z3a&j-zuTL186RPiu0RAbYYoz4ye@M+!GLnsnxW+$w8;z7_Kx{Hs~GlF~(!8yTE0GWnD_wZxlHgKRz`H{P@SDtT> z3IcYOjCeLRg}{&nq|N+9CTH;Kc6yC^$)t8H%H^hXF6HLxI~Ce15~Fx=BO{yox@0(~ zlB#0Oh==D!Y74TUc2PXjI((>%K1Ye+|KUSx5YVwLTlPBpR z!1B&iRCL*!?svz<-spyMzxF8UNP!Q$Ji1gO-Cr?XxewH8?VUGY#P`bYE#!UZdZh}Z z7<4;%G3=%LA>)*p@S^)8{o;ZUUPvps57T7Sv%JkCJADI;851AXIBImo*s76kdG%NW zvDl=|(kgD_Ox)u#gj(Lr$})bZ{_j?&v2jd8MOAZiV^d{QQ`4vl0|QxUW`SYc()qQC z<EqJSr)=*YDtZ0SD}oNabksKRJ_bnVNH34vN(I zOQ!iqX!*?P`rXt0#Sxh~MdtA=+RgvkkDt~BlZ(o;`%4s>$px|9BK!LGmX5~O1@ntK z!S0`T(9ADwD$o77#om~3q5H?gSKyZK z3lV6-o9>^DT6x)MCUfr^OFM3M$lv{AiYs?4Z!Pz!xwKD#7=$LutNYLLtlX`D!Q8X? z%CmylgLzjv-7FLha=O2nP~=L1h1_;Ivh?E_=B@7fVA%M`vLM!CWTwjNjGH&M^I5FV zzPi6YUzEinY-2=@8hJ!QtZucWQ+b2Cp1a0JjRp4c8X-qo{Cm0tLO14J=z5+TA8C~~ zm3t%W3sFqiZoIy5+Y3kQg;DKPoXNcDU9UODN9!dm<+;9>f0q_Acpys?ewbV2>Bvg% zgY2&YKB$O}BGh0P+$oxf8}F}HW-#~6E#WsU_!h+A?1E!Oy;t|2Zq=IBLdP_FxnFyi z@C#cd6y?)|KjxN5JGPVip;};7+X~}{nsCK@3tZAv?oCSxZ|TfuiQuFrTDEbfXs`l5&NnP5pvxi4~+Imj^Kgz;78po!dixelxSl#ex=cckk* zvhj7;4z1-r$=QX*@`E_%9qN4lr&llIvy0NEa&M;lcmLE`U9nsrbaX#(wRWGwavE>Q z88`l!uRCRdC+kg^Z+ynR5_`E{vfl{sOn73v-w0U9ZI^v`@D~*z+k_X!`|u8I<^ITi zFv!Ud8BI83ydUhySng5Z{0UyViB?ztw94q@=wCjMoz{w(AlSYE`wct}sTBb? zy}(GG^*h52%OPLn$c@wFQ{W~XF+Oq&SjfE?PhLzQFXZf!bJV*6Ot@iub{RC0`%yzK z%=RmlXy&_MdeQP%_g|2pRi*q35+XBvYiGK-ys4d^`s(wo?mxw>nF_loYgJ=U|E4Fj z^Tu|5TB{ptyq%ZEaf{^*slKF;C|xkSs5%(GAp;h2+hxNjf06HRFkyc8pA#=pMW{+h zBa7+_y$r&H<)PFU`KAgrKBqhnzFVRTwim5F8y}w+o5}NC4qo}sMK7%|;fe8aYiU!9 zY7xB=!-V~z)FS!14%LB@Q)ZV6jCY_x6M25i4J7(WzO}Qgkp?Y=4Ze)-M(-Bsf(u3cRVWR9p^@B;Ni>F>Ouoo-np8&q+bO!>Mo|lD{G4Wi zecXd7Ji6dRQBj04bWj#@FQ$?gyOI}jJ(m0gM}O@~7yKzI6XWZ# z9oWh}n?_C*woq^ir_q+TcfpgQk_n}Sk_K|~XHdb+Bp>8U=8`JegJ6FGk#l%NRTFN^qqL28BLzls z59X5=xyXoE7A4>QW5S)?Ns;jlq>e1+zU@IO(l>t8OEZ*vvNvgxC+c-V;meUsxU~-{Gk&aoWma<^7m!-H)337&-o#|W z#eGSa@$LSV7|lJ5L#x$5s^yrV@GsP>pA0x?AilP?>{HTG?o}gs)kI#&psYot$@sCX4o&9X zC7{zKn~{&62M<@>M>V;g_ljmyAD{A!{7X4co}_rDVB0 ze`$J^g*xdnUfbqo z(yjgytC7duj4#x6U@Q0R0P^fW@+_yd44P+UekuiT#WPWS-G8ZH2W`avHlO={5cz*F z`LEw|NC2tuAc&)F?i)A5<2sIwU zzvIZiz^VoIHs%nV+O}WHR^eWazX` zA;t2DiQ2_B{n(9lDycDk&ZM-x+_}@pxzkCj991f^czLFQQZv6Utl7vtIfFboljom5 z_R6zLzns&AYsPQ5|7A4y^(^xBZ1Pp!b*29dZv!>qr12ZBLubp59EvaYNzgg;~G*j!$(uA+K%HPtIQr&WKzf&UI)69r{_PFvDa?$tHq z)wSf6Ty?3XAJeC@RZTe)X;L$oeP9`anxi{A%ki6iHFj7EVi0Y%BNdDe~-T z@=Vn;^$KYD3hgd9Ra8L6$2|G>8%r~}KmQ?ro+E!$J(K=)!HuG_F<;N5b=>+F$@-Vb zdKot%?`Hn}-zFR}9x|bnq1>le$fsAyC)G+TpMx(MH{qB0R=NXYxo@wLZ~rCVvgzqYdL`&zerae?Gxr&(FhBMwvX%SuIh0vn(B(_Id_}tD zV;J+|$u_sHtu#YGJ`=x1?e{{Q3i*t(J2m(|FZp5%*sodD6WB$$XN6Z;!GBW3(`0!3DGZ+eqA zeaIWRx<|a-C#DPDxv~~1lg%pUv?NVBGmz3Z-nMFn za(4!kJ3~laVLby=Ry8BTz(^?dEMO(~W?k}Teey=GwQ!&5&A<8PtLrP`#@AYub=>+5 z$@-1SdinfW{&$o2O2qi{XC>_99&JL-%=CN23Gu8p)a%r1@AWMsYg0&WKF z=2P61n~CS#+P2o#bSCFE)x|Rl-Q46%yv1FX&MX<9OvJO+=2Tc)k|}*tZmuz%apSG6 zc&B!xZ`sUAbwg|L#Zdmw!e1+_ZTMdlQYx%%wN&t;>%vs{Kl7>J&E3IY@z26vE3Gn3 zM`c-MAq4|$YlKF@cR@-(M-^1A1|6fo>cwpbvMMMI`WiQsRYm_0ztKNO;h)wRx{RaC z_H@~aE<4j@0$pn8GMO$@=&~zarqN|4U1rf`4la?t*y&!1;uxRJ;zj0>o_M|`(U5c_ zy{0yy>%cfRGH_~kYD;S}(U{03+b6osh!ffr=~IUi$&Js>&Eg-c%}mdaXHt>=voeW= ziBvpE?*ONF*G2}((xx^7yMe841}XOR=UI`yQ&Ww}wkD~(@1*60|Lm84<;-+(V1kVz>88_AF&T7lGw!z=5iv-#utD{=am`D+RBWq1+ zX>gnTX8_2eY@`?cz>VuA-;5qXQv0JnphTu=zhg<8CBBaKLq36l+Alm$bb5guQ?t|DcHs=K4b8l8gh!+}-nfLj zGbr$t%)-8^{o#cQ>$B0v`l97;*^YP{?7B!y%L|rFjJ8NXSu;qamc@7|5}Z;~-?y@sJZBy6zM4U7>#R z<0O1{GUOBp{rgmWQW~d0R>!}|r;hxQX{`y~>EN9KITLagdkW&vo&+K0eo9;cY;K4T--| z%?kYIZA{k{UXK;t&=uY$-mufH-=6U{b-c|SZ*#}n!tu6rysaH?8^_z$@rFBInd6Oc zymH5@aJ(wV8|iqX9d8H6+tKlMc09-N#yeh(<4tnBT^w(!<4tqC8ICv0@pf~(TF0B~ zc=H`^PsgiwyakRIcf3Z&a~*G?<0Tw#iQ~06UfS{YbG)qMwK?80$J^iW4s^VO9q&-b zJKXV(biAV-?^wq>-tkU!yptX8RL48r@y>F*a~$tH$GgDsE^@p}9Pcv6yTb9VcD!pG z?^?&Z-tlg9yqg{G?~ZqyF z<2~(o&pO_7j`zIdz2JB+I^Ii;_p;-?;&`t*-fNEcU&njh@!oX2w;k_Y$9v!LK6Jc~ z9q&`e``q!qbiA(}&vU$Q9q&8G`@!*ka=c$0?{~-h(_xn7uqY%3=?PgK(g)HP(ht%f zG5|6VG8nQEWGG}9WHZPXkgXuwK!!ugAmxxs$VkX&$QVd9WE^A%$W9OkG66CXG8wW9 zWLL;^$V|v=$Q(!=WFBO9$exgT$UcyLAq|iwNHb&+WHBTOX@R65t&sg82S5&l91J-W zayaBj$Wf4EA;&{bgq#dH6>>V{49HoKb0FtJ&V!r}xe#(O5Fht~@!O^BA#3sqTvo8h2|Nz)6oIDzo+0oI z!1Dy22Y8vl%K)zscm?1!0BK*z6JP>z;^&Y5cmP$CjvhK{6gRtfZquG2Ji=g zKLGwD@Fzf|2SB993f6-_4*;8h4X_%4)c|@C=mpT5KyQFG2&@6nk3c_wwFs;QFp$7N zfWZU?0}LTB1YlhP>jJD#V10m%2y6r}l)zAcVFZQ&Y(`)+fGr4Y0k9Q;tpK(munoX) z0>c5y2$TVo6DS9$Bv1)3lE6rS(F8^VR1>HM7)M|nzzzg<0N9zp&H&>Hj0c!VU?RX2 z0#g8{5||1wjleX383bkk%px!gU^fE00n`$x1(-`os>xB%cH0v7>XO5jp}%L!Z#a3z5&0j?o%4Zw8-t^@cRfxiLVNZ>|* zn+e+mSsF3QTHY($imBLRF>5oMK8RuyFbde&xw-jwwl+D&@=s*SS9YxzM%I4@abgzQ;uAxCQNFMcX6F_S9+U)&=boMcXUN>UA1A zeL?$7(e{qAeRLXz1cLU3qAiHBeRUcJ41)HRqQ#@EL8oCjA!weWHAY#JPQzeB(7shP zH_DoI8ipc*_MM_FjIu>K4FeTH`$5qXQMOp8VHhK5KPlRhC`;-z3~~hR7e#A{vXoB4 z5J=E|Q?zuHwdynskOb`yMcXgRGCB>zCqesD(XvsN(`gu730kCwY#!R8Y^hF*^zdmt z6m40QE!Sy1B+XW|_9)w5r`eLWnxY*LWe4iC)g-N#q8$`v2kW$6lGa<%4vDfuby{yp zTSL(fi?YLY+8UD9PtlHuvLkg`KS^6l(T<9;qjegFnj(7#D%vqocC1drKvd8ME81~U zcDzm-ENMd&?Sv>hQKw-LD^gom(N2o8lXcpNE_1MQR%<+G$aCx=zFJ zSkQ(l+8I%HrcN6wX~PultSCEMrwx;|%@pmNC_7iDZ6;}3DB5{ZcD_#ALejQUvU7e(2{I&B+C8?I=VMA@Y}ZMdYBDcWUGcDYW&bU@@=xuRVWWmoDnOcn&K zQqiu8va59(rV@fSQqiu7vTJo3CK`e^TG4KdvYT}prXhk>t!TGJ+3h+FlN3Q4r)YOZ z*#%$C26}U+UrsFhEBtDPo!3>Xm3W@TRIJsK|!0VXm3Z^J34Kyr0t<-??%~s zI&BY0+e^{jkFpPR8m5^->E4R=VU&HO(=Z7Yv;~Uxag=?c(=bI9w78;u8fBm9G)!Ox ztx?fFkFqax8m6~`)~sk>M%h<7ty$6*DcUzt=IOLWlD1gURz%r%I&HC}B^B+*DEmpL zB_%DTXun3;Z#oT=Zs9_!qWuwNf9f<$$ptN=XgzEewY7-_ChUUNrf93#tfx+EleA@u z*4t)%bQ&i6BDHo!>ua-qI;~yO4pg+YY&KA*VWB{zc8H=4w%HJ!hGhgnJ515mwb}YQ z4T}tdc7&pBXtRxV8kQgg?Px{Y#Aci7w4){MSVi01W?SmCVFACGA8- zE3?@Mopz$6ouX(JHmlNUr%2jqiZ;q-V{{spO@yasDB3uiZLia?s3K@*DcVjp+gYcb zC28j<+60@`=rkRKGi^3Yr(vl_&@NT9 zIX0`+X_rdc<%%}XX7hF0<&t)#qU~w3y>!}@l6H-v?PIeAIt@!q!nW%at-)rEIt>d@ zg7!B>Yqr@!ordKpLAz1W7TauzPQ&7rpxvx!DVwEr+Rc)7tDUl(eT6?RuO2O{YCAY0oO!4K}+`r(tnY zS6sQ_x;fw7YHgFP(-(Q9*l6 z(eAU^zjYdxOa<+AMSIX@59u^4s0!MfiuS0@9@A-9ZWXk5741ozJ*Cs$m9+O2?OB`s zN2k3nX&)-u3pRUEr+p}CA1m4`HhWd4eJp98D%$HddqbyvDrui9+S@jJN2h%*X7PM~^?Q@%bsnfoZG^S`@+l=WnEKQ5lRw&vEn|-g- zuy8GC-z(aWHv3tpeJ^Q0D%!6$`(3AD(OabUv!eZJGb^SI%zl=%UllDHV=<{k+tZ6$lA1Tvfg-aD{nhO zl@o<>ZknuTsGk-q_QvGrVy)G%^mH?eV!iK6k?BPAj|#bckdkr8K#Q{=~zM z41KJ*!ox1gbZ;j1P9FAVJKh|}t8=`0j<>tx?csQPIo{rmw~yoP>v#>0*W`H3jUbH)%Q@as$6M}r?T&YV;~nI9hdAD0j(3FP9p!k(INouNcY@=c!;D z@$PWEe>&dXj(4x){oC;#aJ)wx?=i=F!ttJRyk{KmKaTf?OFjj`xA%edKtb zINoQD_l4tq<#^vX9&@}Ej`zLe{pffgN%SwK&l|4AY&ohLw1Dh z3>gopflPu-flP%=gUo=;g6syVh0KM_hwK5_3$iz40VED-gt(A}kOX82Bn{aQl7VC) zIY=91DP$RBIiwwO5abZZVUQyrM?;Q*90xf8auVbe$Z3!>A!kD_fLsK*1ac|la>$jC zt0C7wu7}(RxgBx`b`A_}iofSm~J1mF;G z045Na08m4q24E6_NdS`xOa|D6z%Bs064(`BI)Ui`GYQNDm`z|dz#IZ|0O|V z1vs3*;Q&VxI1=C}0!INHL*N*I;|LrFZ~}o708S!s62Qp>P6jxYz^MSI6F42Lml3!O;0gj)09-}jDuAmATn%t7folP- zCvZK$4FqlgxQW0`0Jjjh1>o-l{tj>(f!hH7LEs+%cM`Z0;4T7p0sM==zX0wfa4*2W z3H%%20Rj&IJVf9jfJX>C0`M4t#{ixn@C3k91fBwThQKob{~_=nfaeK35AY&^7Xe-- z@G`)w1YQOBFMz# z%C^BNlrij83xHim|D->-KFaXy_jlqesH{&;J1UP!S)Evd59ilm0N1)6gUF z|Ij1J^qz^bXLTC-D?$5I(Vma87jznWGeP@Y(O!mXk4*jm6 z{j6xV&0;zYy|SSFs%X7zwz^J3pDk#=E7}@1TT`c@M;A1UW{14^``c`QPP63fFsf*S zY__&ei%MEd(bloqdO9s8X+0Hf1DkE6(|StU>WVhhX2W#a>XOz+(KfT$7CNnur1e#_ zt!%cnPU|aaYbx4sn{B7l)|9mVidJs3N}bkU(grBnNSlq;X&C*8QW&IY)ixWe(*{Y} z+KRS=&34pjYfIWXissmCyiQw3($-V7i8h<0)7F!;4HRt`n@!be7?TMXHdM6fHk+Z- zHk7oD6>YZ7cGGDX&xzDFQM5Xn&DCj}NZO`~w!6*t&}o}W+UAN@Z?nC1+UAnBrK0U? zv$#&%Qqs0ov?iOmI&Eu7+g8yQ*({;cww1K)6fJ497M-@8q>WItR-5go(=dJ&`BtH5 zIh(cVG>mQqtxD0B+pJxuVeBhtqZI7`n;oRnFftajF^YDG%?{IP7&i;rSVcSBW=HBY zjH(4~dqq3iX2<9>jJXAEM@2i{W+&*h9VKliMLXGMr|7huB+XH@(`|N!PQz$kD4n2a zXWQ%?orbZ#pw%ea`8K;ir`1T>Bt^T}W|!!+Ns=~M(Jr&u6*>*G2%&TrMZ3~wSLrm& zF$8T_MZ4B!*XcCOKm={NqTOP%zw0#2PXukIqTOz@f9SNCk~Uk>{%NzjblPl5o1Hm z(=aO*w49=?7GphiT29iIDq61?TV1Cum9*uGwnmKg)oIHmZGT1UA7g9jwEZRR07V-V zV}o@X=IX+QgA{F@7+Y7T9VBT7E7}GzwxLctSkewvw4pJ!iB7{RfKYn4qHPvqo9i^J z5eV9mindjZZLQO=f*@!|DcZI%ww+EpO45!|w6Yj0*J;N{+Hs0j8DmvC?Knw0LD5FX z*chF5f~1|KXyamRd!2TYq@Ap2JH?oz(@vJOQx&Zy#wO~tQzh+mMcXCDcGYQEF%kK8 zrlQS`v09yWrlg&%XnVxiUOMe;Njq23_KvZAblSO+cD|x5h_QWj+WC@pp`yiOtU;$? z9Y?ruv7$A`Sd&h>Skf+0G&jbYbsE-yL~55Q+QJxHq|+{wv?~-X5o3#W+7*&^m7*;{ z_UbLtRg!kKqRkV>RRS#%)}DlI*DBhc;mG^|?*+6{{4A6E&` zu&O0!Hz``PIIa?)-6UzZDB5CiTqQueMbiGRXen`AB|yV^nNWJ0qGiN!l>iN^X@d3- zMO!M4s|09RYZJ6P6>WcUTqQumN}QnGrDz9><0=6f*69T8Uy9}*R|(LtiYI9ID%!E) zxJrO_ucZB3(M}Y{RRT1u0E*NeP_$FUag_k=0ZDsE(asddRRXk!B<&GJJ69Z63D6#q zw8s?fLUCLrKzmHmo=~()#c`DY?FmVHO3|(s$5jHfrzGteMY~=cR|(Lbk+lCP+705k zN`QtHPmyoWE80!sxJrPA^-w{3QPFM{$5jF}tduag_k=J4yRN(fs2o0oo6e_LHLd$5jHfpCs)UMe~oV1ZclV+HZ>H zA6E&`utqOj_(ReB<0=8#ACeZK6A*me(m$>epkaMqq}D^x{NpMC8dm=W%~mx3xJrPA zy#Ya6P0{@0DghdH4g{^2qWQ;F0yOL^2wHDN^N*_pXuTzE4Mp>hs|0A+lMtz`sc8Oj zl>iMp7J}Aa(fs2o0UGu*1Z{w#`NvfPH0*W=+8{;qkE;Y|*b5P~wH3`jt`eYOr$o@q H99Q{&MVDk~ diff --git a/Obj2Tiles/Options.cs b/Obj2Tiles/Options.cs index afa4c9e..926a274 100644 --- a/Obj2Tiles/Options.cs +++ b/Obj2Tiles/Options.cs @@ -47,8 +47,8 @@ public sealed class Options [Option("keep-intermediate", Required = false, HelpText = "Keeps the intermediate files (do not cleanup)", Default = false)] public bool KeepIntermediateFiles { get; set; } - [Option('t',"yuptozup", Required = false, HelpText = "Convert the upward Y-axis to the upward Z-axis, which is used in some situations where the upward axis may be the Y-axis or the Z-axis after the obj is exported.", Default = true)] - public bool YUpToZUp { get; set; } + [Option('t', "y-up-to-z-up", Required = true, HelpText = "Convert the upward Y-axis to the upward Z-axis, which is used in some situations where the upward axis may be the Y-axis or the Z-axis after the obj is exported.", Default = true)] + public bool? YUpToZUp { get; set; } } public enum Stage diff --git a/Obj2Tiles/Program.cs b/Obj2Tiles/Program.cs index 9ee33f1..2834a25 100644 --- a/Obj2Tiles/Program.cs +++ b/Obj2Tiles/Program.cs @@ -82,7 +82,7 @@ private static async Task Run(Options opts) return; var gpsCoords = opts.Latitude != null && opts.Longitude != null - ? new GpsCoords(opts.Latitude.Value, opts.Longitude.Value, opts.Altitude, opts.Scale, opts.YUpToZUp) + ? new GpsCoords(opts.Latitude.Value, opts.Longitude.Value, opts.Altitude, opts.Scale, opts.YUpToZUp == true) : null; Console.WriteLine();