尝试实现数据流的流通
起点是CAD里的3条直线(格式为dxf)
pip安装dxfgrabber
安装pyOpenGL
import dxfgrabber
#需要弄一个结构体,来存储直线,python里结构体是什么?最好是结构体数组
global LineList
LineList=[]
#图元直线对应的结构体
class Line:
def __init__(self,start,end):
self.start=start
self.end=end
#主函数
#读数据并保存
dxf = dxfgrabber.readfile('e:/test1-9.dxf')
for e in dxf.entities:
print(e.dxftype,e.layer)
if e.dxftype == 'LINE':
print (e.start,e.end)
#print(e.start[0],e.start[1],e.end[0],e.end[1])
line0=Line(e.start,e.end)
#print(line0.start,line0.end)
LineList.append(line0)
#测试并输出
for l in LineList:
print(l.start,l.end)
运行结果,数据从CAD流入了python
尝试让数据从python流入Opengl
加了一点OpenGL里的东西
import dxfgrabber
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
#需要弄一个结构体,来存储直线,python里结构体是什么?最好是结构体数组
global LineList
LineList=[]
#图元直线对应的结构体
class Line:
def __init__(self,start,end):
self.start=start
self.end=end
#OpenGL部分
def init():
glClearColor(0.0, 0.0, 0.0, 1.0)
gluOrtho2D(0.0, 400.0, 0.0, 400.0)
#通过指定参数缺省值,来设置参数类型
def myMouse(button=0,state=0,x=0,y=0):
if(state==GLUT_DOWN):
print(x,y)
def drawFunc():
glClear(GL_COLOR_BUFFER_BIT)
#设置颜色为红色
glColor3f(1.0, 0.0, 0.0)
#绘制直线
glBegin(GL_LINES)
for l in LineList:
glVertex2f(l.start[0],l.start[1])
glVertex2f(l.end[0],l.end[1])
glEnd()
glFlush()
#主函数
#读数据并保存
dxf = dxfgrabber.readfile('e:/test1-9.dxf')
for e in dxf.entities:
print(e.dxftype,e.layer)
if e.dxftype == 'LINE':
print (e.start,e.end)
line0=Line(e.start,e.end)
LineList.append(line0)
glutInit()
glutInitDisplayMode(GLUT_RGBA|GLUT_SINGLE)
glutInitWindowSize(400, 400)
glutCreateWindow("Sencond")
glutDisplayFunc(drawFunc)
glutMouseFunc(myMouse)#鼠标交互
init()
glutMainLoop()
运行结果
从这个结果来看,屏幕坐标系和图形坐标系,原点不一样,需要转换一下。Y坐标加一个400-,就行了,看来结果是正常的了。
至此,实现了python-》Opengl
然后,需要处理完了再流转回去
关于Opengl鼠标的一点介绍: