home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / QuickDraw3D 1.6 SDK / Mac SampleCode New for 1.6 / ViewerOptBtnSample / Source / Process.c < prev   
Encoding:
C/C++ Source or Header  |  1999-05-18  |  5.3 KB  |  276 lines  |  [TEXT/CWIE]

  1. /****************************/
  2. /*       PROCESS.C             */
  3. /* By Brian Greenstone      */
  4. /****************************/
  5.  
  6.  
  7. /****************************/
  8. /*    EXTERNALS             */
  9. /****************************/
  10. #include <MacWindows.h>
  11. #include <StandardFile.h>
  12.  
  13. #include <QD3D.h>
  14. #include <QD3DGeometry.h>
  15. #include <QD3DGroup.h>
  16. #include <QD3DMath.h>
  17. #include <QD3DViewer.h>
  18. #include <QD3DGroup.h>
  19.  
  20. #include "myglobals.h"
  21. #include "misc.h"
  22. #include "process.h"
  23.  
  24.  
  25. /****************************/
  26. /*    PROTOTYPES            */
  27. /****************************/
  28.  
  29. static void InitModelWindow(void);
  30. static void BuildTestModel(void);
  31.  
  32.  
  33. /****************************/
  34. /*    CONSTANTS             */
  35. /****************************/
  36.  
  37. #define    MODEL_WIND_ID            400
  38.  
  39. #define    MY_HITHER                 10
  40. #define MY_YON                    120
  41.  
  42. /*********************/
  43. /*    VARIABLES      */
  44. /*********************/
  45.  
  46. WindowPtr                gModelWindow = nil;
  47. TQ3Object                gModelGroup = nil;
  48.  
  49. TQ3ViewerObject    gViewer = nil;
  50.  
  51.  
  52. #pragma mark ========INITIALIZATION STUFF=========
  53.  
  54. /******************** INIT TEST ************************/
  55.  
  56. void InitTest(void)
  57. {
  58. Rect    r;
  59. TQ3ColorARGB    color;
  60.  
  61.             /* CREATE THE WINDOW */
  62.             
  63.     gModelWindow = GetNewCWindow(MODEL_WIND_ID, nil,MOVE_TO_FRONT);
  64.     if (gModelWindow == nil)
  65.         DoFatalAlert("\pWhere did the window go?");                    
  66.     SetPort((GrafPtr)gModelWindow);
  67.  
  68.  
  69.             /* CREATE THE TEST MODEL */
  70.             
  71.     BuildTestModel();
  72.  
  73.  
  74.             /* CREATE VIEWER IN THE WINDOW */
  75.             
  76.     r.left = gModelWindow->portRect.left + 20;
  77.     r.right = r.left+300;
  78.     r.top = gModelWindow->portRect.top + 20;
  79.     r.bottom = r.top+300;
  80.     
  81.     gViewer = Q3ViewerNew((CGrafPtr)gModelWindow, &r, kQ3ViewerActive|kQ3ViewerControllerVisible|
  82.                                                     kQ3ViewerButtonOptions|kQ3ViewerButtonCamera|
  83.                                                     kQ3ViewerButtonTruck|kQ3ViewerButtonOrbit|
  84.                                                     kQ3ViewerButtonDolly|kQ3ViewerButtonReset);
  85.     if (gViewer == nil)
  86.         DoFatalAlert("\pQ3ViewerNew failed!");
  87.  
  88.     color.a = 1.0;
  89.     color.r = 1.0;
  90.     color.g = .5;
  91.     color.b = .5;
  92.     Q3ViewerSetBackgroundColor(gViewer, &color);
  93.  
  94.             /* ASSIGN GEOMETRY TO VIEWER */
  95.             
  96.     if (Q3ViewerUseGroup(gViewer, gModelGroup))
  97.         DoFatalAlert("\pQ3ViewerUseGroup failed!");
  98.             
  99.                 /* DRAW IT */
  100.                 
  101.     Q3ViewerDraw(gViewer);
  102.  
  103.  
  104. }
  105.  
  106.  
  107.  
  108.  
  109. /********************* BUILD TEST MODEL **************************/
  110.  
  111. static void BuildTestModel(void)
  112. {
  113. TQ3TriMeshData                    myTriMeshData;
  114. TQ3TriMeshAttributeData            faceAttribs;
  115. TQ3Object                        tmObj;
  116.  
  117. TQ3Point3D points[3] = 
  118. {
  119.     0,35,0,
  120.     -35,-35,0,
  121.     35,-35,0
  122. };
  123.  
  124. TQ3Vector3D    vertexNormals[3] = 
  125. {
  126.     0,0,1,
  127.     0,0,1,
  128.     0,0,1
  129. };
  130.  
  131. TQ3Vector3D    faceNormals[1] =
  132. {
  133.     0,0,1
  134. };
  135.  
  136.  
  137. TQ3TriMeshTriangleData    triangles[1] =
  138. {
  139.     0,1,2
  140. };
  141.         
  142.  
  143.  
  144.  
  145.             /* BUILD MAIN TRIMESH DATA STRUCTURE */
  146.  
  147.     myTriMeshData.triMeshAttributeSet = nil;
  148.  
  149.     myTriMeshData.numTriangles = 1;
  150.     myTriMeshData.triangles = &triangles[0];
  151.  
  152.     myTriMeshData.numTriangleAttributeTypes = 1;
  153.     myTriMeshData.triangleAttributeTypes = &faceAttribs;
  154.  
  155.     myTriMeshData.numEdges = 0;
  156.     myTriMeshData.edges = nil;
  157.     myTriMeshData.numEdgeAttributeTypes = 0;
  158.     myTriMeshData.edgeAttributeTypes = nil;
  159.  
  160.     myTriMeshData.numPoints = 3;
  161.     myTriMeshData.points = &points[0];
  162.  
  163.     myTriMeshData.numVertexAttributeTypes = 0;
  164.      myTriMeshData.vertexAttributeTypes = nil;
  165.  
  166.  
  167.             /* CALCULATE BOUNDING BOX */
  168.  
  169.     Q3BoundingBox_SetFromPoints3D(&myTriMeshData.bBox, &points[0],    3, sizeof(TQ3Point3D));
  170.  
  171.  
  172.             /* CREATE FACE ATTRIBUTES */ 
  173.  
  174.     faceAttribs.attributeType = kQ3AttributeTypeNormal;
  175.     faceAttribs.data = &faceNormals[0];
  176.     faceAttribs.attributeUseArray = nil;
  177.  
  178.  
  179.         /* MAKE THE TRIMESH GEOMETRY OBJECT */
  180.  
  181.     tmObj = Q3TriMesh_New(&myTriMeshData);
  182.     if (tmObj == nil)
  183.         DoFatalAlert("\pQ3TriMesh_New failed!");
  184.  
  185.     gModelGroup = Q3DisplayGroup_New();
  186.     Q3Group_AddObject(gModelGroup, tmObj);
  187.     Q3Object_Dispose(tmObj);
  188.  
  189. }
  190.  
  191.  
  192. #pragma mark =========UPDATING============
  193.  
  194.  
  195. /*************** DO MODEL WINDOW NULL EVENT **********************/
  196.  
  197. void DoModelWindowNullEvent(void)
  198. {
  199.                 
  200. }
  201.  
  202.  
  203.  
  204. #pragma mark ======= PICT STUFF =============
  205.  
  206.  
  207. /******************** SAVE VIEWER PICT **********************/
  208.  
  209. void SaveViewerPICT(void)
  210. {
  211. SFReply        reply;
  212. Point        myPoint;
  213. Str255        prompt = "\pSave Map View PICT As:";
  214. Str255        name = "\pMapView.pict";
  215. OSErr        iErr;
  216. long        numBytes;
  217. FInfo        fndrInfo;
  218. PicHandle    thePic;
  219. Ptr            blankPtr;
  220. short        fRefNum;
  221.  
  222.  
  223.             /* GET PICT FROM VIEWER */
  224.             
  225.     thePic = Q3ViewerGetPict(gViewer);
  226.  
  227.                 
  228.             /* GET FILENAME TO SAVE TO */
  229.                 
  230.     myPoint.h = -1;
  231.     myPoint.v = -1;
  232.     SFPutFile(myPoint,prompt,name,nil,&reply);
  233.     if (!reply.good)                                                // see if cancelled
  234.         return;
  235.             
  236.             
  237.             /* SEE IF FILE ALREADY EXISTS, THEN DELETE */
  238.             
  239.     iErr = GetFInfo(reply.fName,reply.vRefNum,&fndrInfo);
  240.     if (iErr != noErr)
  241.         iErr = FSDelete(reply.fName,reply.vRefNum);
  242.             
  243.  
  244.                 /*  CREATE THE FILE */
  245.  
  246.     Create(reply.fName,reply.vRefNum,'ttxt','PICT');
  247.     iErr = SetVol(0,reply.vRefNum);
  248.     if (iErr != noErr)                                // set default volume
  249.         DoFatalAlert("\pCant seem to set Volume?!");
  250.         
  251.  
  252.                 /*  OPEN THE FILE */
  253.     
  254.     iErr = FSOpen(reply.fName,reply.vRefNum,&fRefNum);            
  255.     if (iErr != noErr)
  256.         DoFatalAlert("\pCouldnt Open File.");
  257.  
  258.  
  259.                 /**********************************/
  260.                 /* WRITE PICT DATA INTO RESOURCES */
  261.                 /**********************************/
  262.         
  263.     blankPtr = NewPtr(512);
  264.     numBytes = 512;                                                    // write 512 header
  265.     FSWrite(fRefNum,&numBytes,blankPtr);
  266.     DisposePtr(blankPtr);
  267.     numBytes = GetHandleSize((Handle)thePic);
  268.     FSWrite(fRefNum,&numBytes,(Ptr)*thePic);                        // write PICT data
  269.     FSClose(fRefNum);            
  270. }
  271.  
  272.  
  273.  
  274.  
  275.  
  276.