home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.mdf / SourceCode / Tutorial / Cookbook / 34.RandomShapes / RandomView.m < prev    next >
Encoding:
Text File  |  1993-01-18  |  4.6 KB  |  235 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import "RandomView.h"
  5. #import <appkit/Matrix.h>
  6. #import <appkit/Application.h>
  7. #import <appkit/PrintInfo.h>
  8. #import <appkit/Control.h>
  9. #import <dpsclient/wraps.h>
  10. #import "shapes.h"
  11.  
  12. #define NUMBER_SLIDERS 8
  13.  
  14. #define CIRCLE  0
  15. #define TRIANGLE  1
  16. #define SQUARE  2
  17. #define HEART   3
  18. #define LINE  4
  19. #define FLOWER  5
  20. #define DIAMOND 6
  21. #define RECTANGLE  7
  22.  
  23. #define CENTER  0
  24. #define BOTTOM  1
  25.  
  26. @implementation RandomView
  27.  
  28. +newFrame:(const NXRect *)tF {
  29.     self = [super newFrame:tF];
  30.     depth = 7;
  31.     scale = 0.8;
  32.     rotation = 25.0;
  33.     shrink = .75;
  34.     numberBranches = 4;
  35.     branchAngle = 90.0;
  36.     over = 0.0;
  37.     up = 100.0;
  38.     center = CENTER;
  39.     shapeType = HEART;
  40.     return self;
  41. }
  42.  
  43. // Outlets
  44.  
  45. - setTextArray:anObject
  46. {
  47.     textArray = anObject;
  48.     return self;
  49. }
  50.  
  51. - setSliderMatrix:anObject
  52. {
  53.     sliderMatrix = anObject;
  54.     return self;
  55. }
  56.  
  57. - setCenterMatrix:anObject
  58. {
  59.     centerMatrix = anObject;
  60.     return self;
  61. }
  62.  
  63. - setShapeMatrix:anObject
  64. {
  65.     shapeMatrix = anObject;
  66.     return self;
  67. }
  68.  
  69.  
  70.  
  71. // Action Methods
  72.  
  73. - shapeMatrix:sender
  74. {
  75.     shapeType = [sender selectedTag];
  76.     [self display];
  77.     return self;
  78. }
  79.  
  80. - center:sender
  81. {
  82.     center = [sender selectedTag];
  83.     [self display];
  84.     return self;
  85. }
  86.  
  87. - reset:sender
  88. {
  89.     depth = 7;
  90.     [[textArray selectCellWithTag:0] setIntValue:depth];
  91.     [[sliderMatrix selectCellWithTag:0] setIntValue:depth];
  92.     scale = 0.8;
  93.     [[textArray selectCellWithTag:1] setFloatValue:scale];
  94.     [[sliderMatrix selectCellWithTag:1] setFloatValue:scale];
  95.     rotation = 25.0;
  96.     [[textArray selectCellWithTag:2] setFloatValue:rotation];
  97.     [[sliderMatrix selectCellWithTag:2] setFloatValue:rotation];
  98.     shrink = .75;
  99.     [[textArray selectCellWithTag:3] setFloatValue:shrink];
  100.     [[sliderMatrix selectCellWithTag:3] setFloatValue:shrink];
  101.     numberBranches = 4;
  102.     [[textArray selectCellWithTag:4] setIntValue:numberBranches];
  103.     [[sliderMatrix selectCellWithTag:4] setIntValue:numberBranches];
  104.     branchAngle = 90.0;
  105.     [[textArray selectCellWithTag:5] setFloatValue:branchAngle];
  106.     [[sliderMatrix selectCellWithTag:5] setFloatValue:branchAngle];
  107.     over = 0.0;
  108.     [[textArray selectCellWithTag:6] setFloatValue:over];
  109.     [[sliderMatrix selectCellWithTag:6] setFloatValue:over];
  110.     up = 100.0;
  111.     [[textArray selectCellWithTag:7] setFloatValue:up];
  112.     [[sliderMatrix selectCellWithTag:7] setFloatValue:up];
  113.     center = CENTER;
  114.     // [centerMatrix selectCellWithTag:CENTER]
  115.     shapeType = HEART;
  116.     // [centerMatrix selectCellWithTag:HEART]
  117.     
  118.     [self display];
  119.     return self;
  120. }
  121.  
  122.  
  123. - sliderMatix:sender
  124. {
  125.     float senderValue;
  126.     id textCell_ID;
  127.     senderValue = [sender floatValue];
  128.     sliderNumber = [sender selectedTag];
  129.     switch (sliderNumber) {
  130.         case 0:
  131.             depth = [sender intValue];
  132.             senderValue = (float) depth;
  133.             break;
  134.         case 1:
  135.             scale = [sender floatValue];
  136.             break;
  137.         case 2:
  138.             rotation = [sender floatValue];
  139.             break;
  140.         case 3:
  141.             shrink = [sender floatValue];
  142.             break;
  143.         case 4:
  144.             numberBranches = [sender floatValue];
  145.             senderValue = (float) numberBranches;
  146.             break;
  147.         case 5:
  148.             branchAngle = [sender floatValue];
  149.             break;
  150.         case 6:
  151.             over = [sender floatValue];
  152.             break;
  153.         case 7:
  154.             up = [sender floatValue];
  155.             break;
  156.         default:
  157.             break;
  158.         }
  159.     textCell_ID = [textArray selectCellWithTag:sliderNumber];
  160.     [textCell_ID setFloatValue:senderValue];
  161.     [self display];
  162.     return self;
  163. }
  164.  
  165. - printPage:sender
  166. {
  167.     id pi = [NXApp printInfo];
  168.     [pi setMarginLeft:0.0 right:0.0 top:0.0 bottom:0.0];
  169.     [super printPSCode:self];
  170.     return self;
  171. }
  172.  
  173. - drawBranch:(int) depthNow
  174. {
  175. int i,j;
  176.     if (depthNow > 1) {
  177.     for (j=0; j<=numberBranches; j++) {
  178.         PSgsave();
  179.         for (i=0; i<depth; i++) {
  180.             switch (shapeType) {
  181.                 case CIRCLE:
  182.                     drawCircle();
  183.                     break;
  184.                 case TRIANGLE:
  185.                     drawTriangle();
  186.                     break;
  187.                 case SQUARE:
  188.                     drawSquare();
  189.                     break;
  190.                 case HEART:
  191.                     drawHeart();
  192.                     break;
  193.                 case LINE:
  194.                     drawLine();
  195.                     break;
  196.                 case FLOWER:
  197.                     drawFlower();
  198.                     break;
  199.                 default:
  200.                     printf("No shape for number %d\n", shapeType);
  201.                     break;
  202.             } // end of switch
  203.             PStranslate(over, up);
  204.             PSscale(shrink, shrink);
  205.             PSrotate(rotation);
  206.         } // end of i for
  207.         PSgrestore();
  208.         PSrotate(branchAngle);
  209.         // printf("Depth Now = %d\n", depthNow);
  210.         // [self drawBranch: depthNow-1];
  211.     } // end of j for
  212.     } // if depth > 0
  213.     return self;
  214. }
  215.  
  216. - drawSelf:(NXRect*)r :(int)c
  217. {
  218.     NXEraseRect(&bounds);
  219.     PSsetgray(NX_BLACK);
  220.  
  221.     if (center == BOTTOM)
  222.         PStranslate(bounds.size.width/2.0, 0.0);
  223.     else
  224.         PStranslate(bounds.size.width/2.0, bounds.size.height/2.0);
  225.  
  226.     PSscale(scale, scale);
  227.     
  228.     [self drawBranch: depth];
  229.  
  230.     return self;
  231. }
  232.  
  233.  
  234. @end
  235.