最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

python - Conical Slicing 3D printing seems to change angle with movement of gecode - Stack Overflow

programmeradmin3浏览0评论

I'm trying to do conical slicing for 3D printing. I have tried both the original researchers code and my own code but they to both have the same problem. The angle is just fine when I don't move the g code. But to make it work properly I have to move all the g code so it aligns with the origin and the cone effect is right. But as I move all of the g code the same way towards the origin, it seems to change the angle of the transformation. When it is fully at the origin, it has none of the angled effect and is seemingly just transformed downwards at the same rate all over the object not in a conical fashion.

Conical Slicing article This is An article that describes conical slicing better than I can.

I have tried everything I can think of. Here is my code:

import re

import numpy as np

import time


FILE_NAME = 'Shape-Cyl.gcode'      # filename including extension

FOLDER_NAME = 'gcodes/'                              # name of the subfolder in which the gcode is located

CONE_ANGLE = 32                                      # transformation angle

CONE_TYPE = 'outward'                                # type of the cone: 'inward' & 'outward'

FIRST_LAYER_HEIGHT = 0.2                            # moves all the gcode up to this height. Use also for stacking

PLATE_X = 110                                       # moves your gcode away from the origin into the center of the bed (usually bed size / 2)

PLATE_Y = 110

X_MOVE = 0

Y_MOVE = 0

theta = np.radians(CONE_ANGLE)



def move(x,y):

    x,y = x-220,y-220

    return x,y



def replace_z(x,y,z_val,e_val):

    if CONE_TYPE == 'outward':

        c = -1

    elif CONE_TYPE == 'inward':

        c = 1

    z_val = z_val + c * (np.tan(theta) * np.sqrt(x**2+y**2))

    #move(x,y,1)

    row_new = "G1"+" X"+str(round(x,3))+ " Y"+str(round(y,3))+" Z"+str(round(z_val+FIRST_LAYER_HEIGHT,3))+" E"+str(e_val)+"\n"

    return row_new



def backtransform_data(data):

    new_data = []

    pattern_X = r'X[-0-9]*[.]?[0-9]*'

    pattern_Y = r'Y[-0-9]*[.]?[0-9]*'

    pattern_Z = r'Z[-0-9]*[.]?[0-9]*'

    pattern_E = r'E[-0-9]*[.]?[0-9]*'

    pattern_G = r'\AG[1] '



    x_new, y_new = 0, 0

    z_layer = 0

    e_new = 0

    for row in data:

        g_match = re.search(pattern_G, row)



        if g_match is None:

            new_data.append(row)

        else:

            x_match = re.search(pattern_X, row)

            y_match = re.search(pattern_Y, row)

            z_match = re.search(pattern_Z, row)

            e_match = re.search(pattern_E, row)



            if x_match is None and y_match is None and z_match is None:

                new_data.append(row)

            else:

                if z_match is not None:

                    z_layer = float(z_match.group(0).replace('Z', ''))

                if x_match is not None:

                    x_new = float(x_match.group(0).replace('X', ''))

                if y_match is not None:

                    y_new = float(y_match.group(0).replace('Y', ''))

                if e_match is not None:

                    e_new = float(e_match.group(0).replace('E', ''))

                x_new,y_new = move(x_new,y_new)

                new_data.append(replace_z(x_new,y_new,z_layer,e_new))

    return new_data



def main(path):



    with open(path, 'r') as f_gcode:

        data = f_gcode.readlines()

    data_bt = backtransform_data(data)#data_bt is data_backtransformed

    data_bt_string = ' '.join(data_bt)

    data_bt = [row + ' \n' for row in data_bt_string.split('\n')]

    data_bt_string = ''.join(data_bt)

    path_write = re.sub(r'gcodes', 'gcodes_backtransformed', path)

    path_write = re.sub(r'.gcode','_bt.gcode', path_write)

    print(path_write)

    with open(path_write, 'w+') as f_gcode_bt:

        f_gcode_bt.write(data_bt_string)

    print('File successfully backtransformed.')

    return None



starttime = time.time()

main(FOLDER_NAME + FILE_NAME)

endtime = time.time()

print('GCode translated, time used:', endtime - starttime)
发布评论

评论列表(0)

  1. 暂无评论