基于chenhan的测地路径解
chenhancc的Python项目详细描述
chenhancc
====
python中的一种快速测地线算法,它跨越曲面和多边形。如果使用三维图形和三角形网格,您会发现它很有用。如果给定一个pt<;a>;作为种子,则此算法会找到网格上任意点<;p>;的平滑点。
<;p>;
此算法纯粹基于Shiqing的论文,他也为我提供了这段美妙的C++代码。我所要做的就是做一些更改,这样就可以将它编译为一个python库。纯python实现与c++->;python转换之间的时间或效率差异至少为210x倍。
<;/>;
我衷心感谢他的帮助。离散测地线问题的chen和han算法改进。ACM图形事务(TOG)。2009年8月1日;28(4):104.
```
----
运行测试
----
下面的代码片段是测试Chenhancc库的一些示例::
-
-
使用python3进行的简单测试/usr/bin/env python3
sting base model');
bmodel=cbasemodel();
bmodel.loadmodel(verts,faces);
print('testing rich model');
rmodel.loadmodel(verts,faces);
rmodel.preprocess();
demos上面。然后在为chenhancc安装sharedobject之后,您还应该安装另一个blender插件来查看网格上的实时路径。存储库的链接是[这里](https://github.com/aalavandhaann/ch_bl_geodesics)。安装插件后,开始单击网格并查看连续单击之间的路径。
演示-搅拌机
----
您将在"演示"文件夹中找到"搅拌机"文件夹。有一个混合文件可以测试场景中加载的网格。只要确保加载一个网格,用鼠标选择它并运行脚本`(alt-p)`。您应该可以在Blender的文本编辑器中看到代码中提供的选定顶点之间的路径。在下面的代码中,更改"svid"和"evid"以更改顶点选择。` svid`是种子顶点索引,`evid`是应该找到路径的目标顶点索引。
代码::python
将IChWith进一步PriorityQueue作为IChWith进一步PriorityQueue的IChWith进一步PriorityQueue进行排队;
>m=c.active_对象;
>svid=0;
>evid=20000;
returnl[n:]+l[:n];
>def createPathMesh(point):
>myvertexlist=[[2,2,2,2,2],[4,4,4,4,4,4,4,4,4,4,6,6,6,6,6,6,>
obname="path_u"+str(len(points));
me=bpy.data.meshes.new(obname);
ob=bpy.data.objects.new(obname,me);
bmesh在这里可以做任何事情…
对于index,co in enumerate(points):
v=bm.verts.new(co);
v.index=index;
bm.verts.sure_lookup_table();
co in enumerate(points[1:]:
v1=bm.verts[index-1];
v2=bm.verts[index];
e=bm.edges.new((v1,v2));
scn=bpy.context.scene;
scn.objects.link(ob);
scn.objects.active=ob;
ob.select=true;
if(m):
verts=[];
faces=[];
loops=m.data.loops;
bmodel=richmodel();
m.data.vertices[evid].select=true;
m.data.vertices:
p3d=point3d(v.co.x,v.co.y,v.co.z);
verts.append(p3d);
m.data.polygons:
f-vids=[loops[lid].vertex嫒index for lid in f.loop嫒indICES];
faces.append(face(f_vids[0],f_vids[1],f_vids[2]);
bmodel.loadmodel(verts,faces);
bmodel.preprocess();
emethod=ichwithfurtpriorityqueue(bmodel,set([svid]);
emethod.execute();
paths=emethod.findsourcevertex(evid,[]);
paths=rotate(paths,1);
path_verts=[];
路径中的epoint:
pt=epoint.get3dpoint(bmodel);
path_verts.append(vector((pt.x,pt.y,pt.z));
创建pathmesh(path_verts);
打印('done found路径::');
-
-
安装
-
-
**在任何操作系统上(Linux、OS X、Mac、Windows)**
-克隆此存储库
-在分发库文件中导航
-运行"python3 setup.py build"-创建
-运行"python3 setup.py install--user`-用于在本地库中进行复制
-或者这可以很快成为pip,或者已经作为``pip3 install chenhancc``
**自己编译所有内容的先决条件**
-此代码是使用binder创建的pybind11的magic绑定器编译的。
*[github活页夹链接](https://github.com/rosettacommons/binder)。
*[pybind11的github链接](https://github.com/pybind/pybind11)。
====
python中的一种快速测地线算法,它跨越曲面和多边形。如果使用三维图形和三角形网格,您会发现它很有用。如果给定一个pt<;a>;作为种子,则此算法会找到网格上任意点<;p>;的平滑点。
<;p>;
此算法纯粹基于Shiqing的论文,他也为我提供了这段美妙的C++代码。我所要做的就是做一些更改,这样就可以将它编译为一个python库。纯python实现与c++->;python转换之间的时间或效率差异至少为210x倍。
<;/>;
我衷心感谢他的帮助。离散测地线问题的chen和han算法改进。ACM图形事务(TOG)。2009年8月1日;28(4):104.
```
----
运行测试
----
下面的代码片段是测试Chenhancc库的一些示例::
-
-
使用python3进行的简单测试/usr/bin/env python3
sting base model');
bmodel=cbasemodel();
bmodel.loadmodel(verts,faces);
print('testing rich model');
rmodel.preprocess();
demos上面。然后在为chenhancc安装sharedobject之后,您还应该安装另一个blender插件来查看网格上的实时路径。存储库的链接是[这里](https://github.com/aalavandhaann/ch_bl_geodesics)。安装插件后,开始单击网格并查看连续单击之间的路径。
演示-搅拌机
----
您将在"演示"文件夹中找到"搅拌机"文件夹。有一个混合文件可以测试场景中加载的网格。只要确保加载一个网格,用鼠标选择它并运行脚本`(alt-p)`。您应该可以在Blender的文本编辑器中看到代码中提供的选定顶点之间的路径。在下面的代码中,更改"svid"和"evid"以更改顶点选择。` svid`是种子顶点索引,`evid`是应该找到路径的目标顶点索引。
代码::python
将IChWith进一步PriorityQueue作为IChWith进一步PriorityQueue的IChWith进一步PriorityQueue进行排队;
>svid=0;
>evid=20000;
>def createPathMesh(point):
>myvertexlist=[[2,2,2,2,2],[4,4,4,4,4,4,4,4,4,4,6,6,6,6,6,6,>
obname="path_u"+str(len(points));
me=bpy.data.meshes.new(obname);
ob=bpy.data.objects.new(obname,me);
bmesh在这里可以做任何事情…
对于index,co in enumerate(points):
v=bm.verts.new(co);
v.index=index;
bm.verts.sure_lookup_table();
co in enumerate(points[1:]:
v1=bm.verts[index-1];
v2=bm.verts[index];
e=bm.edges.new((v1,v2));
scn=bpy.context.scene;
scn.objects.link(ob);
scn.objects.active=ob;
ob.select=true;
if(m):
verts=[];
faces=[];
loops=m.data.loops;
bmodel=richmodel();
m.data.vertices:
p3d=point3d(v.co.x,v.co.y,v.co.z);
verts.append(p3d);
m.data.polygons:
f-vids=[loops[lid].vertex嫒index for lid in f.loop嫒indICES];
faces.append(face(f_vids[0],f_vids[1],f_vids[2]);
bmodel.loadmodel(verts,faces);
bmodel.preprocess();
emethod=ichwithfurtpriorityqueue(bmodel,set([svid]);
emethod.execute();
paths=emethod.findsourcevertex(evid,[]);
paths=rotate(paths,1);
path_verts=[];
路径中的epoint:
pt=epoint.get3dpoint(bmodel);
path_verts.append(vector((pt.x,pt.y,pt.z));
创建pathmesh(path_verts);
打印('done found路径::');
-
-
安装
-
-
**在任何操作系统上(Linux、OS X、Mac、Windows)**
-克隆此存储库
-在分发库文件中导航
-运行"python3 setup.py build"-创建
-运行"python3 setup.py install--user`-用于在本地库中进行复制
-或者这可以很快成为pip,或者已经作为``pip3 install chenhancc``
**自己编译所有内容的先决条件**
-此代码是使用binder创建的pybind11的magic绑定器编译的。
*[github活页夹链接](https://github.com/rosettacommons/binder)。
*[pybind11的github链接](https://github.com/pybind/pybind11)。