日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CGAL笔记之单元格复合体和多面体篇—曲面网格

發布時間:2024/3/24 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CGAL笔记之单元格复合体和多面体篇—曲面网格 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CGAL筆記之單元格復合體和多面體篇—曲面網格

  • 0、前言
  • 1、用法
    • 1、示例
  • 2、連通性
  • 3、范圍和迭代器
    • 3.1 示例
  • 4、循環器
    • 1、示例
  • 5、屬性
    • 1、示例
  • 6、邊界
  • 7、Surface Mesh和 BGL API
    • 1、示例
      • 8、表面網格 I/O
  • 9、內存管理
    • 1、 示例
  • 10、繪制Surface Mesh
  • 11 實現細節


0、前言

類Surface_mesh是半邊數據結構的實現,可用于表示多面體表面。它是 CGAL 包Halfedge Data Structures和3D Polyhedral Surface的替代品。主要區別在于它是基于索引的,而不是基于指針的。此外,向頂點、半邊、邊和面添加信息的機制要簡單得多,并且是在運行時完成的,而不是在編譯時完成的。

因為數據結構使用整數索引作為頂點、半邊、邊和面的描述符,所以它比基于 64 位指針的版本具有更低的內存占用。由于索引是連續的,因此它們可以用作存儲屬性的向量的索引。

當元素被移除時,它們只是被標記為已移除,必須調用垃圾回收函數才能真正移除它們。

該類Surface_mesh可以通過其類成員函數以及CGAL 包和 Boost Graph Library中描述的 BGL API 來使用,因為它是concept的 MutableFaceGraph和FaceListGraph的模型。

1、用法

主類Surface_mesh提供了四個嵌套類,代表半邊數據結構的基本元素:

  • Surface_mesh::Vertex_index
  • Surface_mesh::Halfedge_index
  • Surface_mesh::Face_index
  • Surface_mesh::Edge_index

這些類型只是整數的包裝器,它們的主要目的是保證類型安全。它們是默認可構造的,這會產生無效元素。Surface_mesh可以通過一組不保持連接性的低級函數添加和刪除新元素。一個例外是Surface_mesh::add_face(),它嘗試向網格(由一系列頂點定義)添加一個新面,如果該操作在拓撲上無效則失敗。在這種情況下,返回的Face_index是Surface_mesh::null_face()。

typedef Surface_mesh<Point> Mesh; Mesh m; Mesh::Vertex_index u = m.add_vertex(Point(0,1,0)); Mesh::Vertex_index v = m.add_vertex(Point(0,0,0)); Mesh::Vertex_index w = m.add_vertex(Point(1,0,0)); m.add_face(u, v, w);

Surface_mesh與基于索引的Vertex_index、Halfedge_index、Edge_index和Face_index一樣,沒有成員函數來訪問連通性或屬性。Surface_mesh必須使用創建它們的實例的函數來獲取此信息。

1、示例

下面的示例展示了如何Surface_mesh通過添加 2 個面來創建一個非常簡單的網格,以及如何檢查面是否已正確添加到網格中。

#include <CGAL/Simple_cartesian.h> #include <CGAL/Surface_mesh.h> typedef CGAL::Simple_cartesian<double> K; typedef CGAL::Surface_mesh<K::Point_3> Mesh; typedef Mesh::Vertex_index vertex_descriptor; typedef Mesh::Face_index face_descriptor; int main() {Mesh m;// Add the points as verticesvertex_descriptor u = m.add_vertex(K::Point_3(0,1,0));vertex_descriptor v = m.add_vertex(K::Point_3(0,0,0));vertex_descriptor w = m.add_vertex(K::Point_3(1,1,0));vertex_descriptor x = m.add_vertex(K::Point_3(1,0,0));m.add_face(u,v,w);face_descriptor f = m.add_face(u,v,x);if(f == Mesh::null_face()){std::cerr<<"The face could not be added because of an orientation error."<<std::endl;f = m.add_face(u,x,v);assert(f != Mesh::null_face());}return 0; }

2、連通性

表面網格是一種以邊為中心的數據結構,能夠維護頂點、邊和面的關聯信息。每條邊由兩個方向相反的半邊表示。每個半邊存儲對入射面和入射頂點的引用。此外,它還會將下一個和上一個半邊事件的引用存儲到其事件面。對于每個面和每個頂點,都會存儲一個關聯的半邊。半邊不存儲相對半邊的索引,因為Surface_mesh在內存中連續存儲相對半邊。

下圖說明了允許在表面網格中導航的函數:Surface_mesh::opposite()、Surface_mesh::next()、Surface_mesh::prev()、Surface_mesh::target()和Surface_mesh::face()。此外,這些函數Surface_mesh::halfedge()允許獲得與頂點和面相關聯的半邊。或者,可以使用包CGAL 和 Boost Graph Library中定義的具有相同名稱的函數。

入射到面的半邊形成一個循環。根據我們從表面的哪一側看,半邊的序列似乎是順時針或逆時針方向。當在本手冊中我們談到遍歷的方向時,我們會看到表面周圍的半邊是逆時針方向的。

連通性不允許表示有孔的面。

3、范圍和迭代器

Surface_mesh提供迭代器范圍以枚舉所有頂點、半邊、邊和面。它提供返回與Boost.Range庫兼容的元素范圍的成員函數。

3.1 示例

以下示例顯示如何從范圍中獲取迭代器類型、獲取開始和結束迭代器的備選方案以及基于范圍的循環的備選方案。

#include <vector> #include <CGAL/Simple_cartesian.h> #include <CGAL/Surface_mesh.h> typedef CGAL::Simple_cartesian<double> K; typedef CGAL::Surface_mesh<K::Point_3> Mesh; typedef Mesh::Vertex_index vertex_descriptor; typedef Mesh::Face_index face_descriptor; int main() {Mesh m;// u x// +------------+// | |// | |// | f |// | |// | |// +------------+// v w// Add the points as verticesvertex_descriptor u = m.add_vertex(K::Point_3(0,1,0));vertex_descriptor v = m.add_vertex(K::Point_3(0,0,0));vertex_descriptor w = m.add_vertex(K::Point_3(1,0,0));vertex_descriptor x = m.add_vertex(K::Point_3(1,1,0));/* face_descriptor f = */ m.add_face(u,v,w,x);{std::cout << "all vertices " << std::endl;// The vertex iterator type is a nested type of the Vertex_rangeMesh::Vertex_range::iterator vb, ve;Mesh::Vertex_range r = m.vertices();// The iterators can be accessed through the C++ range APIvb = r.begin();ve = r.end();// or the boost Range APIvb = boost::begin(r);ve = boost::end(r);// or with boost::tie, as the CGAL range derives from std::pairfor(boost::tie(vb, ve) = m.vertices(); vb != ve; ++vb){std::cout << *vb << std::endl;}// Instead of the classical for loop one can use// the boost macro for a rangefor(vertex_descriptor vd : m.vertices()){std::cout << vd << std::endl;}// or the C++11 for loop. Note that there is a ':' and not a ',' as in BOOST_FOREACHfor(vertex_descriptor vd : m.vertices()){std::cout << vd << std::endl;}}return 0; }

4、循環器

在 CGAL 包和 Boost Graph Library中,圍繞面和頂點的循環器作為類模板提供。

圍繞面的循環器基本上是Surface_mesh::next()為了從 halfedge 到 halfedge 逆時針繞著面進行調用,當取消引用時返回 halfedge 或入射頂點或相反的面。

  • CGAL::Halfedge_around_face_circulator<Mesh>
  • CGAL::Vertex_around_face_circulator<Mesh>
  • CGAL::Face_around_face_circulator<Mesh>

邊的目標頂點周圍的環行器基本上是Surface_mesh::opposite(Surface_mesh::next())為了圍繞同一目標頂點從半邊順時針轉到半邊。

  • CGAL::Halfedge_around_target_circulator<Mesh>
  • CGAL::Vertex_around_target_circulator<Mesh>
  • CGAL::Face_around_target_circulator<Mesh>

所有循環器模型BidirectionalCirculator。除此之外,它們還支持轉換為bool以更方便地檢查是否為空。

1、示例

以下示例顯示如何枚舉給定半邊的目標周圍的頂點。第二個循環顯示這些循環器類型中的每一個都帶有一個等效的迭代器和一個創建迭代器范圍的自由函數。

#include <CGAL/Simple_cartesian.h> #include <CGAL/Surface_mesh.h> #include <vector> typedef CGAL::Simple_cartesian<double> K; typedef CGAL::Surface_mesh<K::Point_3> Mesh; typedef Mesh::Vertex_index vertex_descriptor; typedef Mesh::Face_index face_descriptor; int main() {Mesh m;// u x// +------------+// | |// | |// | f |// | |// | |// +------------+// v w// Add the points as verticesvertex_descriptor u = m.add_vertex(K::Point_3(0,1,0));vertex_descriptor v = m.add_vertex(K::Point_3(0,0,0));vertex_descriptor w = m.add_vertex(K::Point_3(1,0,0));vertex_descriptor x = m.add_vertex(K::Point_3(1,1,0));face_descriptor f = m.add_face(u,v,w,x);{std::cout << "vertices around vertex " << v << std::endl;CGAL::Vertex_around_target_circulator<Mesh> vbegin(m.halfedge(v),m), done(vbegin);do {std::cout << *vbegin++ << std::endl;} while(vbegin != done);}{std::cout << "vertices around face " << f << std::endl;CGAL::Vertex_around_face_iterator<Mesh> vbegin, vend;for(boost::tie(vbegin, vend) = vertices_around_face(m.halfedge(f), m);vbegin != vend;++vbegin){std::cout << *vbegin << std::endl;}}// or the same again, but directly with a range based loopfor(vertex_descriptor vd : vertices_around_face(m.halfedge(f), m)){std::cout << vd << std::endl;}return 0; }

5、屬性

Surface_mesh提供了一種在運行時為頂點、半邊、邊和面指定新屬性的機制。每個屬性都由一個字符串及其鍵類型標識。給定屬性的所有值都存儲為連續的內存塊。每當將鍵類型的新元素添加到數據結構或Surface_mesh::collect_garbage()執行函數時,對屬性的引用就會失效。刪除元素后,元素的屬性將繼續存在。嘗試通過無效元素訪問屬性將導致未定義的行為。

默認保留一個屬性,即"v:point". 通過 向數據結構添加新點時,必須提供此屬性的值Surface_mesh::add_vertex()。可以使用Surface_mesh::points()或直接訪問該屬性Surface_mesh::point(Surface_mesh::Vertex_index v)。

當一個元素被移除時,它只是被標記為已移除,當Surface_mesh::collect_garbage()被調用時它才真正被移除。垃圾回收也會真正去除這些元素的屬性。

連通性也存儲在屬性中,即名為“v:connectivity”、“h:connectivity”和“f:connectivity”的屬性。刪除元素的標記非常相似,我們有“v:removed”、“e:removed”和“f:removed”。

提供了方便的功能來刪除用戶添加的屬性映射,無論是按索引類型 ( Surface_mesh::remove_property_maps<I>()) 還是全部 ( Surface_mesh::remove_all_property_maps())。

要清除網格,您可以得到一個刪除了所有添加的屬性映射的網格 ( Surface_mesh::clear()) 或保留它們 ( Surface_mesh::clear_without_removing_property_maps())。請注意,在這兩種情況下,“v:point”屬性映射將被保留并且保持對它的引用是安全的。

1、示例

此示例說明如何使用屬性系統的最常見功能。

#include <string> #include <CGAL/Simple_cartesian.h> #include <CGAL/Surface_mesh.h> typedef CGAL::Simple_cartesian<double> K; typedef CGAL::Surface_mesh<K::Point_3> Mesh; typedef Mesh::Vertex_index vertex_descriptor; typedef Mesh::Face_index face_descriptor; int main() {Mesh m;vertex_descriptor v0 = m.add_vertex(K::Point_3(0,2,0));vertex_descriptor v1 = m.add_vertex(K::Point_3(2,2,0));vertex_descriptor v2 = m.add_vertex(K::Point_3(0,0,0));vertex_descriptor v3 = m.add_vertex(K::Point_3(2,0,0));vertex_descriptor v4 = m.add_vertex(K::Point_3(1,1,0));m.add_face(v3, v1, v4);m.add_face(v0, v4, v1);m.add_face(v0, v2, v4);m.add_face(v2, v3, v4);// give each vertex a name, the default is emptyMesh::Property_map<vertex_descriptor,std::string> name;bool created;boost::tie(name, created) = m.add_property_map<vertex_descriptor,std::string>("v:name","");assert(created);// add some names to the verticesname[v0] = "hello";name[v2] = "world";{// You get an existing property, and created will be falseMesh::Property_map<vertex_descriptor,std::string> name;bool created;boost::tie(name, created) = m.add_property_map<vertex_descriptor,std::string>("v:name", "");assert(! created);}// You can't get a property that does not existMesh::Property_map<face_descriptor,std::string> gnus;bool found;boost::tie(gnus, found) = m.property_map<face_descriptor,std::string>("v:gnus");assert(! found);// retrieve the point property for which exists a convenience functionMesh::Property_map<vertex_descriptor, K::Point_3> location = m.points();for(vertex_descriptor vd : m.vertices()) {std::cout << name[vd] << " @ " << location[vd] << std::endl;}std::vector<std::string> props = m.properties<vertex_descriptor>();for(std::string p : props){std::cout << p << std::endl;}// delete the string property againm.remove_property_map(name);return 0; }

6、邊界

半邊存儲對面的引用,即它的入射面。一條半邊h在邊界上,如果它沒有入射面,即如果。如果一條邊的任何半邊在邊界上,則該邊在邊界上。如果頂點的任何關聯半邊在邊界上,則該頂點在邊界上。sm.face(h) == Surface_mesh::null_face()

一個頂點只有一個關聯的半邊。如果用戶注意關聯的半邊是邊界半邊,如果頂點在邊界上,則無需在函數中查看所有入射半邊以查找頂點is_border()。為了只檢查關聯的半邊是否在邊界上,Surface_mesh::is_border(Vertex_index v, bool check_all_incident_halfedges = true)必須使用調用函數check_all_incident_halfedges = false。

在應用了可能使此屬性無效的操作后,用戶負責正確設置與頂點關聯的半邊。函數Surface_mesh::set_vertex_halfedge_to_border_halfedge(Vertex_index v)、Surface_mesh::set_vertex_halfedge_to_border_halfedge(Halfedge_index h)和分別為單個頂點v、面邊界上的所有頂點和表面網格的所有頂點hSurface_mesh::set_vertex_halfedge_to_border_halfedge()設置邊界半邊。

7、Surface Mesh和 BGL API

該類是Boost Graph Library 中定義的Surface_mesh概念模型。這使得可以直接在表面網格上IncidenceGraph應用諸如Dijkstra 最短路徑或Kruskal 最小生成樹等算法。

BGL API 的類型和自由函數都有相似的類型或成員函數,例如

BGLSurface_mesh評論
boost::graph_traits<G>::vertex_descriptorSurface_mesh::Vertex_index
boost::graph_traits<G>::edge_descriptorSurface_mesh::Edge_index
vertices(const G& g)sm.vertices()
edges(const G& g)sm.edges()
vd = source(ed,g)vd = sm.source(ed)
nan = sm.number_of_vertices()計算未刪除的頂點并且沒有 BGL 等價物
n = num_vertices(g)n = sm.number_of_vertices() + sm.number_of_removed_vertices()計算已使用和已刪除的頂點,以便在使用的最大頂點索引上有一個上限

返回頂點數而不考慮刪除的頂點會更好,但這會與底層頂點/邊索引映射交互不良。[0,num_vertices(g))索引映射將不再落在許多算法中假定的范圍內。

該類也是包CGAL 和 Boost Graph Library 中定義的concept的Surface_mesh的模型。這個和concept類型的 HalfedgeGraph類似,通過引入半邊和面的概念以及圍繞面和頂點的半邊循環來改進 BGL 的圖形概念。同樣,有類似的類型和,例如:MutableFaceGraph和HalfedgeGraph

BGL表面網格
boost::graph_traits<G>::halfedge_descriptorSurface_mesh::Halfedge_index
boost::graph_traits<G>::face_descriptorSurface_mesh::Face_index
halfedges(const G& g)sm.halfedges()
faces(const G& g)sm.faces()
hd = next(hd, g)hd = sm.next(hd)
hd = prev(hd, g)hd = sm.prev(hd)
hd = opposite(hd,g)hd = sm.opposite(hd)
hd = halfedge(vd,g)hd = sm.halfedge(vd)
ETC。

CGAL包和 Boost Graph Library中描述的 BGL API使我們能夠編寫在表面網格上運行的幾何算法,適用于FaceGraph, 或的任何模型MutableFaceGraph。即表面網格簡化、變形或分割算法適用于Surface_mesh和Polyhedron_3。

BGL 算法使用屬性映射將信息關聯到頂點和邊。一個重要的屬性是索引,一個圖的頂點0之間的整數。這允許算法創建適當大小的向量以存儲每個頂點信息。例如,用于存儲在圖形遍歷期間是否已訪問頂點的布爾值。num_vertices(g)``g

檢索圖的頂點索引屬性映射的 BGL 方法g是vipm = get(boost::vertex_index, g),然后get(vipm, vd)為了檢索頂點描述符的索引vd,它是get(vertex_index, g, vd)直接獲取頂點索引。

1、示例

第一個示例表明我們可以直接在表面網格上應用 Kruskal 的最小生成樹算法。

#include <CGAL/Simple_cartesian.h> #include <CGAL/Surface_mesh.h> #include <boost/graph/kruskal_min_spanning_tree.hpp> #include <iostream> #include <fstream> #include <list> typedef CGAL::Simple_cartesian<double> Kernel; typedef Kernel::Point_3 Point; typedef CGAL::Surface_mesh<Point> Mesh; typedef boost::graph_traits<Mesh>::vertex_descriptor vertex_descriptor; typedef boost::graph_traits<Mesh>::vertex_iterator vertex_iterator; typedef boost::graph_traits<Mesh>::edge_descriptor edge_descriptor; void kruskal(const Mesh& sm) {// We use the default edge weight which is the squared length of the edgestd::list<edge_descriptor> mst;boost::kruskal_minimum_spanning_tree(sm,std::back_inserter(mst));std::cout << "#VRML V2.0 utf8\n""Shape {\n"" appearance Appearance {\n"" material Material { emissiveColor 1 0 0}}\n"" geometry\n"" IndexedLineSet {\n"" coord Coordinate {\n"" point [ \n";vertex_iterator vb,ve;for(boost::tie(vb, ve) = vertices(sm); vb!=ve; ++vb){std::cout << " " << sm.point(*vb) << "\n";}std::cout << " ]\n"" }\n"" coordIndex [\n";for(std::list<edge_descriptor>::iterator it = mst.begin(); it != mst.end(); ++it){edge_descriptor e = *it ;vertex_descriptor s = source(e,sm);vertex_descriptor t = target(e,sm);std::cout << " " << s << ", " << t << ", -1\n";}std::cout << "]\n"" }#IndexedLineSet\n""}# Shape\n"; } int main(int argc, char** argv) {Mesh sm;std::string fname = argc==1?CGAL::data_file_path("meshes/knot1.off"):argv[1];if(!CGAL::IO::read_polygon_mesh(fname, sm)){std::cerr << "Invalid input file." << std::endl;return EXIT_FAILURE;}kruskal(sm);return 0; }

第二個示例展示了我們如何將屬性映射用于諸如 Prim 的最小生成樹之類的算法。該算法在內部也使用頂點索引屬性映射調用get(boost::vertex_index_t,sm)。對于這個類,Surface_mesh這歸結為一個身份函數,因為頂點是索引。

#include <CGAL/Simple_cartesian.h> #include <CGAL/Surface_mesh.h> #include <iostream> #include <fstream> // workaround a bug in Boost-1.54 #include <CGAL/boost/graph/dijkstra_shortest_paths.h> #include <boost/graph/prim_minimum_spanning_tree.hpp> typedef CGAL::Simple_cartesian<double> Kernel; typedef Kernel::Point_3 Point; typedef CGAL::Surface_mesh<Point> Mesh; typedef boost::graph_traits<Mesh>::vertex_descriptor vertex_descriptor; int main(int argc, char* argv[]) {Mesh sm;std::string fname = argc==1?CGAL::data_file_path("meshes/knot1.off"):argv[1];if(!CGAL::IO::read_polygon_mesh(fname, sm)){std::cerr << "Invalid input file." << std::endl;return EXIT_FAILURE;}Mesh::Property_map<vertex_descriptor,vertex_descriptor> predecessor;predecessor = sm.add_property_map<vertex_descriptor,vertex_descriptor>("v:predecessor").first;boost::prim_minimum_spanning_tree(sm, predecessor, boost::root_vertex(*vertices(sm).first));std::cout << "#VRML V2.0 utf8\n""DirectionalLight {\n""direction 0 -1 0\n""}\n""Shape {\n"" appearance Appearance {\n"" material Material { emissiveColor 1 0 0}}\n"" geometry\n"" IndexedLineSet {\n"" coord Coordinate {\n"" point [ \n";for(vertex_descriptor vd : vertices(sm)){std::cout << " " << sm.point(vd) << "\n";}std::cout << " ]\n"" }\n"" coordIndex [\n";for(vertex_descriptor vd : vertices(sm)){if(predecessor[vd]!=vd){std::cout << " " << std::size_t(vd) << ", " << std::size_t(predecessor[vd]) << ", -1\n";}}std::cout << "]\n"" }#IndexedLineSet\n""}# Shape\n";sm.remove_property_map(predecessor);return 0; }

8、表面網格 I/O

作為模型FaceGraph(請參閱部分曲面網格和 BGL API),CGAL::Surface_mesh可以使用多種不同的文件格式進行讀取和寫入。有關詳細信息,請參閱CGAL 和 Boost Graph Library包的I/O 函數以及多邊形網格處理包的I/O 函數。

此外,該包還提供來自CGAL 和 Boost Graph Library 中Surface_mesh包的 I/O 函數的特定重載。這允許直接從內部屬性映射讀取/寫入,有關更多信息,請參閱I/O 函數。

9、內存管理

內存管理是半自動的。內存隨著更多元素被添加到結構中而增長,但當元素被移除時內存不會減少。

當您添加元素并且基礎向量的容量耗盡時,向量會重新分配內存。由于描述符基本上是索引,因此它們在重新分配后引用相同的元素。

當您刪除一個元素時,它只會被標記為已刪除。在內部,它被放在一個空閑列表中,當您將元素添加到表面網格時,它們會從空閑列表中取出,以防它不為空。

對于所有元素,我們提供了一個函數來獲取已使用元素的數量,以及已使用和刪除元素的數量。對于頂點,函數分別是Surface_mesh::number_of_vertices()和Surface_mesh::number_of_removed_vertices()。num_vertices(const G&)第一個函數與BGL 包的免費函數略有不同。由于 BGL 樣式算法使用元素的索引來訪問臨時大小向量中的數據,因此num_vertices()此函數必須返回一個大于元素的最大索引的數字。

諸如Surface_mesh::Vertex_iterator僅枚舉未標記為已刪除的元素的迭代器。

要真正縮小使用的內存,Surface_mesh::collect_garbage()必須調用。垃圾收集還會壓縮與表面網格相關的屬性。

但是請注意,通過垃圾收集元素可以獲得新的索引。如果您保留頂點描述符,它們很可能不再引用正確的頂點。

1、 示例

#include <iostream> #include <CGAL/Simple_cartesian.h> #include <CGAL/Surface_mesh.h> typedef CGAL::Simple_cartesian<double> K; typedef CGAL::Surface_mesh<K::Point_3>網格; typedef Mesh::Vertex_index vertex_descriptor; 主函數() {網格米;Mesh::Vertex_index u;對于(無符號 整數i=0;i < 5++i){網格::頂點索引 v = m。add_vertex (K::Point_3(0,0,i+1));如果(i==2)你=v;}m.remove_vertex(u);std::cout << "插入 5 個頂點并移除 3 個頂點后\n"<< “#個頂點/#個頂點+#個刪除的頂點=<< m.number_of_vertices()<< " / " << m.number_of_vertices() + m.number_of_removed_vertices() << std::endl;std::cout << "遍歷頂點\n" ;{for (vertex_descriptor vd : m.vertices()){std::cout << m.point(vd) << std::endl;}}// 被使用或被移除的狀態存儲在屬性映射中Mesh::Property_map<Mesh::Vertex_index,bool> 移除= m.property_map<Mesh::Vertex_index, bool >( "v:removed" ).first;std::cout << "\n遍歷頂點并刪除頂點\n"<< “#個頂點/#個頂點+#個刪除的頂點=<< m.number_of_vertices()<< " / " << m.number_of_vertices() + m.number_of_removed_vertices() << std::endl;{unsigned int i = 0, end = m.number_of_vertices() + m.number_of_removed_vertices();對于( ; i < 結束; ++i) {頂點描述符 vh(i);assert(m.is_removed(vh) == removed[vh]);std::cout << m.point(vh) << ((m.is_removed(vh)) ? " R\n" : "\n" );}}m.collect_garbage();std::cout << "\n垃圾回收后\n"<< “#個頂點/#個頂點+#個刪除的頂點=<< m.number_of_vertices()<< " / " << m.number_of_vertices() + m.number_of_removed_vertices() << std::endl; {unsigned int i = 0, end = m.number_of_vertices() + m.number_of_removed_vertices();對于( ; i < 結束; ++i) {頂點描述符 vh(i);std::cout << m.point(vh) << ((m.is_removed(vh)) ? " R\n" : "\n" );}}返回0}

10、繪制Surface Mesh

可以通過調用CGAL::draw()來可視化表面網格,如以下示例所示。此函數打開一個新窗口,顯示給定的表面網格。對該函數的調用是阻塞的,也就是說,只要用戶關閉窗口,程序就會繼續。

#include <CGAL/Surface_mesh.h> #include <CGAL/draw_surface_mesh.h> #include <fstream> typedef CGAL::Simple_cartesian<double> Kernel; typedef Kernel::Point_3 Point; typedef CGAL::Surface_mesh<Point> Mesh; int main(int argc, char* argv[]) {const std::string filename = (argc>1) ? argv[1] : CGAL::data_file_path("meshes/elephant.off");Mesh sm;if(!CGAL::IO::read_polygon_mesh(filename, sm)){std::cerr << "Invalid input file." << std::endl;return EXIT_FAILURE;}CGAL::draw(sm);return EXIT_SUCCESS; }

此函數需要, 且僅在定義CGAL_Qt5宏時可用。CGAL_USE_BASIC_VIEWER與 cmake 目標鏈接CGAL::CGAL_Basic_viewer將鏈接CGAL_Qt5并添加定義CGAL_USE_BASIC_VIEWER。

11 實現細節

作為我們選擇的索引的整數類型boost::uint32_t。在 64 位操作系統上,它們只占指針大小的一半。他們仍然允許擁有 20 億個元素的網格。

我們用于std::vector存儲屬性。因此,通過訪問屬性映射的第 0 個元素的地址,您可以訪問底層原始數組。這可能很有用,例如將點數組傳遞給 OpenGL。

我們對刪除的元素使用*空閑列表。*這意味著當一個頂點被移除并稍后add_vertex被調用時,被移除元素的內存將被重用。這尤其意味著第 n 個插入的元素不一定具有索引n-1,并且在遍歷元素時它們不會按插入順序枚舉。

總結

以上是生活随笔為你收集整理的CGAL笔记之单元格复合体和多面体篇—曲面网格的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

黄p网站在线观看 | 国产区精品在线 | 日日日日日| 久久久久久久久久久久久影院 | 97视频免费在线 | 人人插人人做 | 日韩在线视频网 | 亚洲电影院| 久久深夜福利免费观看 | 成人免费观看视频网站 | 在线观看的a站 | av888.com| 精品a视频| 天天天天天天天天操 | 日韩在线视频二区 | 亚洲每日更新 | 亚洲九九九在线观看 | 福利区在线观看 | 国产精品欧美久久久久三级 | 亚洲午夜久久久久 | 午夜av一区二区三区 | 亚洲va欧美va人人爽春色影视 | 亚洲成人av电影 | 开心激情五月网 | 在线免费高清视频 | 波多野结衣资源 | 91网页版在线观看 | 91新人在线观看 | 色吧av色av | 国产不卡一区二区视频 | av中文字幕第一页 | 久久成人国产精品 | 深夜免费网站 | 麻豆精品传媒视频 | 99视频偷窥在线精品国自产拍 | 91视频xxxx| 亚一亚二国产专区 | 国产三级视频 | 久久久久久久国产精品影院 | 日本精品视频免费观看 | 日韩电影一区二区在线 | 午夜18视频在线观看 | 日日日日日 | 国产免费观看久久黄 | 欧美日韩国产一区二区三区在线观看 | 欧美激情综合五月色丁香小说 | av电影免费观看 | 久久精品—区二区三区 | 四虎影视国产精品免费久久 | av看片在线观看 | 国产视频午夜 | 久久成人国产精品入口 | 色婷婷伊人 | 九九九热 | 911在线| 日韩欧美黄色网址 | 天天操夜夜干 | 免费午夜视频在线观看 | 丝袜美腿一区 | 日日干网| 亚洲精品永久免费视频 | 中文字幕一区在线观看视频 | 99精品国产亚洲 | 99热免费在线 | 99视频精品免费视频 | 久久综合电影 | 日本h视频在线观看 | 亚洲成aⅴ人在线观看 | 久久精品国产一区二区三 | 日日夜夜噜噜噜 | 黄色在线观看免费 | 久久大片 | 免费观看一区二区三区视频 | 蜜臀久久99精品久久久酒店新书 | 激情综合啪啪 | 国产尤物视频在线 | 在线精品视频免费播放 | 成人av在线一区二区 | 久久久国产网站 | 精品999在线 | 中文字幕在线观看第二页 | 国产视频一区二区在线观看 | 91麻豆福利| 久久久久美女 | 久久午夜免费观看 | 黄色精品久久久 | 国产免费又黄又爽 | 一区二区久久 | 丁香激情综合国产 | 久久精品99 | 香蕉视频在线观看免费 | 在线视频 你懂得 | 亚洲精品视频在线观看视频 | 国产精品欧美久久 | 欧美日韩aaaa| 色香蕉在线视频 | 亚洲精品玖玖玖av在线看 | 国产精品原创 | 狠狠操.com | 国产精品高潮呻吟久久久久 | 伊人成人久久 | 97精品国产手机 | 最新中文字幕在线观看视频 | 99国内精品 | 日韩精品不卡 | 日日摸日日添夜夜爽97 | 午夜在线日韩 | 久久美女高清视频 | 中文字幕精品三级久久久 | 国产手机在线精品 | 国产黄a三级 | 久久久国产精品成人免费 | 日韩视频在线观看视频 | 国产毛片久久久 | 婷婷在线资源 | 麻豆视频在线观看免费 | 成人免费视频观看 | 超碰在线天天 | 激情综合网色播五月 | 国产涩图| 91精品久久久久久久久久入口 | 中文字幕亚洲精品日韩 | 久久久久久久久免费视频 | 手机在线永久免费观看av片 | 国产96精品 | 成人丝袜 | 中文字幕国产 | 久二影院 | 日日躁夜夜躁aaaaxxxx | 免费涩涩网站 | 欧美电影黄色 | 91精品国产乱码在线观看 | 美女久久久久久 | 天天做天天看 | 日韩欧美精选 | 人人爽人人做 | 黄色影院在线观看 | 91精品黄色 | 亚洲精品视频在 | 久久久久亚洲精品国产 | 不卡精品| 婷婷精品国产一区二区三区日韩 | 国产高清视频在线观看 | www亚洲视频 | av在线永久免费观看 | 日日夜夜国产 | 久久黄色网址 | 欧美精品一区二区性色 | 国产日韩中文在线 | 91刺激视频 | 最新中文字幕 | 麻豆系列在线观看 | 亚洲激情精品 | 91精品久久久久久久久久入口 | 伊人开心激情 | 日韩欧美xx| 伊人视频| 国产午夜精品理论片在线 | 国产成年免费视频 | 一区二区精品在线 | 人人插人人做 | 久久国产精品系列 | 在线观看免费色 | 国产护士hd高朝护士1 | 色网站在线看 | 免费在线观看亚洲视频 | 久久精品一二三区白丝高潮 | 欧美亚洲一级片 | 国产视频资源在线观看 | av一区二区在线观看中文字幕 | 天天爱天天操天天干 | 欧美精品亚洲二区 | 欧美日韩综合在线 | 免费高清av在线看 | 国产亚洲综合精品 | 亚洲综合五月天 | 怡红院av久久久久久久 | www.天天射 | 婷婷在线色 | 亚洲女欲精品久久久久久久18 | 天天综合日日夜夜 | 日日干日日操 | 国产123av | 亚洲精品色婷婷 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产一区福利 | 日韩欧美在线免费 | 久久国产系列 | 丁香一区二区 | 久久国产精品久久久 | 欧美 日韩精品 | 免费黄色在线 | 九色91福利 | 久久人网| 国产xx在线 | 成人国产精品电影 | 国产69熟 | 日韩精品中文字幕在线观看 | 国产精品亚州 | 久久久久久久久久久久久9999 | 精品在线观看视频 | 国产在线97| 99国产精品一区 | 日日爱网址 | 久久高清免费视频 | 国产经典av| 九九有精品| 不卡电影免费在线播放一区 | 美女福利视频一区二区 | 91精品久久久久久久久 | 久久久精品国产免费观看一区二区 | 国产亚洲欧美日韩高清 | 欧美午夜剧场 | 涩涩网站在线 | 91久久国产综合精品女同国语 | 91日韩在线专区 | 国产成人精品在线 | 91精品视频免费看 | 一区二区中文字幕在线播放 | 婷婷久久一区 | 91亚洲成人 | 国产一区成人在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 97碰碰精品嫩模在线播放 | 久久精品视频网址 | 一级黄色免费网站 | 久久视频在线免费观看 | 91在线日韩 | 久久毛片网站 | 久久久久国产一区二区三区四区 | 天堂av在线免费 | 丁香六月伊人 | 黄色片网站免费 | 一区中文字幕 | 色天天久久 | 亚洲精品免费观看视频 | 久久在现| 九九热只有精品 | 亚洲永久精品在线观看 | 国产精品a久久久久 | 成年免费在线视频 | 欧美色精品天天在线观看视频 | 日韩天天操 | 国产精品99久久久久久武松影视 | 国产乱码精品一区二区三区介绍 | 久久有精品 | 久草在线手机视频 | av国产网站 | 国产一级视频 | 91精品在线免费视频 | 中国一区二区视频 | 国产一区二区久久 | 国产成人精品一区一区一区 | 99精品国产福利在线观看免费 | 黄网站免费大全入口 | 精品一区电影国产 | 国产精品毛片久久久久久久久久99999999 | 天天综合网天天综合色 | 久久久久久久久久电影 | 色婷婷欧美 | 91九色视频在线 | 久久久午夜视频 | 黄色在线免费观看网址 | 成人理论在线观看 | 亚州精品国产 | 国产精品综合av一区二区国产馆 | 黄色亚洲大片免费在线观看 | 国产97在线观看 | 久精品在线观看 | 国产精品av免费 | 欧美日本一区 | 五月开心激情网 | 欧美日韩在线观看一区二区 | 成人精品99| 国产精品97 | 啪啪小视频网站 | 久久久99精品免费观看乱色 | 人人爽人人干 | 在线观看中文字幕 | av在线播放快速免费阴 | 偷拍精品一区二区三区 | 久久成人精品 | 久草视频免费播放 | 国产视频色 | 亚洲草视频| 欧美精品一区二区三区一线天视频 | 伊人久在线 | 日韩网站免费观看 | 免费国产一区二区视频 | 久久久久| 日韩videos | 欧美日在线观看 | 天天操夜夜操夜夜操 | 国产福利电影网址 | 在线 国产 亚洲 欧美 | 日韩一级电影在线 | 国产做爰视频 | 五月婷婷在线观看 | 久草电影免费在线观看 | 国产福利小视频在线 | 精品超碰 | 韩国av免费在线 | 国产在线高清视频 | 久色婷婷 | 国产亚洲精品久久久久久久久久久久 | 国产人免费人成免费视频 | 欧美国产日韩激情 | 色婷婷亚洲精品 | 99精品视频免费在线观看 | 天天操操 | 国产亚洲在线 | av中文国产 | 波多野结衣在线播放视频 | 亚洲成人在线免费 | japanesexxxhd奶水| 日韩欧美在线一区 | 免费在线播放黄色 | 午夜在线免费视频 | 久久国产精品偷 | 黄色片网站 | www激情网 | 国产精品系列在线观看 | 九九99 | 永久免费精品视频网站 | 国产黄网站在线观看 | 日韩电影在线观看一区二区 | 国产成人一区二区三区久久精品 | 亚洲精品无 | 日韩视频三区 | 成年人免费电影 | 日韩欧美xxx| 六月色婷婷 | 国产九九九精品视频 | 欧美在线一二区 | 欧美日韩在线观看一区二区 | 99久久久久成人国产免费 | 亚洲精品午夜久久久 | 午夜骚影 | 日韩精品在线免费观看 | 伊人六月| 久久99九九99精品 | 午夜精品久久久久 | 亚洲精品乱码久久久一二三 | 中文字幕 在线看 | 国产青春久久久国产毛片 | 黄色精品免费 | 黄色小视频在线观看免费 | 激情综合五月天 | 国产精品成人一区二区 | 999国内精品永久免费视频 | 国产精品黑丝在线观看 | www.久艹| 欧美精品国产综合久久 | 97精品超碰一区二区三区 | 91自拍视频在线观看 | 中国成人一区 | 99综合视频 | 18pao国产成视频永久免费 | 国产成人免费在线观看 | 成人av免费在线播放 | 中文字幕中文字幕中文字幕 | 亚洲精品看片 | 91精品视频免费在线观看 | 日韩黄色软件 | 深爱开心激情网 | 在线观看免费视频 | 91精品爽啪蜜夜国产在线播放 | 国产成人免费在线观看 | 国产亚洲精品美女久久 | 九九热精品视频在线播放 | 久久精精品视频 | 九九九九九国产 | 久久不射网站 | 日本字幕网| 综合网天天 | 色在线中文字幕 | 久久久久久久18 | 99热超碰在线 | 日韩精品视频一二三 | 97视频人人澡人人爽 | 天天伊人网 | 999热视频| 在线a亚洲视频播放在线观看 | 美女网站在线观看 | 激情图片qvod | 在线观看免费av网站 | 日日夜夜91 | 欧美日韩一区二区三区在线观看视频 | 一区二区三区日韩视频在线观看 | 黄色av电影 | 亚洲精品久久视频 | 欧美激情综合五月色丁香 | 日韩r级电影在线观看 | 欧美一级欧美一级 | 久久久久亚洲a | 91精品久久久久久粉嫩 | av大全在线 | 国产精品成人免费精品自在线观看 | 欧美性生交大片免网 | 国产一级片播放 | 色综合久久综合 | 国产免费影院 | 国产成人在线观看 | 国产91精品一区二区绿帽 | 久久综合福利 | 丁香九月激情 | 色综合天| 最新免费av在线 | 亚洲.www | 亚洲综合射 | 国产99视频在线观看 | 亚洲传媒在线 | 精品免费视频 | www.操.com| 亚洲欧洲国产日韩精品 | aaa免费毛片 | 国产精品久久久久久久久岛 | 处女av在线 | 久久国产亚洲 | 午夜精品一区二区国产 | 在线成人一区二区 | 成人97人人超碰人人99 | 久久网页 | 国产精品粉嫩 | 免费看一级特黄a大片 | 国产精品久久久久久久久久久久午夜 | 91在线看 | 久久国内精品视频 | 欧美一区二区在线免费观看 | 国产中文字幕视频在线观看 | 亚洲精品国产拍在线 | 久草在线免费电影 | 97看片吧| 在线观看涩涩 | 久久爽久久爽久久av东京爽 | www.国产在线视频 | 久久在线影院 | 日韩视频精品在线 | 在线综合色 | 久黄色| 久草精品视频 | 91精品国产一区二区在线观看 | 久久久国产精品成人免费 | 最新av免费在线 | 国产黄色在线看 | 五月婷婷综合在线 | 国产精品久久久久久久久久了 | 在线视频日韩 | 国产精品 国内视频 | 亚洲影院国产 | 91色在线观看 | 国产精品九九久久久久久久 | 久久精品中文视频 | 成人欧美亚洲 | 中文字幕视频网 | 色九九视频| 伊人激情综合 | 91香蕉视频好色先生 | 中文字幕精品三区 | 久久久久女教师免费一区 | 精品视频专区 | 国产日产欧美在线观看 | 中文字幕有码在线观看 | 亚洲精品久久久久久国 | 日韩高清二区 | 96在线 | 国产亚洲在 | 欧美精品午夜 | 草免费视频 | 麻豆国产精品永久免费视频 | 色综合中文综合网 | 人人射人人射 | 国产拍揄自揄精品视频麻豆 | 久久久久久美女 | 亚洲女欲精品久久久久久久18 | 国产精品理论在线观看 | 国产精品一区二区三区免费看 | 久草综合在线观看 | 婷婷综合影院 | 久久久官网 | 亚洲一区视频在线播放 | 国产精品mv在线观看 | 免费观看91视频大全 | 欧美不卡视频在线 | 亚洲九九 | 欧美成人a在线 | a色网站 | 一级片免费观看视频 | 91麻豆文化传媒在线观看 | 丁香久久激情 | 国产麻豆精品久久一二三 | 日韩1级片 | 久久论理| 亚洲国产精品久久久久久 | 久久99久久精品 | 欧美日韩中文字幕视频 | 成年人在线免费视频观看 | 九九免费观看全部免费视频 | 中国一级片免费看 | 手机成人在线 | 激情婷婷在线观看 | 成人小视频在线免费观看 | 日本精品免费看 | 午夜影院日本 | 成人av一区二区兰花在线播放 | 在线黄色国产 | 国产精品免费观看网站 | 国产成人高清在线 | 日韩欧美有码在线 | 国产区在线视频 | www.在线观看av | 激情电影影院 | 久久在线视频在线 | 摸阴视频 | 开心激情网五月天 | 成人av网站在线播放 | 国产视频在线观看一区二区 | 国产精品伦一区二区三区视频 | 国产一区福利 | 99久久精品国产亚洲 | 国产一区二区三区免费在线 | 日本激情视频中文字幕 | 一区二区三区四区在线免费观看 | 亚洲精品一区二区三区高潮 | 99久久精品国产免费看不卡 | 成人黄色av免费在线观看 | 2024国产精品视频 | 日韩精品中文字幕有码 | 在线视频电影 | 综合色中色| 亚洲免费av观看 | 丁香激情综合 | 日韩欧美在线播放 | 一本到在线 | 国产精品永久在线观看 | 韩国av一区 | 在线观看成人毛片 | 精品播放 | 午夜精品一区二区国产 | 久久国产午夜精品理论片最新版本 | 91大神精品视频在线观看 | 超碰97人人射妻 | 欧美男女爱爱视频 | 激情婷婷综合网 | 91麻豆精品国产91久久久久 | 韩国在线一区二区 | 婷婷丁香狠狠爱 | 久久久精品综合 | av一区二区三区在线播放 | 91丨九色丨高潮丰满 | 超碰人人在线观看 | 国产精品24小时在线观看 | 天天操比 | 91av视频免费在线观看 | 久久av中文字幕片 | 亚洲精品av在线 | 国产麻豆视频 | 丁香五香天综合情 | 国产精品久久久久永久免费 | 黄色三级免费片 | 日本性动态图 | 欧美 亚洲 另类 激情 另类 | 日韩久久久久久久久久久久 | 丁香九月激情综合 | 黄色在线观看免费 | 黄色av三级在线 | 五月婷婷导航 | 国产99久久精品一区二区永久免费 | 97国产一区| 国产在线播放一区二区三区 | 在线观看中文字幕一区二区 | 天天拍天天色 | 日韩理论影院 | 久草在线久草在线2 | 成全在线视频免费观看 | 九九久久久久久久久激情 | 日本精品视频一区 | 在线欧美日韩 | 超碰久热 | 欧美在一区| 色夜视频 | 久久综合五月 | 国产精品18久久久久白浆 | 欧美日韩精品在线免费观看 | 免费黄色av电影 | 色搞搞| 免费观看成年人视频 | 久久99精品久久久久久秒播蜜臀 | 国产黑丝一区二区三区 | 天天摸日日摸人人看 | 日韩不卡高清视频 | 国产伦精品一区二区三区免费 | 久久久久久久看片 | 黄色免费网站下载 | 中文字幕.av.在线 | 欧美亚洲一级片 | 99精品国产福利在线观看免费 | 免费看三级黄色片 | 狠狠色丁香久久综合网 | 日韩国产欧美视频 | 欧美一区免费在线观看 | 国产精品入口久久 | 美女激情影院 | 国产高清黄 | 一区二区三区手机在线观看 | 成人毛片久久 | 中文字幕在线观看91 | 日本在线精品视频 | 最近日本mv字幕免费观看 | 久久刺激视频 | 蜜桃麻豆www久久囤产精品 | 中文字幕欲求不满 | 人人爽人人爱 | 97av在线视频免费播放 | 国产精品永久免费观看 | 日韩av五月天 | av资源免费看 | 91香蕉视频在线 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 日韩欧美在线综合网 | 中文在线免费视频 | 人人爽人人爽人人爽学生一级 | 尤物九九久久国产精品的分类 | 国产成人精品三级 | 久草五月 | 奇米影视777影音先锋 | 337p日本欧洲亚洲大胆裸体艺术 | 国产精品久久99 | 国产 日韩 在线 亚洲 字幕 中文 | 欧美另类交人妖 | 国产91在线播放 | 国产一区二区在线免费 | 久久在现| 国产999精品久久久久久麻豆 | 看片在线亚洲 | 国产成人性色生活片 | 日韩av网页| 欧美日韩另类视频 | 中文字幕中文字幕在线中文字幕三区 | 激情偷乱人伦小说视频在线观看 | 中文字幕激情 | 五月天色婷婷丁香 | 国产精品一二 | 久久久国产精品网站 | 国产成人免费精品 | 黄色影院在线免费观看 | 夜夜婷婷 | 超碰在线观看av | 国产精品资源网 | 中文字幕在线视频一区二区 | 在线看国产精品 | 五月天婷婷狠狠 | 国产免费又黄又爽 | 在线观看中文字幕视频 | 日韩av专区 | 亚洲另类在线视频 | 五月婷影院 | 久久婷婷国产 | 午夜av在线播放 | 亚洲视频播放 | 国产乱视频 | 久久久精品99 | 91精品爽啪蜜夜国产在线播放 | 精品av网站 | 91成品人影院 | 999电影免费在线观看 | 日日日日| 天天色天天 | 99热这里只有精品免费 | 99精品久久99久久久久 | 天天爽人人爽 | 午夜精品一区二区三区在线播放 | 免费观看高清 | a天堂一码二码专区 | 中文字幕精品三区 | 99在线精品免费视频九九视 | 97视频在线观看免费 | 丁香六月伊人 | 国产精品国产毛片 | 九九免费观看全部免费视频 | 99人成在线观看视频 | 久久久久国产成人精品亚洲午夜 | 午夜私人影院 | 美女久久久久久 | 日韩理论电影在线观看 | 久草在线免费看视频 | 九九涩涩av台湾日本热热 | 国产精品美女久久久久久 | 精品一区二区在线免费观看 | 黄色毛片网站在线观看 | 久久久亚洲麻豆日韩精品一区三区 | 国产精品99久久免费观看 | 四虎国产精品成人免费4hu | 五月开心激情网 | 日韩videos | 国产亚洲精品中文字幕 | 在线三级中文 | www婷婷| 国产精品国产自产拍高清av | av福利网址导航 | 婷婷丁香色综合狠狠色 | 超级av在线| 青青河边草观看完整版高清 | 69av久久 | 日韩黄色免费电影 | 精品国产免费久久 | 免费一级日韩欧美性大片 | 久久69av| 91网站免费观看 | 国产老太婆免费交性大片 | 精品国产免费久久 | 国产精品久久视频 | 黄污网站在线 | 91av影视 | 欧美性超爽 | 久久久久免费看 | 三级av在线免费观看 | 久久伊99综合婷婷久久伊 | 91亚洲狠狠婷婷综合久久久 | 日韩av影视在线观看 | 在线影院中文字幕 | 精品国产乱码久久久久久久 | 亚洲精品xxx | 国产精品第 | 亚洲精品久久久久www | 在线播放 日韩专区 | 中文一二区 | www.色午夜,com | 四虎精品成人免费网站 | 天堂视频一区 | 亚洲一区精品二人人爽久久 | 在线播放国产一区二区三区 | 免费黄a | 99精品视频精品精品视频 | 毛片久久久 | 日韩在线不卡视频 | 久久久亚洲精华液 | 97电影在线看视频 | 色狠狠综合 | 国产又粗又猛又黄又爽的视频 | 夜夜看av | 欧美大片mv免费 | 国产黄在线 | 亚洲精品在线观看免费 | 成人香蕉视频 | 天天干天天操天天操 | 91精品久久久久久久久 | 91在线www | 久久精品香蕉视频 | 热久久免费国产视频 | 欧美精品久久久久久久久久 | 久久免费试看 | 天天鲁天天干天天射 | 日韩高清一二三区 | 国际精品久久 | 精品欧美一区二区精品久久 | 成人亚洲免费 | 国产精品一级视频 | 国产91大片| 9在线观看免费高清完整 | 黄在线 | 欧美日韩国产免费视频 | 久久成人免费视频 | 男女视频国产 | 超碰97在线人人 | 精品欧美一区二区三区久久久 | 一级精品视频在线观看宜春院 | www久久精品| 久久久久久久久久毛片 | 国产精品入口久久 | 欧美激情奇米色 | 偷拍福利视频一区二区三区 | 婷婷六月激情 | 九九99靖品 | 日本精品一区二区三区在线播放视频 | 国产成人免费 | 天天干天天搞天天射 | 亚洲视频1区2区 | 黄色av高清 | 亚洲五月婷婷 | 久久免费福利 | 久久精品视频在线看 | 天天干天天草 | 国产精品99久久久久久宅男 | 色99色| 精品欧美一区二区在线观看 | 六月激情 | 色香天天 | 人人舔人人射 | 日韩精品在线看 | 久草网在线视频 | 精品女同一区二区三区在线观看 | 精品国产一区二区三区噜噜噜 | 丁香在线观看完整电影视频 | 天天操天天射天天 | 五月婷婷综合网 | 奇人奇案qvod | 日韩在线免费视频观看 | 日韩av在线免费看 | 欧美孕交vivoestv另类 | 99久久精品一区二区成人 | 国产不卡高清 | 91激情小视频 | 99超碰在线观看 | 99色网站 | 亚洲国产中文字幕在线观看 | 69视频国产 | 欧美一二三区在线播放 | 国产高清一区二区 | 99久久日韩精品视频免费在线观看 | 夜夜夜草| 久久久久久久久久久网 | 在线观看日本高清mv视频 | 日本精品在线 | 欧美福利精品 | 日韩精品一区二区三区三炮视频 | 日日夜夜爱 | 国产一级做a爱片久久毛片a | 日韩经典一区二区三区 | 精品国产伦一区二区三区观看方式 | 国产福利网站 | 欧美日韩国产精品爽爽 | 亚洲欧美色婷婷 | 欧美一二区在线 | 国产成人精品一区在线 | 免费三级黄色片 | 黄色的视频网站 | 日韩高清一二区 | 天天爽天天爽天天爽 | 中文字字幕在线 | 爱爱av网站 | 亚洲精品99| 日韩欧美国产激情在线播放 | 欧美色图狠狠干 | 亚州国产视频 | 国产一区二区在线免费播放 | 中文字幕在线视频网站 | 五月婷婷六月丁香 | 午夜影院在线观看18 | 91人人澡 | 久久免费视频一区 | 国产免费久久 | 中文一区在线观看 | 日韩av一区在线观看 | 色综合久久五月 | 日韩中文字幕在线不卡 | 九色91福利 | 日韩视频中文字幕在线观看 | 久久久久麻豆 | 国产不卡免费av | 69av久久| 日韩免费看视频 | 久草在线观看资源 | 日韩在线观看的 | 日韩精品久久久久久 | 韩日电影在线免费看 | 婷婷亚洲综合五月天小说 | 国产亚洲精品久久久久久久久久 | 麻豆视频免费看 | av一本久道久久波多野结衣 | 天天干天天插 | 视频一区二区三区视频 | 国产一区在线观看视频 | 日本激情视频中文字幕 | 天天干天天干天天射 | 精品国产视频在线观看 | 国产一二三精品 | 欧美影片| 欧美激情第一页xxx 午夜性福利 | 日本一区二区三区视频在线播放 | 808电影免费观看三年 | 99久久99久国产黄毛片 | 久久久久久久av麻豆果冻 | 国产群p视频 | 精品久久久久久亚洲综合网站 | 亚洲免费av片 | 午夜精品久久久久久久爽 | 欧美一级片在线观看视频 | 97av免费视频 | 在线中文字母电影观看 | 91av资源网| 波多野结衣精品在线 | 亚洲一区二区三区毛片 | 欧美一级片在线 | 一区二区三区免费在线观看视频 | 欧美久久久影院 | 二区三区视频 | 天天草夜夜 | 日日草视频 | av中文字幕网址 | 在线日韩精品视频 | 亚洲国产97在线精品一区 | 中文字幕视频在线播放 | 日韩色在线观看 | 一级黄色在线免费观看 | 99精品黄色片免费大全 | 中文字幕视频免费观看 | 毛片播放网站 | 国产高清在线看 | 在线免费观看黄色小说 | av中文字幕网站 | 成人在线播放av | 久热精品国产 | 色综合久久久久久久久五月 | 亚洲人在线7777777精品 | 国内精品久久久久影院一蜜桃 | 超碰国产在线 | 欧美久久久久久久久久 | 色在线视频网 | 狠狠色丁香久久婷婷综合_中 | 美女久久 | 黄色电影在线免费观看 | 成人欧美亚洲 | 免费在线观看成人av | 亚洲无线视频 | 国产色在线 | 国产精品国产三级国产 | 国产探花视频在线播放 | 久久狠狠亚洲综合 | 久久精品毛片基地 | 狠狠综合| 99久久久久国产精品免费 | 三级av中文字幕 | 精品在线播放视频 | 中文字幕在线免费 | 99精品在线观看视频 | 欧美日韩在线视频免费 | 国产欧美最新羞羞视频在线观看 | 亚洲精品欧美专区 | 久久免费a | 麻豆视频免费入口 | 国产高清在线免费 | 九九精品久久 | 午夜国产在线 | 国产美女精品视频 | 久久av中文字幕片 | 欧美天天综合网 | 91在线中文 | 狠狠躁夜夜躁人人爽视频 | 亚洲精品xx| 久久人人爽人人人人片 | 91成人精品在线 | 五月天激情视频 | 欧美成年网站 | 国产三级午夜理伦三级 | 日韩欧美网址 | 丁香在线观看完整电影视频 | 一区二区三区四区五区在线 | 国产日韩精品在线观看 | 亚洲国产精品日韩 | 久久99精品国产99久久6尤 | 亚洲成人av影片 | 激情久久伊人 | 国产成人亚洲精品自产在线 | 五月婷亚洲 | 成年人精品 | 欧美美女激情18p | 欧美精品一二三 | 欧美少妇的秘密 | 国产无遮挡又黄又爽馒头漫画 | 亚洲成色777777在线观看影院 | 日本激情视频中文字幕 | 91中文字幕视频 | 国产在线观看不卡 | 一本一本久久a久久精品综合妖精 | 亚洲特级毛片 | av免费在线观看1 | 国产人成在线视频 | 免费观看全黄做爰大片国产 | 国产色婷婷精品综合在线手机播放 | 国产精品美女久久久久久久 | 成人在线观看资源 | 国产黄色特级片 | 久久久久高清毛片一级 | 色婷婷成人网 | 人人添人人澡人人澡人人人爽 | 丁香婷婷久久 | 国产精美视频 | 久久官网| 国产福利午夜 | 精品一区二区三区久久久 | 亚洲精品中文字幕在线 | 偷拍区另类综合在线 | 偷拍精偷拍精品欧洲亚洲网站 | 69国产成人综合久久精品欧美 | 日日天天| 亚洲精品www | 日韩视频在线播放 | 99r精品视频在线观看 | 一本一道久久a久久精品蜜桃 | 国产精品免费久久久久 | 欧美精品久 | 毛片区 | 日韩av成人免费看 | 午夜视频在线瓜伦 | 色综合久久88 | 91成人区| 国产精品6|