{"action":"created","comment":{"url":"https://api.github.com/repos/ringmesh/RINGMesh/pulls/comments/173396825","pull_request_review_id":102580265,"id":173396825,"diff_hunk":"@@ -0,0 +1,416 @@\n+/*\r\n+ * Copyright (c) 2012-2018, Association Scientifique pour la Geologie et ses\r\n+ * Applications (ASGA). All rights reserved.\r\n+ *\r\n+ * Redistribution and use in source and binary forms, with or without\r\n+ * modification, are permitted provided that the following conditions are met:\r\n+ *     * Redistributions of source code must retain the above copyright\r\n+ *       notice, this list of conditions and the following disclaimer.\r\n+ *     * Redistributions in binary form must reproduce the above copyright\r\n+ *       notice, this list of conditions and the following disclaimer in the\r\n+ *       documentation and/or other materials provided with the distribution.\r\n+ *     * Neither the name of ASGA nor the\r\n+ *       names of its contributors may be used to endorse or promote products\r\n+ *       derived from this software without specific prior written permission.\r\n+ *\r\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r\n+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r\n+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ASGA BE LIABLE FOR ANY DIRECT,\r\n+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r\n+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n+ *\r\n+ *     http://www.ring-team.org\r\n+ *\r\n+ *     RING Project\r\n+ *     Ecole Nationale Superieure de Geologie - GeoRessources\r\n+ *     2 Rue du Doyen Marcel Roubault - TSA 70605\r\n+ *     54518 VANDOEUVRE-LES-NANCY\r\n+ *     FRANCE\r\n+ */\r\n+\r\n+#pragma once\r\n+\r\n+#include <algorithm>\r\n+#include <memory>\r\n+#include <ringmesh/basic/factory.h>\r\n+#include <ringmesh/basic/nn_search.h>\r\n+#include <ringmesh/mesh/common.h>\r\n+\r\n+#include <ringmesh/mesh/mesh_aabb.h>\r\n+#include <ringmesh/mesh/mesh_base.h>\r\n+#include <stack>\r\n+\r\n+namespace RINGMesh\r\n+{\r\n+    FORWARD_DECLARATION_DIMENSION_CLASS( SurfaceMeshBuilder );\r\n+    FORWARD_DECLARATION_DIMENSION_CLASS( SurfaceMesh );\r\n+\r\n+    struct PolygonLocalEdge;\r\n+} // namespace RINGMesh\r\n+\r\n+namespace RINGMesh\r\n+{\r\n+    /*!\r\n+     * class base class for encapsulating Mesh structure\r\n+     * @brief encapsulate adimensional mesh functionalities in order to provide\r\n+     * an API\r\n+     * on which we base the RINGMesh algorithms\r\n+     * @note For now, we encapsulate the GEO::Mesh class.\r\n+     */\r\n+\r\n+    /*!\r\n+     * class for encapsulating surface mesh component\r\n+     */\r\n+    template < index_t DIMENSION >\r\n+    class SurfaceMeshBase : public MeshBase< DIMENSION >\r\n+    {\r\n+        friend class SurfaceMeshBuilder< DIMENSION >;\r\n+\r\n+    public:\r\n+        static std::unique_ptr< SurfaceMesh< DIMENSION > > create_mesh(\r\n+            const MeshType type = \"\" );\r\n+\r\n+        /*!\r\n+         * @brief Gets the vertex index by polygon index and local vertex index.\r\n+         * @param[in] polygon_local_vertex the polygon index and\r\n+         * the local edge index in the polygon.\r\n+         */\r\n+        virtual index_t polygon_vertex(\r\n+            const ElementLocalVertex& polygon_local_vertex ) const = 0;\r\n+\r\n+        /*!\r\n+         * @brief Gets the number of all polygons in the whole Mesh.\r\n+         */\r\n+        virtual index_t nb_polygons() const = 0;\r\n+\r\n+        /*!\r\n+         * @brief Gets the number of vertices in the polygon \\param polygon_id.\r\n+         * @param[in] polygon_id polygon index\r\n+         */\r\n+        virtual index_t nb_polygon_vertices( index_t polygon_id ) const = 0;\r\n+\r\n+        /*!\r\n+         * @brief Gets the number of edges in the polygon \\param polygon_id.\r\n+         * @param[in] polygon_id polygon index\r\n+         */\r\n+        index_t nb_polygon_edges( index_t polygon_id ) const\r\n+        {\r\n+            return nb_polygon_vertices( polygon_id );\r\n+        }\r\n+\r\n+        /*!\r\n+         * @brief Gets the next vertex index in the polygon vertex\r\n+         * \\param polygon_local_vertex.\r\n+         * @param[in] polygon_local_vertex polygon index and the current\r\n+         * local vertex index.\r\n+         */\r\n+        ElementLocalVertex next_polygon_vertex(\r\n+            const ElementLocalVertex& polygon_local_vertex ) const;\r\n+\r\n+        /*!\r\n+         * @brief Get the next edge on the border\r\n+         * @warning the edge index is in fact the index of the vertex where the\r\n+         * edge starts.\r\n+         * @details The returned border edge is the next in the way of polygon\r\n+         * edges\r\n+         * orientation.\r\n+         * @param[in] polygon_local_edge input polygon index and its local\r\n+         * edge index in the polygon\r\n+         * @return the next polygon index\r\n+         * and the next edge index in the polygon\r\n+         *\r\n+         * @pre the given polygon edge must be on border\r\n+         */\r\n+        PolygonLocalEdge next_on_border(\r\n+            const PolygonLocalEdge& polygon_local_edge ) const;\r\n+\r\n+        /*!\r\n+         * @brief Gets the previous vertex index in the polygon \\param\r\n+         * polygon_id.\r\n+         * @param[in] polygon_local_vertex polygon index and its current\r\n+         * local vertex index\r\n+         */\r\n+        ElementLocalVertex prev_polygon_vertex(\r\n+            const ElementLocalVertex& polygon_local_vertex ) const;\r\n+\r\n+        /*!\r\n+         * @brief Get the previous edge on the border\r\n+         * @details The returned border edge is the previous in the way of\r\n+         * polygon edges\r\n+         * orientation.\r\n+         * @param[in] p Input polygon index\r\n+         * @param[in] e Edge index in the polygon\r\n+         * @return the previous polygon index\r\n+         * and the previous edge index in the polygon (tuple).\r\n+         *\r\n+         * @pre the surface must be correctly oriented and\r\n+         * the given polygon edge must be on border\r\n+         * @warning the edge index is in fact the index of the vertex where the\r\n+         * edge starts.\r\n+         */\r\n+        PolygonLocalEdge prev_on_border(\r\n+            const PolygonLocalEdge& polygon_local_edge ) const;\r\n+\r\n+        /*!\r\n+         * @brief Get the vertex index in a polygon @param polygon_index from\r\n+         * its\r\n+         * global index in the SurfaceMesh @param vertex_id\r\n+         * @return NO_ID or index of the vertex in the polygon\r\n+         */\r\n+        index_t vertex_index_in_polygon(\r\n+            index_t polygon_index, index_t vertex_id ) const;\r\n+\r\n+        /*!\r\n+         * @brief Compute closest vertex in a polygon to a point\r\n+         * @param[in] polygon_index Polygon index\r\n+         * @param[in] query_point Coordinates of the point to which distance is\r\n+         * measured\r\n+         * @return Index of the vertex of @param polygon_index closest to @param\r\n+         * query_point\r\n+         */\r\n+        index_t closest_vertex_in_polygon(\r\n+            index_t polygon_index, const vecn< DIMENSION >& query_point ) const;\r\n+\r\n+        /*!\r\n+         * @brief Get the first polygon of the surface that has an edge linking\r\n+         * the two vertices (ids in the surface)\r\n+         *\r\n+         * @param[in] in0 Index of the first vertex in the surface\r\n+         * @param[in] in1 Index of the second vertex in the surface\r\n+         * @return NO_ID or the index of the polygon\r\n+         */\r\n+        index_t polygon_from_vertex_ids( index_t in0, index_t in1 ) const;\r\n+\r\n+        /*!\r\n+         * @brief Determines the polygons around a vertex\r\n+         * @param[in] vertex_id Index of the vertex in the surface\r\n+         * @param[in] border_only If true only polygons on the border are\r\n+         * considered\r\n+         * @param[in] first_polygon (Optional) Index of one polygon containing\r\n+         * the vertex @param P\r\n+         * @return Indices of the polygons containing @param P\r\n+         * @note If a polygon containing the vertex is given, polygons around\r\n+         * this\r\n+         * vertex is search by propagation. Else, a first polygon is found by\r\n+         * brute\r\n+         * force algorithm, and then the other by propagation\r\n+         * @todo Try to use a AABB tree to remove @param first_polygon. [PA]\r\n+         */\r\n+        std::vector< index_t > polygons_around_vertex(\r\n+            index_t vertex_id, bool border_only, index_t first_polygon ) const;\r\n+\r\n+        /*!\r\n+         * @brief Gets an adjacent polygon index by polygon index and local edge\r\n+         * index.\r\n+         * @param[in] polygon_id the polygon index.\r\n+         * @param[in] edge_id the local edge index in \\param polygon_id.\r\n+         * @return the global polygon index adjacent to the \\param edge_id of\r\n+         * the polygon \\param polygon_id.\r\n+         * @precondition  \\param edge_id < number of edge of the polygon \\param\r\n+         * polygon_id .\r\n+         */\r\n+        virtual index_t polygon_adjacent(\r\n+            const PolygonLocalEdge& polygon_local_edge ) const = 0;\r\n+\r\n+        virtual GEO::AttributesManager& polygon_attribute_manager() const = 0;\r\n+\r\n+        /*!\r\n+         * @brief Tests whether all the polygons are triangles. when all the\r\n+         * polygons are triangles, storage and access is optimized.\r\n+         * @return True if all polygons are triangles and False otherwise.\r\n+         */\r\n+        virtual bool polygons_are_simplices() const = 0;\r\n+\r\n+        /*!\r\n+         * return true if the polygon \\param polygon_id is a triangle\r\n+         */\r\n+        bool is_triangle( index_t polygon_id ) const\r\n+        {\r\n+            return nb_polygon_vertices( polygon_id ) == 3;\r\n+        }\r\n+\r\n+        PolygonType polygone_type( index_t polygon_id ) const\r\n+        {\r\n+            if( is_triangle( polygon_id ) )\r\n+            {\r\n+                return PolygonType::TRIANGLE;\r\n+            }\r\n+            if( nb_polygon_vertices( polygon_id ) == 4 )\r\n+            {\r\n+                return PolygonType::QUAD;\r\n+            }\r\n+            return PolygonType::UNDEFINED;\r\n+        }\r\n+\r\n+        /*!\r\n+         * Is the edge starting with the given vertex of the polygon on a border\r\n+         * of the Surface?\r\n+         */\r\n+        bool is_edge_on_border(\r\n+            const PolygonLocalEdge& polygon_local_edge ) const\r\n+        {\r\n+            return polygon_adjacent( polygon_local_edge ) == NO_ID;\r\n+        }\r\n+\r\n+        /*!\r\n+         * Is one of the edges of the polygon on the border of the surface?\r\n+         */\r\n+        bool is_polygon_on_border( index_t polygon_index ) const;\r\n+\r\n+        /*!\r\n+         * @brief Gets the length of the edge starting at a given vertex\r\n+         * @param[in] polygon_local_edge index of the polygon and its\r\n+         * local edge starting vertex index\r\n+         */\r\n+        double polygon_edge_length(\r\n+            const PolygonLocalEdge& polygon_local_edge ) const;\r\n+\r\n+        /*!\r\n+         * @brief Gets the barycenter of the edge starting at a given vertex\r\n+         * @param[in] polygon_local_edge index of the polygon and\r\n+         * the local edge starting vertex index\r\n+         */\r\n+        vecn< DIMENSION > polygon_edge_barycenter(\r\n+            const PolygonLocalEdge& polygon_local_edge ) const;\r\n+\r\n+        /*!\r\n+         * @brief Gets the vertex index on the polygon edge\r\n+         * @param[in] polygon_local_edge index of the polygon and\r\n+         * the local index of the edge in the polygon\r\n+         * @param[in] vertex_id index of the local vertex in the edge \\param\r\n+         * edge_id (0 or 1)\r\n+         * @return the vertex index\r\n+         */\r\n+        index_t polygon_edge_vertex( const PolygonLocalEdge& polygon_local_edge,\r\n+            index_t vertex_id ) const;\r\n+\r\n+        /*!\r\n+         * Computes the Mesh polygon barycenter\r\n+         * @param[in] polygon_id the polygon index\r\n+         * @return the polygon center\r\n+         */\r\n+        vecn< DIMENSION > polygon_barycenter( index_t polygon_id ) const;\r\n+\r\n+        /*!\r\n+         * Computes the Mesh polygon area\r\n+         * @param[in] polygon_id the polygon index\r\n+         * @return the polygon area\r\n+         */\r\n+        virtual double polygon_area( index_t polygon_id ) const = 0;\r\n+\r\n+        /*!\r\n+         * @brief return the NNSearch at polygons\r\n+         */\r\n+        const NNSearch< DIMENSION >& polygon_nn_search() const\r\n+        {\r\n+            if( !nn_search_ )\r\n+            {\r\n+                std::vector< vecn< DIMENSION > > polygon_centers(\r\n+                    nb_polygons() );\r\n+                for( auto p : range( nb_polygons() ) )\r\n+                {\r\n+                    polygon_centers[p] = polygon_barycenter( p );\r\n+                }\r\n+                nn_search_.reset(\r\n+                    new NNSearch< DIMENSION >( polygon_centers, true ) );\r\n+            }\r\n+            return *nn_search_.get();\r\n+        }\r\n+        /*!\r\n+         * @brief Creates an AABB tree for a Mesh polygons\r\n+         */\r\n+        const SurfaceAABBTree< DIMENSION >& polygon_aabb() const\r\n+        {\r\n+            if( !polygon_aabb_ )\r\n+            {\r\n+                polygon_aabb_.reset(\r\n+                    new SurfaceAABBTree< DIMENSION >( *this ) );\r\n+            }\r\n+            return *polygon_aabb_;\r\n+        }\r\n+\r\n+        bool is_mesh_valid() const override;\r\n+\r\n+        std::tuple< index_t, std::vector< index_t > >\r\n+            connected_components() const final;\r\n+\r\n+    protected:\r\n+        SurfaceMeshBase() = default;\r\n+\r\n+    private:\r\n+        mutable std::unique_ptr< NNSearch< DIMENSION > > nn_search_{};\r\n+        mutable std::unique_ptr< SurfaceAABBTree< DIMENSION > > polygon_aabb_{};\r\n+\r\n+        GEO::index_t find_first_polygon_around_vertex( GEO::index_t cur_p,\r\n+            GEO::index_t vertex_id,\r\n+            GEO::index_t& first_polygon ) const;\r\n+        std::vector< index_t > store_polygons_around_vertex(\r\n+            GEO::index_t first_polygon,\r\n+            GEO::index_t vertex_id,\r\n+            bool border_only ) const;\r\n+        void stacking_polygons( GEO::index_t vertex_id,\r","path":"include/ringmesh/mesh/surface_mesh.h","position":356,"original_position":356,"commit_id":"203fa4d4256f043460d8dcc9923668f0240a4001","original_commit_id":"203fa4d4256f043460d8dcc9923668f0240a4001","user":{"login":"panquez","id":32702237,"avatar_url":"https://avatars2.githubusercontent.com/u/32702237?v=4","gravatar_id":"","url":"https://api.github.com/users/panquez","html_url":"https://github.com/panquez","followers_url":"https://api.github.com/users/panquez/followers","following_url":"https://api.github.com/users/panquez/following{/other_user}","gists_url":"https://api.github.com/users/panquez/gists{/gist_id}","starred_url":"https://api.github.com/users/panquez/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/panquez/subscriptions","organizations_url":"https://api.github.com/users/panquez/orgs","repos_url":"https://api.github.com/users/panquez/repos","events_url":"https://api.github.com/users/panquez/events{/privacy}","received_events_url":"https://api.github.com/users/panquez/received_events","type":"User","site_admin":false},"body":"stacking polygons is not a good name","created_at":"2018-03-09T09:07:53Z","updated_at":"2018-03-09T09:13:17Z","html_url":"https://github.com/ringmesh/RINGMesh/pull/143#discussion_r173396825","pull_request_url":"https://api.github.com/repos/ringmesh/RINGMesh/pulls/143","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/ringmesh/RINGMesh/pulls/comments/173396825"},"html":{"href":"https://github.com/ringmesh/RINGMesh/pull/143#discussion_r173396825"},"pull_request":{"href":"https://api.github.com/repos/ringmesh/RINGMesh/pulls/143"}}},"pull_request":{"url":"https://api.github.com/repos/ringmesh/RINGMesh/pulls/143","id":164352755,"html_url":"https://github.com/ringmesh/RINGMesh/pull/143","diff_url":"https://github.com/ringmesh/RINGMesh/pull/143.diff","patch_url":"https://github.com/ringmesh/RINGMesh/pull/143.patch","issue_url":"https://api.github.com/repos/ringmesh/RINGMesh/issues/143","number":143,"state":"open","locked":false,"title":"Split mesh classes","user":{"login":"mzakari31","id":18530885,"avatar_url":"https://avatars1.githubusercontent.com/u/18530885?v=4","gravatar_id":"","url":"https://api.github.com/users/mzakari31","html_url":"https://github.com/mzakari31","followers_url":"https://api.github.com/users/mzakari31/followers","following_url":"https://api.github.com/users/mzakari31/following{/other_user}","gists_url":"https://api.github.com/users/mzakari31/gists{/gist_id}","starred_url":"https://api.github.com/users/mzakari31/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mzakari31/subscriptions","organizations_url":"https://api.github.com/users/mzakari31/orgs","repos_url":"https://api.github.com/users/mzakari31/repos","events_url":"https://api.github.com/users/mzakari31/events{/privacy}","received_events_url":"https://api.github.com/users/mzakari31/received_events","type":"User","site_admin":false},"body":"2 New Files for the class MeshBase: mesh_base.h; mesh_base.cpp\r\n2 Filenames added in ringmesh/mesh/CMakeLists.txt","created_at":"2018-01-22T16:26:55Z","updated_at":"2018-03-09T09:13:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1e8804e34acfd3016ea4aaedcb37303df6a68b63","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/ringmesh/RINGMesh/pulls/143/commits","review_comments_url":"https://api.github.com/repos/ringmesh/RINGMesh/pulls/143/comments","review_comment_url":"https://api.github.com/repos/ringmesh/RINGMesh/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ringmesh/RINGMesh/issues/143/comments","statuses_url":"https://api.github.com/repos/ringmesh/RINGMesh/statuses/203fa4d4256f043460d8dcc9923668f0240a4001","head":{"label":"ringmesh:split_mesh_classes","ref":"split_mesh_classes","sha":"203fa4d4256f043460d8dcc9923668f0240a4001","user":{"login":"ringmesh","id":33122992,"avatar_url":"https://avatars3.githubusercontent.com/u/33122992?v=4","gravatar_id":"","url":"https://api.github.com/users/ringmesh","html_url":"https://github.com/ringmesh","followers_url":"https://api.github.com/users/ringmesh/followers","following_url":"https://api.github.com/users/ringmesh/following{/other_user}","gists_url":"https://api.github.com/users/ringmesh/gists{/gist_id}","starred_url":"https://api.github.com/users/ringmesh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ringmesh/subscriptions","organizations_url":"https://api.github.com/users/ringmesh/orgs","repos_url":"https://api.github.com/users/ringmesh/repos","events_url":"https://api.github.com/users/ringmesh/events{/privacy}","received_events_url":"https://api.github.com/users/ringmesh/received_events","type":"Organization","site_admin":false},"repo":{"id":108415296,"name":"RINGMesh","full_name":"ringmesh/RINGMesh","owner":{"login":"ringmesh","id":33122992,"avatar_url":"https://avatars3.githubusercontent.com/u/33122992?v=4","gravatar_id":"","url":"https://api.github.com/users/ringmesh","html_url":"https://github.com/ringmesh","followers_url":"https://api.github.com/users/ringmesh/followers","following_url":"https://api.github.com/users/ringmesh/following{/other_user}","gists_url":"https://api.github.com/users/ringmesh/gists{/gist_id}","starred_url":"https://api.github.com/users/ringmesh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ringmesh/subscriptions","organizations_url":"https://api.github.com/users/ringmesh/orgs","repos_url":"https://api.github.com/users/ringmesh/repos","events_url":"https://api.github.com/users/ringmesh/events{/privacy}","received_events_url":"https://api.github.com/users/ringmesh/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ringmesh/RINGMesh","description":"RINGMesh is a C++ open-source platform for manipulating meshes of geological models.","fork":false,"url":"https://api.github.com/repos/ringmesh/RINGMesh","forks_url":"https://api.github.com/repos/ringmesh/RINGMesh/forks","keys_url":"https://api.github.com/repos/ringmesh/RINGMesh/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ringmesh/RINGMesh/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ringmesh/RINGMesh/teams","hooks_url":"https://api.github.com/repos/ringmesh/RINGMesh/hooks","issue_events_url":"https://api.github.com/repos/ringmesh/RINGMesh/issues/events{/number}","events_url":"https://api.github.com/repos/ringmesh/RINGMesh/events","assignees_url":"https://api.github.com/repos/ringmesh/RINGMesh/assignees{/user}","branches_url":"https://api.github.com/repos/ringmesh/RINGMesh/branches{/branch}","tags_url":"https://api.github.com/repos/ringmesh/RINGMesh/tags","blobs_url":"https://api.github.com/repos/ringmesh/RINGMesh/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ringmesh/RINGMesh/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ringmesh/RINGMesh/git/refs{/sha}","trees_url":"https://api.github.com/repos/ringmesh/RINGMesh/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ringmesh/RINGMesh/statuses/{sha}","languages_url":"https://api.github.com/repos/ringmesh/RINGMesh/languages","stargazers_url":"https://api.github.com/repos/ringmesh/RINGMesh/stargazers","contributors_url":"https://api.github.com/repos/ringmesh/RINGMesh/contributors","subscribers_url":"https://api.github.com/repos/ringmesh/RINGMesh/subscribers","subscription_url":"https://api.github.com/repos/ringmesh/RINGMesh/subscription","commits_url":"https://api.github.com/repos/ringmesh/RINGMesh/commits{/sha}","git_commits_url":"https://api.github.com/repos/ringmesh/RINGMesh/git/commits{/sha}","comments_url":"https://api.github.com/repos/ringmesh/RINGMesh/comments{/number}","issue_comment_url":"https://api.github.com/repos/ringmesh/RINGMesh/issues/comments{/number}","contents_url":"https://api.github.com/repos/ringmesh/RINGMesh/contents/{+path}","compare_url":"https://api.github.com/repos/ringmesh/RINGMesh/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ringmesh/RINGMesh/merges","archive_url":"https://api.github.com/repos/ringmesh/RINGMesh/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ringmesh/RINGMesh/downloads","issues_url":"https://api.github.com/repos/ringmesh/RINGMesh/issues{/number}","pulls_url":"https://api.github.com/repos/ringmesh/RINGMesh/pulls{/number}","milestones_url":"https://api.github.com/repos/ringmesh/RINGMesh/milestones{/number}","notifications_url":"https://api.github.com/repos/ringmesh/RINGMesh/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ringmesh/RINGMesh/labels{/name}","releases_url":"https://api.github.com/repos/ringmesh/RINGMesh/releases{/id}","deployments_url":"https://api.github.com/repos/ringmesh/RINGMesh/deployments","created_at":"2017-10-26T13:29:35Z","updated_at":"2018-02-28T14:16:04Z","pushed_at":"2018-03-08T17:57:32Z","git_url":"git://github.com/ringmesh/RINGMesh.git","ssh_url":"git@github.com:ringmesh/RINGMesh.git","clone_url":"https://github.com/ringmesh/RINGMesh.git","svn_url":"https://github.com/ringmesh/RINGMesh","homepage":"http://ringmesh.org","size":172976,"stargazers_count":19,"watchers_count":19,"language":"C++","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":5,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause"},"forks":0,"open_issues":5,"watchers":19,"default_branch":"master"}},"base":{"label":"ringmesh:master","ref":"master","sha":"b1519663b80e0e7544a4fb6554ab4fb4844a3928","user":{"login":"ringmesh","id":33122992,"avatar_url":"https://avatars3.githubusercontent.com/u/33122992?v=4","gravatar_id":"","url":"https://api.github.com/users/ringmesh","html_url":"https://github.com/ringmesh","followers_url":"https://api.github.com/users/ringmesh/followers","following_url":"https://api.github.com/users/ringmesh/following{/other_user}","gists_url":"https://api.github.com/users/ringmesh/gists{/gist_id}","starred_url":"https://api.github.com/users/ringmesh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ringmesh/subscriptions","organizations_url":"https://api.github.com/users/ringmesh/orgs","repos_url":"https://api.github.com/users/ringmesh/repos","events_url":"https://api.github.com/users/ringmesh/events{/privacy}","received_events_url":"https://api.github.com/users/ringmesh/received_events","type":"Organization","site_admin":false},"repo":{"id":108415296,"name":"RINGMesh","full_name":"ringmesh/RINGMesh","owner":{"login":"ringmesh","id":33122992,"avatar_url":"https://avatars3.githubusercontent.com/u/33122992?v=4","gravatar_id":"","url":"https://api.github.com/users/ringmesh","html_url":"https://github.com/ringmesh","followers_url":"https://api.github.com/users/ringmesh/followers","following_url":"https://api.github.com/users/ringmesh/following{/other_user}","gists_url":"https://api.github.com/users/ringmesh/gists{/gist_id}","starred_url":"https://api.github.com/users/ringmesh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ringmesh/subscriptions","organizations_url":"https://api.github.com/users/ringmesh/orgs","repos_url":"https://api.github.com/users/ringmesh/repos","events_url":"https://api.github.com/users/ringmesh/events{/privacy}","received_events_url":"https://api.github.com/users/ringmesh/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ringmesh/RINGMesh","description":"RINGMesh is a C++ open-source platform for manipulating meshes of geological models.","fork":false,"url":"https://api.github.com/repos/ringmesh/RINGMesh","forks_url":"https://api.github.com/repos/ringmesh/RINGMesh/forks","keys_url":"https://api.github.com/repos/ringmesh/RINGMesh/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ringmesh/RINGMesh/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ringmesh/RINGMesh/teams","hooks_url":"https://api.github.com/repos/ringmesh/RINGMesh/hooks","issue_events_url":"https://api.github.com/repos/ringmesh/RINGMesh/issues/events{/number}","events_url":"https://api.github.com/repos/ringmesh/RINGMesh/events","assignees_url":"https://api.github.com/repos/ringmesh/RINGMesh/assignees{/user}","branches_url":"https://api.github.com/repos/ringmesh/RINGMesh/branches{/branch}","tags_url":"https://api.github.com/repos/ringmesh/RINGMesh/tags","blobs_url":"https://api.github.com/repos/ringmesh/RINGMesh/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ringmesh/RINGMesh/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ringmesh/RINGMesh/git/refs{/sha}","trees_url":"https://api.github.com/repos/ringmesh/RINGMesh/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ringmesh/RINGMesh/statuses/{sha}","languages_url":"https://api.github.com/repos/ringmesh/RINGMesh/languages","stargazers_url":"https://api.github.com/repos/ringmesh/RINGMesh/stargazers","contributors_url":"https://api.github.com/repos/ringmesh/RINGMesh/contributors","subscribers_url":"https://api.github.com/repos/ringmesh/RINGMesh/subscribers","subscription_url":"https://api.github.com/repos/ringmesh/RINGMesh/subscription","commits_url":"https://api.github.com/repos/ringmesh/RINGMesh/commits{/sha}","git_commits_url":"https://api.github.com/repos/ringmesh/RINGMesh/git/commits{/sha}","comments_url":"https://api.github.com/repos/ringmesh/RINGMesh/comments{/number}","issue_comment_url":"https://api.github.com/repos/ringmesh/RINGMesh/issues/comments{/number}","contents_url":"https://api.github.com/repos/ringmesh/RINGMesh/contents/{+path}","compare_url":"https://api.github.com/repos/ringmesh/RINGMesh/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ringmesh/RINGMesh/merges","archive_url":"https://api.github.com/repos/ringmesh/RINGMesh/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ringmesh/RINGMesh/downloads","issues_url":"https://api.github.com/repos/ringmesh/RINGMesh/issues{/number}","pulls_url":"https://api.github.com/repos/ringmesh/RINGMesh/pulls{/number}","milestones_url":"https://api.github.com/repos/ringmesh/RINGMesh/milestones{/number}","notifications_url":"https://api.github.com/repos/ringmesh/RINGMesh/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ringmesh/RINGMesh/labels{/name}","releases_url":"https://api.github.com/repos/ringmesh/RINGMesh/releases{/id}","deployments_url":"https://api.github.com/repos/ringmesh/RINGMesh/deployments","created_at":"2017-10-26T13:29:35Z","updated_at":"2018-02-28T14:16:04Z","pushed_at":"2018-03-08T17:57:32Z","git_url":"git://github.com/ringmesh/RINGMesh.git","ssh_url":"git@github.com:ringmesh/RINGMesh.git","clone_url":"https://github.com/ringmesh/RINGMesh.git","svn_url":"https://github.com/ringmesh/RINGMesh","homepage":"http://ringmesh.org","size":172976,"stargazers_count":19,"watchers_count":19,"language":"C++","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":5,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause"},"forks":0,"open_issues":5,"watchers":19,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ringmesh/RINGMesh/pulls/143"},"html":{"href":"https://github.com/ringmesh/RINGMesh/pull/143"},"issue":{"href":"https://api.github.com/repos/ringmesh/RINGMesh/issues/143"},"comments":{"href":"https://api.github.com/repos/ringmesh/RINGMesh/issues/143/comments"},"review_comments":{"href":"https://api.github.com/repos/ringmesh/RINGMesh/pulls/143/comments"},"review_comment":{"href":"https://api.github.com/repos/ringmesh/RINGMesh/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ringmesh/RINGMesh/pulls/143/commits"},"statuses":{"href":"https://api.github.com/repos/ringmesh/RINGMesh/statuses/203fa4d4256f043460d8dcc9923668f0240a4001"}},"author_association":"NONE"}}
{"actor":{"display_login":"panquez"}}