3D打印CLI文件的读取(附代码)

CLI

英文全称:COMMON LAYER INTERFACE
中文名称:通用层接口。
推荐从官方网址看一下其完整的内容:
(COMMON LAYER INTERFACE (CLI))

简介

通用层接口 (CLI) 是一种通用格式,用于将几何数​​据输入到基于层制造技术 (LMT) 的制造系统模型。适用于树脂的逐层光固化、粉末的烧结或粘合、片材的切割、熔融材料的固化以及任何其他逐层构建模型的系统。

格式

有二进制数据格式与ASCII数据格式,本文主要是介绍二进制格式,ASCII格式给出官网的例子。两种格式的异如下:
相同点:二者头文件是相同的。
不同点:ASCII格式有几何信息开始标志,二进制没有开始标志,头信息结束之后直接就是数据。

1.ASCII数据格式

下面是官网给的例子
3D打印CLI文件的读取(附代码)_第1张图片

2.二进制数据格式

3D打印CLI文件的读取(附代码)_第2张图片


给一个我已经读出来的例子,例子中是一个简单的立方体,编号0.01.cli
其中的换行是我人为换的,并不是开始就是这样。

3D打印CLI文件的读取(附代码)_第3张图片

代码

python

此代码是我从该网站得来的,非常感谢宝哥的开源。python源码
但是由于他的代码是一行显示的,后面我经过排版,修复其中几个小问题才能跑起来,不过也存在一个问题。直接运行报错,代码为:

byt_int, = struct.unpack("h", byts)

报错原因是

struct.error: unpack requires a buffer of 2 bytes

但是在报错地方打上断点,程序就能运行了,并且能准确读出信息,由于我对python代码不是很熟悉,简单搜一下没有解决这个问题,就暂时先搁置了,如果有大佬知道还望不吝赐教。下面给出具体代码。

import struct
class Que:  # 定义一个队列的类
    def __init__(self):
        self.L = []
 
    def creat_que(self, num):  # 创建队列
        for i in range(0, num):
            self.L.append(str(b'x'))  #
            return self.L
 
    def push(self, item):  # 在末尾增加一个,开头删除一个,实现栈操作
        self.L.append(item)
        if self.L.__len__() > 11:
            self.L.pop(0)
        return self.L
 
    def str_head(self):
        st = [item.replace("b'", '')  # 从链表L中将b'删去
              for item in self.L]
        st = [item.replace("'", '')  # 从链表L中将'删去
              for item in st]
        st = ''.join(st)  # 连接字符串
        return st  # 返回一个字符串
 
    def b2int(self):  # 将读取到的二进制字节转化为 unsign int (2个字节)
        un_int, = struct.unpack("h", self.L[0])  # h在python中是整型
        return un_int
 
que_headerend = Que()  # 实例化一个对象来处理$$HEADEREND
que_headerend.creat_que(11)  # 创建一个包含11个元素的队列,用于判断是不是头部信息结束
que_layer = Que()  # 实例化一个对象来
que_layer.creat_que(2)  # 队列,用于寻找128/129
 
 
class Structure:
    def __init__(self, f_dir, f_w):  # CI,id,dir,n,p1x,p1y,... pnx,pny
        self.UNIT = 0  # 单位
        self.LAYERS = 0  # 多少层
        self.f = f_dir  # 二进制文件???
        self.f_ascii = f_w  # 输出文件???
        self.head = {}
        self.CI_start = 0  # 128/129???
        self.layer_thick = 0  # 层厚
        self.CI_layer = 0  # 128/129???
        self.id = 0  # 标识

你可能感兴趣的:(3D打印,python,java,链表)