CAD <-> python <-> OpenGL

本文介绍了如何通过Python实现CAD中的3条直线数据流经OpenGL的过程。使用dxfgrabber读取CAD数据,通过pyOpenGL将数据传入OpenGL进行渲染。在解决坐标系转换和鼠标交互问题后,实现了CAD到OpenGL的双向数据流动,允许用户在OpenGL环境中选择和操作图元,并将结果导回CAD作为新的DXF文件。
摘要由CSDN通过智能技术生成

尝试实现数据流的流通

起点是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鼠标的一点介绍:

https://blog.csdn.net/m0_37876745/article

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值