## PyCGAL-Tools-Package-Python-Project 🛠️
### 简介
该项目的主要目的是将 **pycgal-tools-builder-msvc-project** 编译生成的动态链接库(**.DLL / .SO文件**)封装为一个 Python 可用的安装包。
<img src="https://mr-lai.oss-cn-zhangjiakou.aliyuncs.com/huaweimetabook/napkin-selection%20(5).png" alt="napkin-selection (5)" style="zoom: 33%;" />
### 构建步骤
1. **准备依赖项**:确保 C++ 项目已成功编译,并且 DLL 文件位于 `pycgal/` 目录中。确认你已经安装了 `setuptools` 和 `wheel`。
2. **创建 Python 安装包**:在 `pycgal-tools-package-python-project/pycgal` 目录中运行以下命令:
```
python setup.py sdist bdist_wheel
```
这将会在 `dist/` 目录下生成 `.tar.gz` 和 `.whl` 文件,这两个文件是最终发布的安装包格式。
3. **安装和测试**:你可以通过 `pip` 安装本地生成的 wheel 包,进行测试:
```cmd
# 创建安装环境, 目前 MSVC 编译的DLL只能适配 Python==3.11.8 版本。
conda create -n pybind11env python=3.11.8
# 激活环境
conda activate pybind11env
# 安装
pip install dist/pycgal-1.x.x-cp311-cp311-win_amd64.whl
# 测试,能够成功输出版本即可
python
>>> import pycgal
>>> pycgal.get_version()
>>>
```
![image-20241008202957177](https://mr-lai.oss-cn-zhangjiakou.aliyuncs.com/huaweimetabook/image-20241008202957177.png)
### 代码结构说明
```python
pycgal-tools-package-python-project
│
├── pycgal # 编译好的动态链接库
│ ├──__init__.py # Python层面 针对 C++接口进行封装
│ ├──pycgal.pyd
│ ├──xxx.dll
│ └── ...
│
├── setup.py # 构建Python包逻辑代码
├── MANIFEST.in
├── LICENSE
└── README.md
```
### 接口说明
#### 1. 创建模块 (`_create`)
此模块提供了创建 2D 和 3D 几何体的接口,包括点、多边形、折线、三角形、面等。
- `get_version() -> str`: 获取当前库的版本信息。
- `create_point_2(x: float, y: float) -> Point_2`: 创建一个二维点。
- `create_point_3(x: float, y: float, z: float) -> Point_3`: 创建一个三维点。
- `create_polygon_2(points: List[Point_2]) -> Polygon_2`: 创建一个二维多边形。
- `create_polyline_3(points: List[Point_3]) -> Polyline_3`: 创建一条三维折线。
- `create_triangle_3(p1: Point_3, p2: Point_3, p3: Point_3) -> Triangle_3`: 创建一个三角形。
- `create_face(points: List[Point_3]) -> Face`: 创建一个面片。
- `face2triangles(face: Face) -> List[Triangle_3]`: 将一个面片拆分为多个三角形。
- `create_surface_mesh(vertices: List[Point_3], vertex_indexes: List[int], internal_point: Point_3 = None) -> Surface_mesh`: 创建表面网格。
- `create_polyhedron_by_faces(faces: List[Face], internal_point: Point_3 = None) -> Nef_polyhedron`: 通过面创建多面体。
- `create_polyhedron_by_triangles(triangles: List[Triangle_3], internal_point: Point_3 = None) -> Nef_polyhedron`: 通过三角形创建多面体。
- `create_nef_by_triangles(triangles: List[Triangle_3], internal_point: Point_3 = None) -> Nef_polyhedron`: 通过三角形创建 Nef 多面体。
- `polyhedron2nef(polyhedrons: Nef_polyhedron) -> Nef_polyhedron`: 将一个普通多面体转换为 Nef_polyhedron多面体。
- `nef2polyhedron(nef: Nef_polyhedron) -> Polyhedron`: 将 Nef_polyhedron多面体转换为普通多面体。
- `create_regular_cylinder(polygon: Polygon_2, z_min: float, height: float) -> Polyhedron`: 创建一个正柱体。
- `create_prism(bottom_poly: Polygon_2, top_poly: Polygon_2, z_min: float, height: float) -> Polyhedron`: 创建一个棱柱。
#### 2. 坐标转换模块 (`_converter`)
用于在地理坐标系和笛卡尔坐标系之间转换几何对象。
- `initialize_projection(ori_epsg: int = 4490, target_epsg: int = 4978) -> None`: 初始化投影转换系统。
- `transform_point_2(point: Point_2) -> Point_2`: 转换二维点的坐标。
- `transform_point_3(point: Point_3) -> Point_3`: 转换三维点的坐标。
- `transform_polygon_2(poly: Polygon_2) -> Polygon_2`: 转换二维多边形的坐标。
- `transform_segment_3(segment: Segment_3) -> Segment_3`: 转换三维线段的坐标。
- `transform_polyline_3(line: Polyline_3) -> Polyline_3`: 转换三维折线的坐标。
- `transform_triangle_3(triangle: Triangle_3) -> Triangle_3`: 转换三维三角形的坐标。
- `transform_face(face: Face) -> Face`: 转换面的坐标。
- `transform_surface_mesh(mesh: Surface_mesh) -> Surface_mesh`: 转换表面网格的坐标。
- `transform_polyhedron(polyhedron: Polyhedron) -> Polyhedron`: 转换多面体的坐标。
- `transform_nef(nef: Nef_polyhedron) -> Nef_polyhedron`: 转换 Nef_polyhedron 多面体的坐标。
- `cleanup_projection() -> None`: 清理投影转换系统。
#### 3. 可视化模块 (`_view`)
提供一个简单的可视化接口,支持加载几何体进行显示。
- `create_previewer() -> Previewer`: 创建一个预览器,用于几何体可视化。
- `load_polyhedron(viewer: Previewer, polyhedron: Polyhedron, rgba: Tuple[float, float, float, float]) -> None`: 加载并显示多面体。
- `load_surface_mesh(viewer: Previewer, mesh: Surface_mesh, rgba: Tuple[float, float, float, float]) -> None`: 加载并显示表面网格。
- `load_nef(viewer: Previewer, nef: Nef_polyhedron, rgba: Tuple[float, float, float, float]) -> None`: 加载并显示 Nef 多面体。
- `load_segments(viewer: Previewer, segments: List[Segment_3], rgba: Tuple[float, float, float, float]) -> None`: 加载并显示三维线段。
#### 4. 工具模块 (`_tools`)
包括几何体的操作和一些打印功能。
- `adjust_faces_for_polyhedron(faces: List[Face], internal_point: Point_3) -> List[Face]`: 调整多面体的面方向。
- `adjust_triangles_for_polyhedron(triangles: List[Triangle_3], internal_point: Point_3) -> List[Triangle_3]`: 调整多面体的三角形方向。
- `print_point_3(point: Point_3) -> List[float]`: 打印并返回点的坐标。
- `print_polyline_3(polyline: Polyline_3) -> List[List[float]]`: 打印并返回折线的坐标。
- `print_polyhedron(polyhedron: Polyhedron) -> Tuple[List[List[float]], List[List[int]]]`: 打印并返回多面体的顶点和面索引。
- `print_nef(nef_polyhedron: Nef_polyhedron) -> Tuple[List[List[float]], List[List[int]]]`: 打印并返回 Nef_polyhedron 多面体的顶点和面索引。
- `print_surface_mesh(mesh: Surface_mesh) -> Tuple[List[List[float]], List[List[int]]]`: 打印并返回表面网格的顶点和面索引。
- `calculate_bounding_box(geometry: Union[Polyline_3, Polyhedron, Nef_polyhedron, Surface_mesh]) -> List[Point_3]`: 计算几何体的边界框。
#### 5. 相交检测模块 (`_intersect`)
用于测试几何体之间的相交情况。
- `do_intersect(obj1: Union[Polyline_3, Polyhedron, Nef_polyhedron, Surface_mesh], obj2: Union[Polyline_3, Polyhedron, Nef_polyhedron, Surface_mesh]) -> bool`: 检测两个几何对象是否相交。
- `do_intersect_one_to_many(target: Union[Surface_mesh, Polyline_3, Nef_polyhedron, Polyhedron], objects: Union[List[Polyhedron], List[Nef_polyhedron]]) -> List[int]`: 检测一个复杂几何对象与多个简单几何体的相交情况。返回 1 表示相交,0 表示不相交。
### 使用示例
1. **创建一个棱形体**
```python
import pycgal
# 创建 一个 上宽下窄的 棱形体, 这里要注意点的顺序,不能自相交,且底部和顶部的点的位置和数量要一致
b_p1 = pycgal.create_point_2(113.23, 23)
b_p2 = pycgal.create_point_2(113.23, 23.28)
b_p3 = pycgal.create_point_2(113.748, 23.28)
b_p4 = pycgal.create_point_2(113.748, 23)
t_p1 = pycgal.create_point_2(113.227, 22.4)
t_p2 = pycgal.create_point_2(113.227, 23.48)
t_p3 = pycgal.create_point_2(113.778, 23.48)
t_p4 = pycgal.create_point_2(113.778, 22.4)
没有合适的资源?快使用搜索试试~ 我知道了~
pycgal-tools-builder是一个用于将 C++ 实现的 3D 几何工具库封装为 Python 可调用安装包的项目
共79个文件
dll:46个
cpp:9个
h:6个
需积分: 5 0 下载量 25 浏览量
2024-10-09
14:44:48
上传
评论
收藏 28.07MB ZIP 举报
温馨提示
python 简介 pycgal-tools-builder 是一个用于将 C++ 实现的 3D 几何工具库封装为 Python 可调用安装包的项目。该工具利用 CGAL(Computational Geometry Algorithms Library)提供的高效算法,支持多种几何操作,包括创建、检测、操作 3D 几何体,以及执行拓扑运算。 本项目的目标是简化几何计算库在 Python 环境中的使用。通过 pycgaltools-builder,用户可以快速配置环境、编译 C++ 源代码,并生成可以直接在 Python 中导入和使用的安装包。这让开发者无需深入了解 C++ 或 CGAL 库,即可在 Python 项目中高效处理 3D 几何数据。 主要功能包括: 在 Python 中使用高效的 C++ 几何计算 创建简单和复杂的3D几何体创建接口 提供针对不同3D几何体类型的相交判断的统一接口 提供转换3D几何体坐标的接口 提供可视化窗口,支持渲染不同的3D几何体
资源推荐
资源详情
资源评论
收起资源包目录
pycgal-tools-builder-master.zip (79个子文件)
pycgal-tools-builder-master
pycgal-tools-package-python-project
setup.py 1KB
pycgal
vtkCommonDataModel-9.3.dll 4.13MB
__init__.py 19KB
zlib1.dll 89KB
vtkCommonCore-9.3.dll 11.63MB
vtkRenderingCore-9.3.dll 1.81MB
vtkFiltersVerdict-9.3.dll 192KB
vtkFiltersHybrid-9.3.dll 765KB
pycgal-tools-builder-msvc-project.pdb 69.4MB
python311.dll 5.73MB
vtksys-9.3.dll 306KB
vtkFiltersSources-9.3.dll 650KB
python3.dll 54KB
mpfr-6.dll 406KB
vtkRenderingOpenGL2-9.3.dll 2.23MB
glew32.dll 502KB
pycgal-tools-builder-msvc-project.lib 2KB
pycgal.pyd 1.54MB
vtkloguru-9.3.dll 66KB
gmp-10.dll 418KB
vtkCommonComputationalGeometry-9.3.dll 167KB
tiff.dll 448KB
vtkCommonTransforms-9.3.dll 200KB
libpng16.dll 198KB
vtkRenderingUI-9.3.dll 78KB
sqlite3.dll 1.06MB
vtkCommonMisc-9.3.dll 2.63MB
fmt.dll 140KB
pugixml.dll 202KB
vtkDICOMParser-9.3.dll 98KB
pycgal-tools-builder-msvc-project.exp 853B
vtkFiltersHyperTree-9.3.dll 281KB
vtkRenderingHyperTreeGrid-9.3.dll 40KB
vtkCommonExecutionModel-9.3.dll 823KB
verdict.dll 174KB
vtkFiltersCore-9.3.dll 5.57MB
liblzma.dll 184KB
vtkCommonMath-9.3.dll 150KB
vtkFiltersGeneral-9.3.dll 3.28MB
vtkCommonColor-9.3.dll 99KB
libcurl.dll 558KB
jpeg62.dll 663KB
vtkInteractionStyle-9.3.dll 215KB
vtkmetaio-9.3.dll 516KB
vtkFiltersGeometry-9.3.dll 921KB
vtkIOImage-9.3.dll 1.02MB
vtkImagingCore-9.3.dll 1.59MB
vtkCommonSystem-9.3.dll 123KB
vtkkissfft-9.3.dll 22KB
vtkImagingSources-9.3.dll 180KB
vtktoken-9.3.dll 98KB
proj.dll 3.22MB
LICENSE 1KB
MANIFEST.in 102B
README.md 12KB
LICENSE 1KB
pycgal-tools-builder-msvc-project
pycgal-tools-builder-msvc-project.sln 1KB
include
Tools.h 2KB
Geometries.h 2KB
Intersection.h 3KB
CoordinateConverter.h 1KB
Visualization.h 3KB
ProjectCommon.h 2KB
CMakeLists.txt 2KB
pycgal-tools-builder-msvc-project.vcxproj.user 453B
src
Visualization.cpp 8KB
Tools.cpp 8KB
BindingsTools.cpp 4KB
Bindings.cpp 15KB
Geometries.cpp 11KB
CoordinateConverter.cpp 6KB
Intersection.cpp 13KB
Main.cpp 5KB
VtkInit.cpp 162B
pycgal-tools-builder-msvc-project.vcxproj.filters 3KB
pycgal-tools-builder-msvc-project.vcxproj 8KB
README.md 5KB
.gitignore 466B
README.md 3KB
共 79 条
- 1
资源评论
LeonDL168
- 粉丝: 2523
- 资源: 632
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功