【pyclipper+增材CAM】轮廓偏置

news2024/11/24 20:57:03

在增材打印CAM中,我们需要在切片得到的每层轮廓中规划生成打印路径。传统的三轴3D打印的常见填充方式有:轮廓平行填充方向平行填充。其中轮廓平行填充主要是通过轮廓偏置实现的。

pyclipper安装使用

Python下安装pyclipper库,命令行输入pip指令:

pip install pyclipper

通过 import pyclipper 导入使用。

pyclipper基础

pyclipper是Python环境下的Clipper库,主要用于平面闭合多边形或非闭合多线段的裁剪(clipping)和偏置(offsetting)。

重要术语:

  • 裁剪(Clipping): 指二维平面图形之间的四个布尔操作:交集(intersection)、并(union)、差(difference )和异或(exclusive-or))中的任何一个。

  • 路径(Path): 是一个有序的顶点集合,它定义一个单一的几何轮廓(contour),要么是一条线(一个开放的路径),要么是一个多边形(一个闭合的轮廓)。

  • 直线(Line): 或者多线段(polyline) 是一个包含两个或多个顶点的开放路径。

  • 多边形(Polygon): 通常是指一个二维的区域,其边界是一个外部不相交的闭合轮廓。

  • 轮廓(Contour): 同路径(path)。

  • 孔(Hole): 是一个多边形中不属于多边形的封闭区域。一个“孔多边形”是一个封闭的路径。

  • 多边形填充规则(Polygon Filling Rule): 填充规则,定义了平面封闭区域中的内部区域(即需要填充的区域)和外部的区域(即“孔”,不需要填充的区域)。

需要掌握的Clipper基础:

  • Clipper库 | 坐标圆整和精度控制
  • Clipper库 | 类型和填充规则

代码实现

import math
import vtk
from pyclipper import *

def numeric_scaling(digits: 'int > 0' = 7, *, pos: list):
    def decorate(func):
        def scaled(*_args):
            __args = list(_args)
            f = math.pow(10, digits)  # 数值精度,默认为7位小数
            for p in pos:
                if isinstance(_args[p], int) or isinstance(_args[p], float):
                    __args[p] *= f
                elif isinstance(_args[p], list):
                    __args[p] = [[tuple(map(lambda x: x * f, pt)) for pt in path] for path in _args[p]]
                else:
                    pass
            _result = func(*tuple(__args))  # _result is list of paths
            _result = [[tuple(map(lambda x: x / f, pt)) for pt in path] for path in _result]
            return _result

        return scaled

    return decorate


@numeric_scaling(digits = 7, pos = [0, 1])
def offset(polys, delta, jt = JT_SQUARE):  # 偏置函数,输人多边形:[[[pt1_x,pt2_y],...,[ptN_x,ptN_y]],[...],...]
    pco = PyclipperOffset()
    pco.AddPaths(polys, jt, ET_CLOSEDPOLYGON)
    sln = pco.Execute(delta)  # 偏置距离delta
    return sln  # 返回偏置曲线

# 轮廓平行路径填充
def genCpPath_clipper(boundaries, interval, shellThk):  # 输人:轮廓、偏置距离、填充带宽
    offsetPolyses = []  # 偏置曲线列表
    delta = interval / 2  # 首次偏置距离
    polys = offset(boundaries, -delta, JT_SQUARE)
    offsetPolyses.append(polys)  # 偏置曲线存放在offsetPolys中
    while math.fabs(delta) < shellThk:  # 循环直至偏置距离大于填充带宽
        delta += interval
        polys = offset(boundaries, -delta, JT_SQUARE)
        if polys is None or len(polys) == 0:
            break  # 已到偏置区域中心,则退出
        offsetPolyses.append(polys)
    return offsetPolyses

按理来讲装饰器定义和调用应该分开来,这里为了方便所以写在一个文件中。

测试结果

偏置轮廓填充结果如下图所示,其中黑色为切片得到的轮廓,红色为偏置填充的路径。

在这里插入图片描述

第24层偏置填充结果:

在这里插入图片描述

第27层偏置填充结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ZigBee环境配置与工程创建 -- IAR for 8051 8.10

IAR8.10版本的安装相对于10.30.1版本的安装要简单的过&#xff0c;同样是做ZigBee的裸机项目开发工具&#xff0c;10版本之前都是旧版的操作界面&#xff0c;如果后期运行协议栈的话可以适配Z-Stask2.5.1a版本 文章目录1. IAR环境安装2.IAR for 8051工程创建3.工程配置4.工程编…

星火计划学习笔记——Apollo决策规划技术详解及实现(以交通灯场景检测为例)

文章目录1. Apollo决策技术详解1.1 Planing模块运行机制1.2 Apollo决策功能的设计与实现1.2.1参考路径 Reference Line1.2.2 交规决策 Traffic rule process1.2.3 路径决策 Path decider1.2.4 速度决策 Speed decider1.2.5 Planing模块运行流程1.2.6 场景 Scenarios2. 交规决策…

AW EC2实例

Hello大家好&#xff0c;我们今天的课时内容是EC2。 EC2大家应该都是比较熟悉了&#xff0c;相信绝大部分人应该都用过。这部分涉及到的内容肯定是比较多的&#xff0c;希望大家对于一些基础的概念已经有所了解了&#xff0c;这个课时我和大家一起总结一下。 当然&#xff0c…

Canvas画布详解API代码演示

Canvas .<canvas>标签&#xff1a;画布标签&#xff0c;本身不具备绘图能力&#xff0c;可以通过脚本(JS)来实现 width:设置画布宽度&#xff0c;默认为300px height:设置画布高度&#xff0c;默认为150px Canvas API&#xff1a;提供通过JavaScript在<canvas>上绘…

【手把手】分布式定时任务调度解析之xxl-job

1、xxl-job好像很火&#xff1f; 在之前我写的讲解Quartz中有介绍过&#xff0c;Quartz有差不多二十年的历史&#xff0c;调度模型已经非常成熟了&#xff0c;而且很容易集成到Spring中去&#xff0c;用来执行业务任务是一个很好的选择。但是越早的设计存在的问题也越明显&…

自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 在无线通信系统中&#xff0c;由于多径效应及码间干扰的存在&#xff0c;信号误码率会升高。均衡技术是一种对抗码间干扰的重要技术。本文将介绍LMS均衡和RLS均衡两种均衡算法。在线性和非线性均…

[附源码]Python计算机毕业设计Django颐养天年辅助平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

水溶性CY7-COOH|Cas1353546-78-7|水溶CY7-羧酸

水溶性CY7-COOH|Cas1353546-78-7|水溶CY7-羧酸 CAS号&#xff1a;1628790-40-8&#xff08;氯化物&#xff09;、1628897-82-4&#xff08;不含阴离子&#xff09;、2241083-63-4&#xff08;内盐&#xff09; 外观&#xff1a; 绿色粉末 分子量&#xff1a;519.12 分子式&…

sa-token进阶

介绍sa-token实际应用的高阶用法。 文章目录路由拦截鉴权绑定角色权限标识角色校验/权限校验测试角色标识测试权限标识进阶用法路由拦截鉴权 定义配置类SaTokenConfigure->实现WebMvcConfigurer&#xff0c;设置一个只对login请求放通的拦截器&#xff1a; Configuration …

商密SIG月度动态:文件加密支持SM4算法、Anolis 8.8将默认集成 | 龙蜥 SIG

商密软件栈 SIG 目标&#xff1a;基于Anolis Linux&#xff0c;在整个系统软件层面&#xff08;包括硬件&#xff0c;固件&#xff0c;bootloader&#xff0c;内核以及 OS&#xff09;实现以商密算法为主的全软件栈商密操作系统&#xff0c;结束一直以来商密软件生态碎片化的状…

B站李沐讲论文笔记Resnet

研一学生笔记&#xff0c;若有看官&#xff0c;笔下留情 作者 Kaiming He Xiangyu Zhang Shaoqing Ren&#xff08;在蔚来居然&#xff09; Jian Sun&#xff08;导师&#xff09; Microsoft Research 摘要&#xff1a; 我们提出一个网络&#xff0c;他可以简化网络的训练&…

【 Apifox】Apifox的前置操作与后置操作

Apifox官网地址&#xff1a;http://apifox.cn/a103abcc 文章目录一、断言二、提取变量三、数据库操作结语一、断言 后置操作支持添加断言&#xff0c;可对接口返回的数据&#xff08;或响应时间&#xff09;设置断言&#xff0c;判断是否符合预期。 设置断言&#xff1a; 运行…

与客户共解难题:BPM如何高标准国产化?

作为深耕中国本土BPM市场近二十年的老牌企业&#xff0c;上海斯歌已服务超过700家大型及超大型企业&#xff0c;在医药、汽车汽配、智能制造、房地产等行业积淀了深厚的服务能力&#xff0c;从始至终斯歌都在思考&#xff1a;如何以最佳的服务能力解决客户需求&#xff0c;成就…

Express 学习 - 02-中间件应用-urlencoded解析

请求模拟 什么是中间件&#xff1f; 中间件的本质是传递给express的一个回调函数&#xff1b;这个回调函数接受三个参数&#xff1a;请求对象&#xff08;request对象&#xff09;&#xff1b;响应对象&#xff08;response对象&#xff09;&#xff1b;next函数&#xff08;在…

用Rust写的Turbopack,比Vite快20倍?

日前&#xff0c;Vercel正式宣布推出新的包装工具Turbopack。Vercel声称这是用Rust编写的Webpack的继任者。在大型应用程序中&#xff0c;它的速度是Vite的10倍&#xff0c;是Webpack的700倍。维特的维护者对此表示怀疑。 Vercel发布新的开源工具Turbopack Vercel是Next。js框…

【数模】层次分析法

对于同一层次中的指标&#xff0c;通过两两比较&#xff0c;构造出判断矩阵&#xff0c;记为A。 aij表示因素i对因素j的重要性比较结果&#xff0c;可采用1-9的量化比例标度来反映其重要程度。 1&#xff1a;指标两个相比&#xff0c;A比B同等重要 3&#xff1a;指标两个相比…

E. Permutation Game(game)

Problem - E - Codeforces 两个玩家正在玩一个游戏。他们有一个整数1&#xff0c;2&#xff0c;...&#xff0c;n的排列组合&#xff08;排列组合是一个数组&#xff0c;其中从1到n的每个元素正好出现一次&#xff09;。这个排列组合没有按升序或降序排序&#xff08;即排列组合…

YOLO系列目标检测算法——YOLOS

YOLO系列目标检测算法目录 - 文章链接 YOLO系列目标检测算法总结对比- 文章链接 YOLOv1- 文章链接 YOLOv2- 文章链接 YOLOv3- 文章链接 YOLOv4- 文章链接 Scaled-YOLOv4- 文章链接 YOLOv5- 文章链接 YOLOv6- 文章链接 YOLOv7- 文章链接 PP-YOLO- 文章链接 …

视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型

概率编程使我们能够实现统计模型&#xff0c;而不必担心技术细节。这对于基于MCMC采样的贝叶斯模型特别有用。 最近我们被客户要求撰写关于Stan的研究报告&#xff0c;包括一些图形和统计输出。 R语言中RStan贝叶斯层次模型分析示例stan简介 Stan是用于贝叶斯推理的C 库。它…

十、Docker 复杂安装之3主3从redis集群配置

假设公司现在1-2亿条数据需要缓存,单机单台设备肯定扛不住的,这个时候就需要分布式存储,用redis如果落地呢?本期就带着大家搭建一个3主3从redis集群。 1、拉取redis6.0.8镜像 涉及命令:docker pull redis:6.0.8 实例: 2、创建6个redis容器实例 涉及命令: docker ru…