1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
// Copyright (c) 2015-2020 Geometry Factory // All rights reserved. // // This file is part of CGAL (www.cgal.org) // // $URL: https://github.com/CGAL/cgal/blob/v6.1/Stream_support/include/CGAL/IO/OBJ.h $ // $Id: include/CGAL/IO/OBJ.h b26b07a1242 $ // SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Lutz Kettner // Andreas Fabri // Maxime Gimeno #ifndef CGAL_IO_OBJ_H #define CGAL_IO_OBJ_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace CGAL { //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// // Read namespace IO { namespace internal { template bool read_OBJ(std::istream& is, PointRange& points, PolygonRange& polygons, VertexNormalOutputIterator, VertexTextureOutputIterator, const bool verbose = false) { if(!is.good()) { if(verbose) std::cerr<<"File doesn't exist."<::type Point; set_ascii_mode(is); // obj is ASCII only int mini(1), maxi(-1); std::string s; Point p; std::string line; bool tex_found(false), norm_found(false); while(getline(is, line)) { // get last non-whitespace, non-null character auto last = std::find_if(line.rbegin(), line.rend(), [](char c) { return c != '\0' && !std::isspace(c); }); if(last == line.rend()) continue; // line is empty or only whitespace // keep reading lines as long as the last non-whitespace, non-null character is a backslash while(last != line.rend() && *last == '\\') { // remove everything from the backslash (included) line = line.substr(0, line.size() - (last - line.rbegin()) - 1); std::string next_line; if(!getline(is, next_line)) break; line += next_line; last = std::find_if(line.rbegin(), line.rend(), [](char c) { return c != '\0' && !std::isspace(c); }); } CGAL_assertion(!line.empty()); std::istringstream iss(line); if(!(iss >> s)) continue; if(s == "v") { if(!(iss >> p)) { if(verbose) std::cerr << "error while reading OBJ vertex." << std::endl; return false; } points.push_back(p); } else if(s == "vt") { tex_found = true; } else if(s == "vn") { norm_found = true; } else if(s == "f") { int i; polygons.emplace_back(); while(iss >> i) { if(i < 1) { const std::size_t n = polygons.back().size(); ::CGAL::internal::resize(polygons.back(), n + 1); polygons.back()[n] = static_cast(points.size()) + i; // negative indices are relative references if(i < mini) mini = i; } else { const std::size_t n = polygons.back().size(); ::CGAL::internal::resize(polygons.back(), n + 1); polygons.back()[n] = i - 1; if(i-1 > maxi) maxi = i-1; } // the format can be "f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ..." and we only read vertex ids for now, // so skip to the next vertex, but be tolerant about which whitespace is used if (!std::isspace(iss.peek())) { std::string ignoreme; iss >> ignoreme; } } if(iss.bad()) { if(verbose) std::cerr << "error while reading OBJ face." << std::endl; return false; } } else if(s.front() == '#') { // this is a commented line, ignored } else if(s == "vp" || // Display s == "bevel" || s == "lod" || s == "ctech" || s == "c_interp" || s == "usemap" || s == "usemtl" || s == "stech" || s == "d_interp" || s == "mtllib" || s == "shadow_obj" || s == "trace_obj" || // groups s == "o" || s == "g" || s == "s" || // Free s == "p" || s == "cstype" || s == "deg" || s == "step" || s == "bmat" || s == "con" || s == "curv" || s == "curv2" || s == "surf" || s == "parm" || s == "trim" || s == "hole" || s == "scrv" || s == "sp" || s == "end" || s == "con" || s == "surf_1" || s == "q0_1" || s == "q1_1" || s == "curv2d_1" || s == "surf_2" || s == "q0_2" || s == "q1_2" || s == "curv2d_2" || // superseded statements s == "bsp" || s == "bzp" || s == "cdc" || s == "cdp" || s == "res") { // valid, but unsupported } else { if(verbose) std::cerr << "Error: unrecognized line: " << s << std::endl; return false; } } if(norm_found && verbose) std::cout << "NOTE: normals were found in this file, but were discarded." << std::endl; if(tex_found && verbose) std::cout << "NOTE: textures were found in this file, but were discarded." << std::endl; if(points.empty() || polygons.empty()) { if(verbose) std::cerr << "warning: empty file?" << std::endl; return false; } if(maxi > static_cast(points.size()) || mini < -static_cast(points.size())) { if(verbose) std::cerr << "error: invalid face index" << std::endl; return false; } return !is.bad(); } } // namespace internal /// \ingroup PkgStreamSupportIoFuncsOBJ /// /// \brief reads the content of `is` into `points` and `polygons`, using the \ref IOStreamOBJ. /// /// \attention The polygon soup is not cleared, and the data from the stream are appended. /// /// \tparam PointRange a model of the concepts `RandomAccessContainer` and `BackInsertionSequence` /// whose value type is the point type /// \tparam PolygonRange a model of the concepts `SequenceContainer` and `BackInsertionSequence` /// whose `value_type` is itself a model of the concepts `SequenceContainer` /// and `BackInsertionSequence` whose `value_type` is an unsigned integer type /// convertible to `std::size_t` /// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param is the input stream /// \param points points of the soup of polygons /// \param polygons a range of polygons. Each element in it describes a polygon /// using the indices of the points in `points`. /// \param np optional \ref bgl_namedparameters "Named Parameters" described below /// /// \cgalNamedParamsBegin /// \cgalParamNBegin{verbose} /// \cgalParamDescription{indicates whether output warnings and error messages should be printed or not.} /// \cgalParamType{Boolean} /// \cgalParamDefault{`false`} /// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \returns `true` if the reading was successful, `false` otherwise. template bool read_OBJ(std::istream& is, PointRange& points, PolygonRange& polygons, const CGAL_NP_CLASS& np = parameters::default_values() #ifndef DOXYGEN_RUNNING , std::enable_if_t::value>* = nullptr #endif ) { const bool verbose = parameters::choose_parameter(parameters::get_parameter(np, internal_np::verbose), false); return internal::read_OBJ(is, points, polygons, CGAL::Emptyset_iterator(), CGAL::Emptyset_iterator(), verbose); } /// \ingroup PkgStreamSupportIoFuncsOBJ /// /// \brief reads the content of the file `fname` into `points` and `polygons`, using the \ref IOStreamOBJ. /// /// \attention The polygon soup is not cleared, and the data from the file are appended. /// /// \tparam PointRange a model of the concept `RandomAccessContainer` whose value type is the point type. /// \tparam PolygonRange a model of the concepts `SequenceContainer` and `BackInsertionSequence` /// whose `value_type` is itself a model of the concept `SequenceContainer` /// and `BackInsertionSequence` whose `value_type` is an unsigned integer type /// convertible to `std::size_t` /// \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" /// /// \param fname the path to the input file /// \param points points of the soup of polygons /// \param polygons a range of polygons. Each element in it describes a polygon /// using the indices of the points in `points`. /// \param np optional \ref bgl_namedparameters "Named Parameters" described below /// /// \cgalNamedParamsBegin /// \cgalParamNBegin{verbose} /// \cgalParamDescription{indicates whether output warnings and error messages should be printed or not.} /// \cgalParamType{Boolean} /// \cgalParamDefault{`false`} /// \cgalParamNEnd /// \cgalNamedParamsEnd /// /// \returns `true` if the reading was successful, `false` otherwise. template bool read_OBJ(const std::string& fname, PointRange& points, PolygonRange& polygons, const CGAL_NP_CLASS& np = parameters::default_values() #ifndef DOXYGEN_RUNNING , std::enable_if_t::value>* = nullptr #endif ) { std::ifstream is(fname); CGAL::IO::set_mode(is, CGAL::IO::ASCII); return read_OBJ(is, points, polygons, np); } //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// // Write /*! * \ingroup PkgStreamSupportIoFuncsOBJ * * \brief writes the content of `points` and `polygons` in `os`, using the \ref IOStreamOBJ. * * \tparam PointRange a model of the concept `RandomAccessContainer` whose value type is the point type * \tparam PolygonRange a model of the concept `SequenceContainer` * whose `value_type` is itself a model of the concept `SequenceContainer` * whose `value_type` is an unsigned integer type convertible to `std::size_t` * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param os the output stream * \param points points of the soup of polygons * \param polygons a range of polygons. Each element in it describes a polygon * using the indices of the points in `points`. * \param np optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin * \cgalParamNBegin{stream_precision} * \cgalParamDescription{a parameter used to set the precision (i.e. how many digits are generated) of the output stream} * \cgalParamType{int} * \cgalParamDefault{the precision of the stream `os`} * \cgalParamNEnd * \cgalNamedParamsEnd * * \return `true` if the writing was successful, `false` otherwise. */ template bool write_OBJ(std::ostream& os, const PointRange& points, const PolygonRange& polygons, const CGAL_NP_CLASS& np = parameters::default_values() #ifndef DOXYGEN_RUNNING , std::enable_if_t::value>* = nullptr #endif ) { set_ascii_mode(os); // obj is ASCII only Generic_writer writer(os); return writer(points, polygons, np); } /*! * \ingroup PkgStreamSupportIoFuncsOBJ * * \brief writes the content of `points` and `polygons` in a file named `fname`, using the \ref IOStreamOBJ. * * \tparam PointRange a model of the concept `RandomAccessContainer` whose value type is the point type * \tparam PolygonRange a model of the concept `SequenceContainer` * whose `value_type` is itself a model of the concept `SequenceContainer` * whose `value_type` is an unsigned integer type convertible to `std::size_t` * \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" * * \param fname the path to the output file * \param points points of the soup of polygons * \param polygons a range of polygons. Each element in it describes a polygon * using the indices of the points in `points`. * \param np optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below * * \cgalNamedParamsBegin * \cgalParamNBegin{stream_precision} * \cgalParamDescription{a parameter used to set the precision (i.e. how many digits are generated) of the output stream} * \cgalParamType{int} * \cgalParamDefault{`6`} * \cgalParamNEnd * \cgalNamedParamsEnd * * \return `true` if the writing was successful, `false` otherwise. */ template bool write_OBJ(const std::string& fname, const PointRange& points, const PolygonRange& polygons, const CGAL_NP_CLASS& np = parameters::default_values() #ifndef DOXYGEN_RUNNING , std::enable_if_t::value>* = nullptr #endif ) { std::ofstream os(fname); CGAL::IO::set_mode(os, CGAL::IO::ASCII); return write_OBJ(os, points, polygons, np); } } // namespace IO } // namespace CGAL #endif // CGAL_IO_OBJ_H