'=========================================================================== ' Subject: 3D STUDIO .ASC MESH LOADER 1.01 Date: 06-22-99 (00:02) ' Author: Daniel Davies Code: QB, QBasic, PDS ' Origin: ia53@rapid.co.uk Packet: MISC.ABC '=========================================================================== '3D STUDIO .ASC MESH LOADER V1.01 'Copyright (C) UK 1999 DANIEL DAVIES 'HTTP://WWW.USERS.RAPID.NET.UK/IA53 'MAILTO://ARCLIGHT@PAGANS.ORG ' 'THIS PROGRAM ONLY WORKS ON 3D STUDIO .ASC MESH FILES ' 'TO LOAD A MESH FILE FIRST RUN MeshLoaderInit AND PASS THE NAME OF THE 'FILE CONTAINING THE MESH YOU WISH TO LOAD 'THEN USE :- 'DIM SHARED VERTICES(ObjectVertices) AS vertex 'DIM SHARED polys(ObjectFaces) AS polygon 'TO INITIALISE THE ARRAYS IT WILL STORE THE OBJECT IN 'THEN CALL LoadMesh AND PASS THE NAME OF THE FILE YOU WISH TO LOAD ' 'IF YOU USE ANY OF THIS IN YOUR OWN NON COMMERCIAL PROGRAMS YOU MUST GIVE ME CREDIT 'IF YOU USE ANY OF IT IN A COMMERCIAL PROGRAM YOU MUST CONTACT ME, FOR LICENSING 'INFORMATION TYPE vertex X AS DOUBLE Y AS DOUBLE Z AS DOUBLE END TYPE TYPE polygon p1 AS INTEGER p2 AS INTEGER p3 AS INTEGER END TYPE COMMON SHARED VERTICES() AS vertex COMMON SHARED polys() AS polygon COMMON SHARED ObjectVertices AS LONG COMMON SHARED ObjectFaces AS LONG DECLARE SUB MeshLoaderInit (Filename AS STRING) DECLARE SUB LoadMesh (Filename AS STRING) DECLARE SUB GetChar (what AS STRING) DECLARE SUB GetVertex (n AS LONG) DECLARE SUB GetFace (n AS LONG) DECLARE FUNCTION GetNr& () DECLARE FUNCTION GetReal# () DECLARE FUNCTION GetMaxVertex& () DECLARE FUNCTION GetMaxFace& () '3D STUDIO .ASC MESH LOADER 'Copyright (C) UK 1999 DANIEL DAVIES 'HTTP://WWW.USERS.RAPID.NET.UK/IA53 'MAILTO://ARCLIGHT@PAGANS.ORG SUB GetChar (what AS STRING) c$ = STRING$(1, " ") DO GET #1, , c$ LOOP UNTIL c$ = what END SUB '3D STUDIO .ASC MESH LOADER 'Copyright (C) UK 1999 DANIEL DAVIES 'HTTP://WWW.USERS.RAPID.NET.UK/IA53 'MAILTO://ARCLIGHT@PAGANS.ORG SUB GetFace (n AS LONG) nr$ = STR$(n) c$ = STRING$(1, " ") GET #1, , c$ IF c$ = "F" THEN GET #1, , c$ IF c$ = "a" THEN GET #1, , c$ IF c$ = "c" THEN GET #1, , c$ IF c$ = "e" THEN GET #1, , c$ IF c$ = " " THEN GET #1, , ch$ FOR k = 1 TO LEN(nr$) IF ch$ = MID$(nr$, k, 1) THEN GET #1, , ch$ ELSE ch$ = "0" END IF NEXT IF ch$ = ":" THEN GET #1, , c$ IF c$ = " " THEN GET #1, , c$ IF c$ = " " THEN GET #1, , c$ IF c$ = " " THEN GET #1, , c$ IF c$ = " " THEN GET #1, , c$ IF c$ = " " THEN GET #1, , c$ IF c$ = "A" THEN GET #1, , c$ IF c$ = ":" THEN polystmp = GetNr polys(n).p1 = polystmp GetChar "B" GET #1, , ch$ polystmp = GetNr polys(n).p2 = polystmp GetChar "C" GET #1, , ch$ polystmp = GetNr polys(n).p3 = polystmp END IF END IF END IF END IF END IF END IF END IF END IF END IF END IF END IF END IF END IF END SUB '3D STUDIO .ASC MESH LOADER 'Copyright (C) UK 1999 DANIEL DAVIES 'HTTP://WWW.USERS.RAPID.NET.UK/IA53 'MAILTO://ARCLIGHT@PAGANS.ORG FUNCTION GetMaxFace& c$ = STRING$(1, " ") GET #1, , c$ IF c$ = "F" THEN GET #1, , c$ IF c$ = "a" THEN GET #1, , c$ IF c$ = "c" THEN GET #1, , c$ IF c$ = "e" THEN GET #1, , c$ IF c$ = "s" THEN GET #1, , c$ IF c$ = ":" THEN GET #1, , c$ IF c$ = " " THEN MaxFaceS$ = "" GET #1, , c$ WHILE c$ <> " " MaxFaceS$ = MaxFaceS$ + c$ GET #1, , c$ WEND GetMaxFace = VAL(MaxFaceS$) - 1 END IF END IF END IF END IF END IF END IF END IF END FUNCTION '3D STUDIO .ASC MESH LOADER 'Copyright (C) UK 1999 DANIEL DAVIES 'HTTP://WWW.USERS.RAPID.NET.UK/IA53 'MAILTO://ARCLIGHT@PAGANS.ORG FUNCTION GetMaxVertex& c$ = STRING$(1, " ") GET #1, , c$ IF c$ = "V" THEN GET #1, , c$ IF c$ = "e" THEN GET #1, , c$ IF c$ = "r" THEN GET #1, , c$ IF c$ = "t" THEN GET #1, , c$ IF c$ = "i" THEN GET #1, , c$ IF c$ = "c" THEN GET #1, , c$ IF c$ = "e" THEN GET #1, , c$ IF c$ = "s" THEN GET #1, , c$ IF c$ = ":" THEN GET #1, , c$ IF c$ = " " THEN MaxVertexS$ = "" GET #1, , c$ WHILE c$ <> " " MaxVertexS$ = MaxVertexS$ + c$ GET #1, , c$ WEND GetMaxVertex = VAL(MaxVertexS$) - 1 END IF END IF END IF END IF END IF END IF END IF END IF END IF END IF END FUNCTION '3D STUDIO .ASC MESH LOADER 'Copyright (C) UK 1999 DANIEL DAVIES 'HTTP://WWW.USERS.RAPID.NET.UK/IA53 'MAILTO://ARCLIGHT@PAGANS.ORG FUNCTION GetNr& nr$ = "" c$ = STRING$(1, " ") GET #1, , c$ WHILE ch$ <> " " AND ch$ <> "." AND ch$ <> CHR$(13) nr$ = nr$ + ch$ GET #1, , ch$ WEND GetNr = VAL(nr$) END FUNCTION '3D STUDIO .ASC MESH LOADER 'Copyright (C) UK 1999 DANIEL DAVIES 'HTTP://WWW.USERS.RAPID.NET.UK/IA53 'MAILTO://ARCLIGHT@PAGANS.ORG FUNCTION GetReal# nr$ = "" c$ = STRING$(1, " ") GET #1, , c$ WHILE ch$ <> " " AND ch$ <> CHR$(13) nr$ = nr$ + ch$ GET #1, , ch$ WEND GetReal = VAL(nr$) END FUNCTION '3D STUDIO .ASC MESH LOADER 'Copyright (C) UK 1999 DANIEL DAVIES 'HTTP://WWW.USERS.RAPID.NET.UK/IA53 'MAILTO://ARCLIGHT@PAGANS.ORG SUB GetVertex (n AS LONG) nr$ = STR$(n) c$ = STRING$(1, " ") GET #1, , c$ IF c$ = "V" THEN GET #1, , c$ IF c$ = "e" THEN GET #1, , c$ IF c$ = "r" THEN GET #1, , c$ IF c$ = "t" THEN GET #1, , c$ IF c$ = "e" THEN GET #1, , c$ IF c$ = "x" THEN GET #1, , c$ IF c$ = " " THEN GET #1, , ch$ FOR k = 1 TO LEN(nr) IF ch$ = MID$(nr$, k, 1) THEN GET #1, , ch$ ELSE ch$ = "0" END IF NEXT IF ch$ = ":" THEN GET #1, , ch$ IF ch$ = " " THEN GET #1, , ch$ IF ch$ = " " THEN GET #1, , ch$ IF ch$ = "X" THEN GET #1, , ch$ IF ch$ = ":" THEN GET #1, , ch$ IF ch$ = " " THEN VERTICES(n).X = GetReal GET #1, , ch$ GET #1, , ch$ VERTICES(n).Y = GetReal GET #1, , ch$ GET #1, , ch$ VERTICES(n).Z = GetReal END IF END IF END IF END IF END IF END IF END IF END IF END IF END IF END IF END IF END IF END SUB '3D STUDIO .ASC MESH LOADER 'Copyright (C) UK 1999 DANIEL DAVIES 'HTTP://WWW.USERS.RAPID.NET.UK/IA53 'MAILTO://ARCLIGHT@PAGANS.ORG SUB LoadMesh (Filename AS STRING) c$ = STRING$(1, " ") OPEN Filename FOR BINARY AS #1 ObjectVertices = GetMaxVertex SEEK #1, 1 ObjectFaces = GetMaxFace SEEK #1, 1 FOR a% = 0 TO ObjectVertices GetVertex (a%) NEXT a% FOR a% = 0 TO ObjectFaces GetFace (a%) NEXT a% END SUB '3D STUDIO .ASC MESH LOADER 'Copyright (C) UK 1999 DANIEL DAVIES 'HTTP://WWW.USERS.RAPID.NET.UK/IA53 'MAILTO://ARCLIGHT@PAGANS.ORG SUB MeshLoaderInit (Filename AS STRING) OPEN Filename FOR BINARY AS #1 ObjectVertices = GetMaxVertex SEEK #1, 1 ObjectFaces = GetMaxFace END SUB