CITYML到可打印STL

citygml2stl的Python项目详细描述


要将CityGML数据转换为的python库 可在FDM 3D打印机上打印的STL 3D模型,例如 RepRap打印机。

支持citygml版本2.0.0、1.0.0和0.4.0。其他版本也可以。

这是Free software GIS班的课程 Faculty of Civil EngineeringCzech Technical University in Prague(学术 2014/2015年,F组)。许可证为麻省理工学院(见许可证)。

Image of generated STL

德国柏林亚历山德普拉茨市。数据)Research Center Karlsruhe, Institute for Applied Computer Science

安装

要安装,只需使用常规的python方法,比如pip。 建议在安装此或其他要求之前安装cython。 支持python 3.3+、2.7和pypy。

pip install Cython
pip install citygml2stl

或者从克隆的存储库或未打包的源安装:

pip install Cython
pip install -r requirements.txt
python setup.py install

用法

要使用python中的cityglm2stl,请执行以下操作:

# import stufffromcitygml2stlimportcitygmlfromcitygml2stlimportpolygonsfromcitygml2stlimportstl# parse the CityGML filec=citygml.CityGML('Berlin_Alexanderplatz_v0.4.0.xml')# export to file berlin.stlwithstl.StlFile('berlin.stl')asberlin:# Specify as many types as you want,# or leave without arguments to get all city objectsforobjinc.get_objects_of_types('Building'):berlin.write_triangles(polygons.object2triangles(obj))

或者,如果您希望使用多个stl文件,请执行以下操作:

# initialize a counter for filenamescounter=0forobjinc.get_objects_of_types('Building'):withstl.StlFile('berlin{}.stl'.format(counter))asberlin:berlin.write_triangles(polygons.object2triangles(obj))counter+=1

注意,考虑到找到的大多数citygml数据的质量,stls可能不会作为 面将相互交叉。同时给出了算法的工作方式,顶点的顺序 一个方面是随机的,并不总是遵循右手法则。

也就是说,考虑到产出需要修复。使用公共云服务,如 netfabb Cloud甚至开放源码工具,如 ADMesh修复输出。

您甚至可以使用Python’s admesh模块修复stls:

importadmesh...filename='berlin{}.stl'.format(counter)withstl.StlFile(filename)asberlin:berlin.write_triangles(polygons.object2triangles(obj))s=admesh.Stl(filename)s.repair()# the results are often located on unthinkable coordinatess.translate(0,0,0)s.write_binary(filename)

注意,由于admesh模块的限制,当前无法重定向输出 对citygml2stl进行admesh,而不先将其写入文件。

从命令行调用的示例脚本安装到路径:

$ citygml2stl Berlin_Alexanderplatz_v0.4.0.xml
Converting Berlin_Alexanderplatz_v0.4.0.xml to Berlin_Alexanderplatz_v0.4.0.stl

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓为什么Java AudioEffect不支持双簧管?   增加内存后出现java IntelliJ堆大小错误   在unix/linux中工作的java中将unicode字符串转换为ASCII   java是否缺少正确对齐输出的值?   java Spring 3 MVC:动态表单中的onetomany(创建/更新时添加/删除)   java在接口中创建两个通用参数   lambda使用Java 8从嵌套列表中使用forEach查找项的替代方法是什么?   Java正则表达式匹配10位电话号码,中间有空格   linux将log4j外部化。使用命令行Java的属性文件   带有SSL的java简单RMI服务器   java无法为事务[…]打开JPA EntityManager无法获取驱动程序类“null”和URL“null”的连接   Android设备上的java Oauth Foursquare   for循环的ImageButton名称的java骰子模拟浓缩   java有没有简单的1d条形码阅读器?   如何在调用resultset后解决“无效字符串或缓冲区长度”。从java到访问mdb的getString()连接   在Java8中,是否可以使用JVM参数来控制何时(或在什么条件下)卸载类?