请问哪里有dxf文件格式的详细说明?CSDN的这个太简单了:(

VRswan 2000-02-23 02:06:00
我需要编制一个读dxf文件格式并用opengl显示的程序,哪位专家知道有这方面的比较详细的资料?或者源代码?
...全文
332 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hieeabo 2001-05-17
  • 打赏
  • 举报
回复
请问上面高手,能否读出多边形的倒圆角数据呢????
wb197 2000-11-29
  • 打赏
  • 举报
回复
readkey函数在这里
Private Sub readkey(dxfgroup As Integer, dxfvalue As String)
Static riga$
Line Input #FINP, riga$
dxfgroup = Val(riga$)
Line Input #FINP, riga$
dxfvalue = UCase(riga$)
End Sub

wb197 2000-11-29
  • 打赏
  • 举报
回复
下面是我做毕业设计时自己编的一段解读 3dsMAX生成的dxf文件的程序,希望对你有用。
AutoCAD r14/2000生成的DXF文件有许多未加说明的标记,当时我也找过很多资料,但没有结果,只好用3dsMAX了。不三维模型还是用3dsMAX生成比较简单,凑合看吧。

Public Function LoadDXFobj(nomedxf As String) As Integer
Dim iv As Integer
Dim vertNum As Integer, objNum As Integer
Dim TriangleNum As Integer
Dim LTF As VERTEX, RBB As VERTEX
Dim Mat(3) As GLfloat
Dim Nr As GLfloat, w0 As GLfloat, w1 As GLfloat, w2 As GLfloat, v0 As GLfloat, v1 As GLfloat, v2 As GLfloat

On Error GoTo rdxf_err


Open nomedxf For Input As FINP
stato = 0
lista1 = -1

Do While Not (EOF(FINP))

readkey dxfgroup, dxfvalue
Select Case stato
Case 0
If dxfgroup = 0 And dxfvalue = "SECTION" Then
stato = 1
End If
Case 1
If dxfgroup = 2 And dxfvalue = "ENTITIES" Then
stato = 2
Else
stato = 0
End If
Case 2
If dxfgroup = 0 And dxfvalue = "POLYLINE" Then
readkey dxfgroup, dxfvalue
objName = dxfvalue
readkey dxfgroup, dxfvalue
readkey dxfgroup, dxfvalue
readkey dxfgroup, dxfvalue

vertNum = Val(dxfvalue)
ReDim objVertex(vertNum)
readkey dxfgroup, dxfvalue

TriangleNum = Val(dxfvalue)
ReDim Triangles(TriangleNum)
readkey dxfgroup, dxfvalue
col = Val(dxfvalue)
iv = 0
stato = 3

End If
Case 3
Select Case dxfgroup
Case 10
vert.x = Val(dxfvalue)
If vert.x > LTF.x Then LTF.x = vert.x
If vert.y > LTF.y Then LTF.y = vert.y
If vert.Z > LTF.Z Then LTF.Z = vert.Z
If vert.x < RBB.x Then RBB.x = vert.x
If vert.y < RBB.y Then RBB.y = vert.y
If vert.Z < RBB.Z Then RBB.Z = vert.Z

Case 20
vert.y = Val(dxfvalue)
Case 30
vert.Z = Val(dxfvalue)
Case 62
col = Val(dxfvalue)
Case 70
If dxfvalue = "128" Then
stato = 4
GoTo goNextStato
End If
iv = iv + 1
objVertex(iv) = vert
End Select
goNextStato:
Case 4
iv = 0

lista1 = lista1 + 1

GetNextVertIndex:
Select Case dxfgroup
Case 0
readkey dxfgroup, dxfvalue
GoTo GetNextVertIndex
Case 8
readkey dxfgroup, dxfvalue
GoTo GetNextVertIndex
Case 10
readkey dxfgroup, dxfvalue
GoTo GetNextVertIndex
Case 20
readkey dxfgroup, dxfvalue
GoTo GetNextVertIndex
Case 30
readkey dxfgroup, dxfvalue
GoTo GetNextVertIndex
Case 70
readkey dxfgroup, dxfvalue
GoTo GetNextVertIndex
Case 71
vertIndex.No1 = objVertex(Abs(Val(dxfvalue)))
readkey dxfgroup, dxfvalue
GoTo GetNextVertIndex
Case 72
vertIndex.No2 = objVertex(Abs(Val(dxfvalue)))
readkey dxfgroup, dxfvalue
GoTo GetNextVertIndex
Case 73
vertIndex.No3 = objVertex(Abs(Val(dxfvalue)))
iv = iv + 1
Triangles(iv) = vertIndex
readkey dxfgroup, dxfvalue
If Not (dxfgroup = 0 And dxfvalue = "SEQEND") Then GoTo GetNextVertIndex
'objArray.Add Triangles(), objNum

glPushMatrix
Mat(0) = 0: Mat(1) = 0: Mat(2) = 0: Mat(3) = 1#
glMaterialfv faceFront, mprAmbient, Mat(0)
Mat(0) = 0.1: Mat(1) = 0.5: Mat(2) = 0.8: Mat(3) = 1#
glMaterialfv faceFront, mprDiffuse, Mat(0)
Mat(0) = 1: Mat(1) = 1: Mat(2) = 1: Mat(3) = 1
glMaterialfv faceFront, mprSpecular, Mat(0)
glMaterialfv faceFront, mprShininess, 5#
Mat(0) = 0: Mat(1) = 0: Mat(2) = 0: Mat(3) = 1#
glMaterialfv faceFront, mprAmbient, Mat(0)


glNewList WORLD_LIST, GL_COMPILE
glColor3f 0.8, 0.8, 0
glBegin bmTriangles
For iv = LBound(Triangles) + 1 To UBound(Triangles)
v0 = Triangles(iv).No3.x - Triangles(iv).No2.x
v1 = Triangles(iv).No3.y - Triangles(iv).No2.y
v2 = Triangles(iv).No3.Z - Triangles(iv).No2.Z
w0 = Triangles(iv).No1.x - Triangles(iv).No2.x
w1 = Triangles(iv).No1.y - Triangles(iv).No2.y
w2 = Triangles(iv).No1.Z - Triangles(iv).No2.Z

Triangles(iv).Vector.x = w2 * v1 - v2 * w1
Triangles(iv).Vector.y = w0 * v2 - v0 * w2
Triangles(iv).Vector.Z = w1 * v0 - v1 * w0
Nr = Sqr(Triangles(iv).Vector.x * Triangles(iv).Vector.x + Triangles(iv).Vector.y * Triangles(iv).Vector.y + Triangles(iv).Vector.Z * Triangles(iv).Vector.Z)
If Nr = 0 Then Nr = 1
glNormal3f Triangles(iv).Vector.x / Nr, Triangles(iv).Vector.y / Nr, Triangles(iv).Vector.Z / Nr

glVertex3f Triangles(iv).No1.x, Triangles(iv).No1.y, Triangles(iv).No1.Z
'Debug.Print Triangles(iv).No1.x, Triangles(iv).No1.y, Triangles(iv).No1.z
glVertex3f Triangles(iv).No2.x, Triangles(iv).No2.y, Triangles(iv).No2.Z
glVertex3f Triangles(iv).No3.x, Triangles(iv).No3.y, Triangles(iv).No3.Z
Next

glEnd
glEndList
glPopMatrix

WORLD_LIST = WORLD_LIST + 1
stato = 2
End Select

Case 99
Exit Do
End Select
Loop
theCenter.x = (LTF.x + RBB.x) / 2
theCenter.y = (LTF.y + RBB.y) / 2
theCenter.Z = (LTF.Z + RBB.Z) / 2

Close FINP
LoadDXFobj = lista1
If nomedxf = objFileName Then BeginTank = WORLD_LIST

Exit Function
'---------------------------------------
rdxf_err:
MsgBox "Error in loading DXF file"
End Function
Kevin_qing 2000-11-28
  • 打赏
  • 举报
回复
碧海银沙的兰色飞鸟里面有
binglin 2000-11-24
  • 打赏
  • 举报
回复
AutoCAD的帮助文件里有说明。
Jascha 2000-03-20
  • 打赏
  • 举报
回复
http://www.wotsit.org, This is a very good Web Site about kinds of file format.
zdg 2000-02-23
  • 打赏
  • 举报
回复
http://www.midatech.com/csdn/FORMAT/index.htm

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧