00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "enlargedSchema.h"
00023 #include <assert.h>
00024 #include <iostream>
00025
00026 using namespace std;
00027
00032 schema* makeEnlargedSchema ( schema* s, double width )
00033 {
00034 if (width > s->width()) {
00035 return new enlargedSchema(s, width);
00036 } else {
00037 return s;
00038 }
00039 }
00040
00045 enlargedSchema::enlargedSchema( schema* s, double width )
00046 : schema(s->inputs(), s->outputs(), width, s->height()),
00047 fSchema(s)
00048 {
00049 for (unsigned int i=0; i<inputs(); i++) fInputPoint.push_back(point(0));
00050 for (unsigned int i=0; i<outputs(); i++) fOutputPoint.push_back(point(0));
00051 }
00052
00053
00059 void enlargedSchema::place(double ox, double oy, int orientation)
00060 {
00061 beginPlace(ox, oy, orientation);
00062
00063 double dx = (width() - fSchema->width())/2;
00064 fSchema->place(ox+dx, oy, orientation);
00065
00066 if (orientation == kRightLeft) {
00067 dx = -dx;
00068 }
00069
00070 for (unsigned int i=0; i < inputs(); i++) {
00071 point p = fSchema->inputPoint(i);
00072 fInputPoint[i] = point(p.x-dx, p.y);
00073 }
00074
00075 for (unsigned int i=0; i < outputs(); i++) {
00076 point p = fSchema->outputPoint(i);
00077 fOutputPoint[i] = point(p.x+dx, p.y);
00078 }
00079
00080 endPlace();
00081 }
00082
00086 point enlargedSchema::inputPoint(unsigned int i)
00087 {
00088 assert (placed());
00089 assert (i < inputs());
00090 return fInputPoint[i];
00091 }
00092
00096 point enlargedSchema::outputPoint(unsigned int i)
00097 {
00098 assert (placed());
00099 assert (i < outputs());
00100 return fOutputPoint[i];
00101 }
00102
00107 void enlargedSchema::draw(device& dev)
00108 {
00109 assert(placed());
00110
00111 fSchema->draw(dev);
00112
00113
00114 for (unsigned int i=0; i<inputs(); i++) {
00115 point p = inputPoint(i);
00116 point q = fSchema->inputPoint(i);
00117 dev.trait(p.x, p.y, q.x, q.y);
00118 }
00119
00120
00121 for (unsigned int i=0; i<outputs(); i++) {
00122 point p = outputPoint(i);
00123 point q = fSchema->outputPoint(i);
00124 dev.trait(p.x, p.y, q.x, q.y);
00125 }
00126 }