Python 3.x 输入一系列点或段的功能、包或方法,确定新区域何时关闭

Python 3.x 输入一系列点或段的功能、包或方法,确定新区域何时关闭,python-3.x,Python 3.x,我正在尝试为一台电火花线切割机使用gcode,它可以从一个薄圆盘上切割出许多相同的形状。它与运动平面正交,其路径由xy坐标列表定义。我首先解析gcode,以便能够隔离xy坐标,然后使用sympy在列表中创建点列表 我的最终目标是让程序能够识别每个新循环的闭合点。每当这种情况发生时,就再也没有任何东西支撑着它,它就会自由下落。我希望能够识别这个点,然后沿着移动路径在离该点一定距离的地方插值,这将改变机器当时的切割方式。通过目视检查,很容易看出这些点在哪里,但我越深入这个项目,它似乎变得越来越难。我

我正在尝试为一台电火花线切割机使用gcode,它可以从一个薄圆盘上切割出许多相同的形状。它与运动平面正交,其路径由xy坐标列表定义。我首先解析gcode,以便能够隔离xy坐标,然后使用sympy在列表中创建点列表

我的最终目标是让程序能够识别每个新循环的闭合点。每当这种情况发生时,就再也没有任何东西支撑着它,它就会自由下落。我希望能够识别这个点,然后沿着移动路径在离该点一定距离的地方插值,这将改变机器当时的切割方式。通过目视检查,很容易看出这些点在哪里,但我越深入这个项目,它似乎变得越来越难。我开始的一个地方是,用与我要切割的部分具有相同边数的点创建多边形,然后将计算面积与我自己的计算面积进行比较,知道尖端的大小

一旦它们相等,我知道我已经找到了包含一个片段的第一段代码,并且可以识别端点。从这里开始变得困难。如果我现在已经封闭了一个三角形,我只需要两个部分就可以有另一个尖端脱落,因为我可以把切割带回到已经移除的区域。一旦我的空间用完,但我需要进行转移动作,在我的新生产线上,需要三段才能再次释放一块

理想情况下,有一种方法可以定义未切割空间和先前切割的空间。可能通过不断添加到定义切割区域多边形的点列表中。我迷路了。我需要一个新的头脑,或者只是和别人谈谈。任何帮助、问题、想法或任何事情都将不胜感激。这是我承担的一个激情项目,也是我有史以来的第二个python程序,我深陷泥潭

以下是我分析点的源gcode: O5708 (804个提示IN-7419) (圆盘中心0,0) (启用M01) N0015 G90 N0020 M15 P0 N0025 G92 X1.9 Y.3 N0030 G50 G41 G01 X1.5 N0035 X1.3652 Y.312 N0040 X1.2722 Y.3901 N0045 Y.234 M01 N0050 X1.3652 Y.312 N0055 Y.156 N0060 X1.2722 Y.234 N0065 Y.078 N0070 X1.3652 Y.156 N0075 Y0 N0080 X1.2722 Y.078 N0085 Y-.078

…………。。 它比这要长得多。成千上万行,但也许你明白了

from sympy import *
from math import *
xy = ""
points = ""
count = 0
index = 0
indexprint = ""
import pyperclip

with open ('WIRE.txt', 'rt') as myfile:  # Open file lorem.txt for reading text
    mytext = myfile.read()   

mywords = mytext.split()
sides = 3

for word in mywords :
    if word[0] == 'X' or word[0] == 'Y':
        xy = xy + "\n" + word
    index +=1    
xy = xy.split()



for coordinate in xy:
    if coordinate[0] == 'X':
        lastxcoord = coordinate
    else:
        lastycoord = coordinate

    if xy[count][0] == xy[count - 1][0] and xy[count][0] == 'X':
        xy.insert(count, lastycoord)
    if xy[count][0] == xy[count - 1][0] and xy[count][0] == 'Y':
        xy.insert(count, lastxcoord)
    count += 1
count2 = 0


count2 +=1
for i in xy:   
    if count2 % 2 == 0:
        points = points + ' ' + i[1:] + '\n'
    elif count2 % 2 == 1:
        points = points + i[1:]
    count2 += 1



pyperclip.copy(points)
count2 = 0

for i in xy:
    i = i[1:]
    xy[count2] = i
    count2 += 1
tip = 0
i = 0


points2d = []
while i < 200:     #(len(xy) // 2)
    points2d.append(Point(xy[i],xy[i+1]))
    i += 2
    print('working')
i = 0

found = 0
firstpoly = 'no first poly yet'
while i < 70:
    s = tuple(points2d[i:i+sides])
    poly = Polygon(*s)



    try:
        if ((.00725865 - abs(poly.area)) < .0001) and ((.00725865 - abs(poly.area)) > -.0001) and (found != 1):
                placeh = tuple(points2d[i:i+sides])
                firstpoly = Polygon(*placeh)
                found = 1
                #print(poly)
                continue
    except:
        print('')
    '''    
    try:    
        print(poly.intersection(firstpoly))
    except:
        print('no intersection')
    '''

    i += 1
    #print(poly.sides[2])
    try:
        if firstpoly.sides[2] == firstpoly.intersection(poly):
            print('aha')

    except:
        print('okie')
来自sympy导入的
*
从数学导入*
xy=“”
points=“”
计数=0
索引=0
indexprint=“”
进口pyperclip
将open('WIRE.txt','rt')作为myfile:#打开文件lorem.txt以读取文本
mytext=myfile.read()
mywords=mytext.split()
侧面=3
对于mywords中的word:
如果单词[0]=“X”或单词[0]=“Y”:
xy=xy+“\n”+字
指数+=1
xy=xy.split()
对于xy坐标:
如果坐标[0]=“X”:
lastxcoord=坐标
其他:
lastycoord=坐标
如果xy[count][0]==xy[count-1][0]和xy[count][0]=='X':
xy.插入(计数,lastycoord)
如果xy[count][0]==xy[count-1][0]和xy[count][0]==Y':
xy.插入(计数,最后一个指针)
计数+=1
count2=0
count2+=1
对于xy中的i:
如果count2%2==0:
点=点+''+i[1:][+'\n'
elif count2%2==1:
点数=点数+i[1:]
count2+=1
pyperclip.copy(点)
count2=0
对于xy中的i:
i=i[1:]
xy[count2]=i
count2+=1
小费=0
i=0
点2d=[]
而i<200:#(len(xy)//2)
点2d.追加(点(xy[i],xy[i+1]))
i+=2
打印(‘工作’)
i=0
找到=0
firstpoly='还没有第一个多边形'
当我<70时:
s=元组(点2d[i:i+边])
多边形=多边形(*s)
尝试:
如果(.00725865-abs(多晶区))<.0001)和(.00725865-abs(多晶区))>-.0001)和(发现!=1):
placeh=元组(点2d[i:i+边])
第一多边形=多边形(*placeh)
发现=1
#打印(多边形)
持续
除:
打印(“”)
'''    
尝试:
打印(多边形交点(第一多边形))
除:
打印('无交叉点')
'''
i+=1
#印刷品(多面[2])
尝试:
如果第一多边形边[2]==第一多边形交点(多边形):
打印('aha')
除:
打印('okie')
谢谢,

谢恩