예제 #1
0
int giperbola::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QDialog::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: viz(); break;
        case 1: noviz(); break;
        case 2: pok(); break;
        case 3: skryt(); break;
        case 4: nazad(); break;
        case 5: vmenu(); break;
        default: ;
        }
        _id -= 6;
    }
    return _id;
}
예제 #2
0
int
main (int argc, char** argv)
{
  pcl::visualization::PCLVisualizer viz ("Visualizator");
  viz.addCoordinateSystem (1.0);

  viz.addText3D ("Following text", pcl::PointXYZ(0.0, 0.0, 0.0),
                 1.0, 1.0, 0.0, 0.0, "id_following");
  viz.spin ();
  double orientation[3] = {0., 0., 0.};
  viz.addText3D ("Fixed text", pcl::PointXYZ(0.0, 0.0, 0.0), orientation,
                 1.0, 0.0, 1.0, 0.0, "id_fixed");
  viz.spin ();
  viz.removeText3D ("id_following");
  viz.spin ();
  viz.removeText3D ("id_fixed");
  viz.spin ();

  return (0);
}
예제 #3
0
Test::Test()
{
    std::cout<<"Test Obj created";
    pcl::PointCloud<pcl::PointXYZ>::Ptr basic_cloud_ptr (new pcl::PointCloud<pcl::PointXYZ>);
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
    uint8_t r(255), g(15), b(15);

    pcl::PointXYZ basic_point;
    basic_point.x = 0.5;
    basic_point.y = 0.5;
    basic_point.z = 0.5;
    basic_cloud_ptr->points.push_back(basic_point);
    pcl::PointXYZRGB point;
    point.x = basic_point.x;
    point.y = basic_point.y;
    point.z = basic_point.z;
    uint32_t rgb = (static_cast<uint32_t>(r) << 16 |
                    static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
    point.rgb = *reinterpret_cast<float*>(&rgb);
    point_cloud_ptr->points.push_back (point);

    basic_point.x = -0.5;
    basic_point.y = -0.5;
    basic_point.z = -0.5;

    rgb = (static_cast<uint32_t>(15) << 16 |
                    static_cast<uint32_t>(255) << 8 | static_cast<uint32_t>(15));
    point.rgb = *reinterpret_cast<float*>(&rgb);
    point_cloud_ptr->points.push_back (point);

    //basic_cloud_ptr->width = (int) basic_cloud_ptr->points.size ();
    //basic_cloud_ptr->height = 1;
    //point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
    //point_cloud_ptr->height = 1;
    pcl::visualization::CloudViewer viz("My cloud viewer");
    viz.showCloud(point_cloud_ptr);
    //viz.spin();
    while(!viz.wasStopped())
    {
    }
}
예제 #4
0
int tester(void)
{
	int i,j;
	int e = 0;

	fld = malloc(NROWS * sizeof(int *));/*[5][5] = {
	    {1,6,11,16,21},
	    {2,7,12,17,22},
	    {3,8,13,18,23},
	    {4,9,14,19,24},
	    {5,10,15,20,25}
	};*/
	if(fld == NULL){
		printf("Oops, couldn't ``malloc''?");
		return(1);
	}
	for(i=0; i<NROWS; i++){
		fld[i] = malloc(NCOLS * sizeof(int));
		if(fld[i] == NULL){
			printf("Hmm, couldn't do the second-dimension ``malloc''.");
			return(1);
		}
	}

	/* Initialize the array! */
	for(j=0;j<NROWS;j++){
		for(i=0;i<NCOLS;i++){
			fld[i][j] = e;
			e++;
		}
	}
			

	#ifdef TEST
	for(j=0;j<NROWS;j++){
		for(i=0;i<NCOLS;i++){
			printf("%d\t",fld[i][j]);
			if((i+1) == x) printf("\n");
		}
	}
	#endif

	printf("About to test the printer function.\n\n");
	viz(fld);
	/* Should show:
	0	1	2
	3	4	5
	6	7	8
	Or some similar such, depending on NCOLS and NROWS
	*/

	/* Kill all cells! They should be all 0's now.*/
	for(j=0;j<NROWS;j++){
		for(i=0;i<NCOLS;i++){
			killf(i,j);
		}
	}
	viz(fld);
	/* Spawn all cells! They should be all 1's now.*/
	for(j=0;j<NROWS;j++){
		for(i=0;i<NCOLS;i++){
			spawn(i,j);
		}
	}
	viz(fld);

	printf("A corner cell should have 3 live neighbours: %d\n", friends(0,0));
	printf("A middle cell should have 8 live neighbours: %d\n", friends(1,1));
	printf("A  side  cell should have 5 live neighbours: %d\n", friends(1,0));
	printf("Goodbye\n\n");

	/* Try some basic tests of the generator and rule. */
	for(j=0;j<NROWS;j++){
		for(i=0;i<NCOLS;i++){
			killf(i,j);
		}
	}
	spawn(0,1);
	spawn(1,1);
	spawn(2,1);
	viz(fld);
	generator(1);
	viz(fld);
	generator(1);
	viz(fld);

	

	printf("\n\nDone testing.\n\n");
	return(0);
}
예제 #5
0
void flexionFDSimulationWithHitMap(Model& model)
{
	addFlexionController(model);
	//addExtensionController(model);
	//addTibialLoads(model, 0);

    model.setUseVisualizer(true);

	// init system
	std::time_t result = std::time(nullptr);
	std::cout << "\nBefore initSystem() " << std::asctime(std::localtime(&result)) << endl;
	SimTK::State& si = model.initSystem();
	result = std::time(nullptr);
	std::cout << "\nAfter initSystem() " << std::asctime(std::localtime(&result)) << endl;
	
	// set gravity
	//model.updGravityForce().setGravityVector(si, Vec3(-9.80665,0,0));
	//model.updGravityForce().setGravityVector(si, Vec3(0,0,0));
	
	//setHipAngle(model, si, 90);
	//setKneeAngle(model, si, 0, false, false);
	//model.equilibrateMuscles( si);

	MultibodySystem& system = model.updMultibodySystem();
	SimbodyMatterSubsystem& matter = system.updMatterSubsystem();
	GeneralForceSubsystem forces(system);
	ContactTrackerSubsystem  tracker(system);
    CompliantContactSubsystem contactForces(system, tracker);
	contactForces.setTrackDissipatedEnergy(true);
    //contactForces.setTransitionVelocity(1e-3);

	for (int i=0; i < matter.getNumBodies(); ++i) {
		MobilizedBodyIndex mbx(i);
		if (i==19 || i==20 || i==22)// || i==15 || i==16)
		{
			MobilizedBody& mobod = matter.updMobilizedBody(mbx);
			std::filebuf fb;
			//cout << mobod.updBody().
			if (i==19)
				fb.open ( "../resources/femur_lat_r.obj",std::ios::in);
			else if (i==20)
				fb.open ( "../resources/femur_med_r.obj",std::ios::in);
			else if (i==22)
				fb.open ( "../resources/tibia_upper_r.obj",std::ios::in);
			//else if (i==15)
				//fb.open ( "../resources/meniscus_lat_r.obj",std::ios::in);
			//else if (i==16)
				//fb.open ( "../resources/meniscus_med_r.obj",std::ios::in);
			std::istream is(&fb);
			PolygonalMesh polMesh;
			polMesh.loadObjFile(is);
			fb.close();
			SimTK::ContactGeometry::TriangleMesh mesh(polMesh);
			ContactSurface contSurf;//(mesh, ContactMaterial(1.0e6, 1, 1, 0.03, 0.03), 0.001);
			if (i==19 || i==20 || i==22)
				contSurf = ContactSurface(mesh, ContactMaterial(10, 1, 1, 0.03, 0.03), 0.001);
			//else if (i==15 || i==16)
				//contSurf = ContactSurface(mesh, ContactMaterial(10, 3, 1, 0.03, 0.03), 0.001);
			DecorativeMesh showMesh(mesh.createPolygonalMesh());
			showMesh.setOpacity(0.5);
			mobod.updBody().addDecoration( showMesh);
			mobod.updBody().addContactSurface(contSurf);
		}
    }

	ModelVisualizer& viz(model.updVisualizer());
	//Visualizer viz(system);
	viz.updSimbodyVisualizer().addDecorationGenerator(new HitMapGenerator(system,contactForces));
    viz.updSimbodyVisualizer().setMode(Visualizer::RealTime);
    viz.updSimbodyVisualizer().setDesiredBufferLengthInSec(1);
    viz.updSimbodyVisualizer().setDesiredFrameRate(30);
    viz.updSimbodyVisualizer().setGroundHeight(-3);
    viz.updSimbodyVisualizer().setShowShadows(true);
	
    Visualizer::InputSilo* silo = new Visualizer::InputSilo();
	viz.updSimbodyVisualizer().addInputListener(silo);
    Array_<std::pair<String,int> > runMenuItems;
    runMenuItems.push_back(std::make_pair("Go", GoItem));
    runMenuItems.push_back(std::make_pair("Replay", ReplayItem));
    runMenuItems.push_back(std::make_pair("Quit", QuitItem));
    viz.updSimbodyVisualizer().addMenu("Run", RunMenuId, runMenuItems);

    Array_<std::pair<String,int> > helpMenuItems;
    helpMenuItems.push_back(std::make_pair("TBD - Sorry!", 1));
    viz.updSimbodyVisualizer().addMenu("Help", HelpMenuId, helpMenuItems);

    system.addEventReporter(new MyReporter(system,contactForces,ReportInterval));
	//system.addEventReporter(new Visualizer::Reporter(viz.updSimbodyVisualizer(), ReportInterval));
	
    // Check for a Run->Quit menu pick every <x> second.
	system.addEventHandler(new UserInputHandler(*silo, 0.001));

	system.realizeTopology();

	//Show ContactSurfaceIndex for each contact surface
  //  for (int i=0; i < matter.getNumBodies(); ++i) {
		//MobilizedBodyIndex mbx(i);
  //      const MobilizedBody& mobod = matter.getMobilizedBody(mbx);
  //      const int nsurfs = mobod.getBody().getNumContactSurfaces();
        //printf("mobod %d has %d contact surfaces\n", (int)mbx, nsurfs);
		////cout << "mobod with mass: " << (float)mobod.getBodyMass(si) << " has " << nsurfs << " contact surfaces" << endl;
		// //for (int i=0; i<nsurfs; ++i) {
  //          //printf("%2d: index %d\n", i, 
  //                 //(int)tracker.getContactSurfaceIndex(mbx,i)); 
  //      //}
  //  }

	//cout << "tracker num of surfaces: " << tracker.getNumSurfaces() << endl;

	//State state = system.getDefaultState();
	//viz.report(state);
	State& state = model.initializeState();
	viz.updSimbodyVisualizer().report(state);

	// Add reporters
    ForceReporter* forceReporter = new ForceReporter(&model);
    model.addAnalysis(forceReporter);

	CustomAnalysis* customReporter = new CustomAnalysis(&model, "r");
	model.addAnalysis(customReporter);

	// Create the integrator and manager for the simulation.
	SimTK::RungeKuttaMersonIntegrator integrator(model.getMultibodySystem());
	//SimTK::CPodesIntegrator integrator(model.getMultibodySystem());
	//integrator.setAccuracy(.01);
	//integrator.setAccuracy(1e-3);
	//integrator.setFixedStepSize(0.001);
	Manager manager(model, integrator);

	// Define the initial and final simulation times
	double initialTime = 0.0;
	double finalTime = 0.2;

	// Integrate from initial time to final time
	manager.setInitialTime(initialTime);
	manager.setFinalTime(finalTime);
	std::cout<<"\n\nIntegrating from "<<initialTime<<" to " <<finalTime<<std::endl;

	result = std::time(nullptr);
	std::cout << "\nBefore integrate(si) " << std::asctime(std::localtime(&result)) << endl;

	manager.integrate(state);

	result = std::time(nullptr);
	std::cout << "\nAfter integrate(si) " << std::asctime(std::localtime(&result)) << endl;

	// Save the simulation results
	Storage statesDegrees(manager.getStateStorage());
	statesDegrees.print("../outputs/states_flex.sto");
	model.updSimbodyEngine().convertRadiansToDegrees(statesDegrees);
	statesDegrees.setWriteSIMMHeader(true);
	statesDegrees.print("../outputs/states_degrees_flex.mot");
	// force reporter results
	forceReporter->getForceStorage().print("../outputs/force_reporter_flex.mot");
	//customReporter->print( "../outputs/custom_reporter_flex.mot");

	//cout << "You can choose 'Replay'" << endl;
	int menuId, item;
	unsigned int frameRate = 5;
	do { 
		cout << "Please choose 'Replay' or 'Quit'" << endl;
		viz.updInputSilo().waitForMenuPick(menuId, item);

        if (item != ReplayItem && item != QuitItem) 
            cout << "\aDude... follow instructions!\n";
		if (item == ReplayItem)
		{
			cout << "Type desired frame rate (integer) for playback and press Enter (default = 1) : ";
			//frameRate = cin.get();		
			cin >> frameRate;
			if (cin.fail()) 
			{
				cout << "Not an int. Setting default frame rate." << endl;
				cin.clear();
				cin.ignore(std::numeric_limits<int>::max(),'\n');
				frameRate = 1;
			}

			//cout << "saveEm size: " << saveEm.size() << endl;
			for (unsigned int i=0; i<saveEm.size(); i++)
			{
				viz.updSimbodyVisualizer().drawFrameNow(saveEm.getElt(i));
				if (frameRate == 0)
					frameRate = 1;
				usleep(1000000/frameRate);
			}
		}
	} while (menuId != RunMenuId || item != QuitItem);
}
예제 #6
0
int main(int argc, char **argv) {
	InitVars(argc, argv, "segment.cfg");
	if (argc != 2) {
		DLOG << "Usage: "<<argv[0]<<" INPUT"<<endl;
		exit(-1);
	}

	// Read image
	ImageBundle image(argv[1]);
	const int& w = image.nx();
	const int& h = image.ny();
	image.BuildHSV();

	// Convert to HSV and mono
	WriteHueOnly("out/h_only.png", image.hsv);

	// Segment
	FHSegmenter segmenter;
	TIMED("Segment")
		segmenter.Compute(image);
	const int num_segments = segmenter.num_segments;
	DLOG << "Generated " << num_segments << " segments";
	segmenter.OutputSegViz("out/segmentation.png");

	// Compute features for each segment
	HistSegmentFeatures<TextonLabeller<NhdPixelFeatures> > segftrs;
	segftrs.Compute(image.rgb, image.hsv, segmenter.segmentation, num_segments);
	segftrs.OutputLabelViz("out/label_map.png");

	// Compute similarity matrix
	MatF similarity(num_segments, num_segments);
	for (int i = 0; i < num_segments; i++) {
		similarity[i][i] = 0;
		for (int j = i+1; j < num_segments; j++) {
			const double ssd = VectorSSD(segftrs.features[i], segftrs.features[j]);
			similarity[i][j] = min(1.0/sqrt(ssd), 10);
			similarity[j][i] = similarity[i][j];
		}
	}
	similarity /= similarity.MaxValue();
	WriteMatrixImageRescaled("out/similarity.png", similarity);

	// Generate some vizualizations
	const int kNumViz = 15;
	ImageRGB<byte> viz(w, h);
	vector<PixelRGB<byte> > colors(num_segments);

	vector<int> segment_indices;
	sorted_order(segmenter.segment_sizes, segment_indices, greater<int>());

	for (int i = 0; i < kNumViz; i++) {
		// Pick a random pixel and use the segment at that pixel so that
		// larger segments are more likely to be chosen
		const int root = segment_indices[i];
		DREPORT(root);

		// Compute colors for each other segment
		for (int j = 0; j < num_segments; j++) {
			if (j == root) {
				colors[j].Set(255, 0, 0);
			} else {
				const int v = similarity[j][root] * 255;
				colors[j].Set(v, v, v);
			}
		}

		// Generate the vizualization
		for (int r = 0; r < h; r++) {
			PixelRGB<byte>* vizrow = viz[r];
			const int* segrow = segmenter.segmentation[r];
			for (int c = 0; c < w; c++) {
				vizrow[c] = colors[segrow[c]];
			}
		}
		WriteImage("out/sim"+PaddedInt(i,2)+".png", viz);
	}

	return 0;
}
예제 #7
0
void step(char *body){
	char in[100];
	int takeinput=1;
	int lastcommand=0;
	
	while(takeinput){
		scanf("%s",in);
		//printf("in %s\n",in);
		//printf("body %s\n",body);
		if(!strcmp(in,"step")||!strcmp(in,"s")){
			//take next step in program
			lastcommand=1;
			char nextstep[strlen(body)];
			int i;
			for(i=0;body[i]!=','&&body[i]!=0;i++){
				nextstep[i]=body[i];
			}
			nextstep[i]=0;
			if(!strncmp(nextstep,"//struct",8)){
				//printf("body %s %d\n",body+i,strncmp(body+i,"//ends",6));
				nextstep[i]=body[i];
				while(strncmp(body+i,"//ends",6)){
					//printf("loop\n");
					nextstep[i]=body[i];
					i++;
				}
				nextstep[i]=0;
				body+=6;
			}
			
			if(!strncmp(nextstep,"//while",7)){
				char * condition = nextstep+7;
				char num[strlen(nextstep)];
				int k=0;
				//printf("condition number %s\n",condition);
				while(*condition!=' '&&*condition){
					num[k]=*condition;
					condition++;
					k++;
				}
				num[k]=0;
				condition++;
				char cond[strlen(nextstep)];
				k=0;
				while(*condition!=','&&*condition){
					cond[k]=*condition;
					condition++;
					k++;
				}
				cond[k]=0;
				//printf("while condition %s\n",cond);
				executeStatement* e = new executeStatement(cond);
				void * ret=e->execute();
				//printf("ret %d\n",*(int *)ret);
				char loopbody[strlen(body)];
				loopbody[0]=0;
				//strcat(loopbody,nextstep);
				//loopbody[strlen(loopbody)]=',';
				//loopbody[strlen(loopbody)+1]=0;
				k=i+1;
				int wbool=1;
				while(wbool){
					for(i=0;body[k]!=','&&body[k]!=0;k++,i++){
						nextstep[i]=body[k];
						//printf("i = %d body=%c\n",i,body[k]);
					}
					nextstep[i]=body[k];
					k++;
					i++;
					nextstep[i]=0;
					//printf("nextstep %s num %s\n",nextstep,num);
					if(!strncmp(nextstep,"//endw",6)){
						//printf("got 1\n");
						if(!strncmp(nextstep+6,num,strlen(num))){
							wbool=0;
							//printf("got 2\n");
							continue;
						}
					}
					
					strcat(loopbody,nextstep);
				}
				loopbody[strlen(loopbody)-1]=0;
				//printf("loopbody %s\n",loopbody);
				if(*(int *)ret!=0){
					step(loopbody);
				}
				else{
					//printf("nextstep1251521 %s\nbody %s\nloopbody %s\n",nextstep,body,loopbody);
					//printf("nextstep %d body %d loopbody %d i %d\n",strlen(nextstep),strlen(body),strlen(loopbody),i);
					body+=i+strlen(loopbody)+strlen(nextstep)+strlen(cond)+3;
					if(*body==0)
						takeinput=0;
					//printf("body %s\n",body);
				}
				//printf("body123 %s\n",body);
			}
			else if(!strncmp(nextstep,"//if",4)){
				char * condition = nextstep+4;
				char num[strlen(nextstep)];
				int k=0;
				//printf("condition number %s\n",condition);
				while(*condition!=' '&&*condition){
					num[k]=*condition;
					condition++;
					k++;
				}
				num[k]=0;
				condition++;
				char cond[strlen(nextstep)];
				k=0;
				while(*condition!=','&&*condition){
					cond[k]=*condition;
					condition++;
					k++;
				}
				cond[k]=0;
				//printf("if condition %s\n",cond);
				executeStatement* e = new executeStatement(cond);
				void * ret=e->execute();
				//printf("ret %d\n",*(int *)ret);
				if(*(int *)ret!=0){
					char ifbody[strlen(body)];
					ifbody[0]=0;
					k=i+1;
					int wbool=1;
					int haselse=0;
					while(wbool){
						for(i=0;body[k]!=','&&body[k]!=0;k++,i++){
							nextstep[i]=body[k];
							//printf("i = %d body=%c\n",i,body[k]);
						}
						nextstep[i]=body[k];
						k++;
						i++;
						nextstep[i]=0;
						//printf("nextstep %s num %s\n",nextstep,num);
						if(!strncmp(nextstep,"//endf",6)||!strncmp(nextstep,"//else",6)){
							//printf("got 1\n");
							if(!strncmp(nextstep+6,num,strlen(num))){
								if(!strncmp(nextstep,"//else",6)){
									haselse=1;
								}
								wbool=0;
								//printf("got 2\n");
								continue;
							}
						}
					
						strcat(ifbody,nextstep);
					}
					ifbody[strlen(ifbody)-1]=0;
					//printf("ifbody %s\n",ifbody);
					step(ifbody);
					//printf("body prejump %s\n",body);
					body+=strlen(ifbody)+strlen(cond)+7+strlen(num)*2+6;
					if(*body==',')
						body++;
					//printf("body ifsasdf %s\n  %s\n%s\n",body,ifbody,cond);
					if(haselse){
						ifbody[0]=0;
						k=0;
						wbool=1;
						//printf("body elsesasdf %s\n",body);
						while(wbool){
							for(i=0;body[k]!=','&&body[k]!=0;k++,i++){
								nextstep[i]=body[k];
								//printf("i = %d body=%c\n",i,body[k]);
							}
							nextstep[i]=body[k];
							k++;
							i++;
							nextstep[i]=0;
							//printf("nextstep %s num %s\n",nextstep,num);
							if(!strncmp(nextstep,"//ende",6)){
								//printf("got 1\n");
								if(!strncmp(nextstep+6,num,strlen(num))){
									wbool=0;
									//printf("got 2\n");
									continue;
								}
							}
					
							strcat(ifbody,nextstep);
						}
						ifbody[strlen(ifbody)-1]=0;
						//printf("bodypree jump elso %s\n",body);
						body+=strlen(ifbody)+7+strlen(num);
						if(*body==',')
							body++;
						//printf("body else1345 %s\n",body);
					}
					//body+=strlen(nextstep);
					if(*body==0)
						takeinput=0;
				}
				else{
					char ifbody[strlen(body)];
					ifbody[0]=0;
					k=i+1;
					int wbool=1;
					int haselse=0;
					while(wbool){
						for(i=0;body[k]!=','&&body[k]!=0;k++,i++){
							nextstep[i]=body[k];
							//printf("i = %d body=%c\n",i,body[k]);
						}
						nextstep[i]=body[k];
						k++;
						i++;
						nextstep[i]=0;
						//printf("nextstep %s num %s\n",nextstep,num);
						if(!strncmp(nextstep,"//endf",6)||!strncmp(nextstep,"//else",6)){
							//printf("got 1\n");
							if(!strncmp(nextstep+6,num,strlen(num))){
								if(!strncmp(nextstep,"//else",6)){
									haselse=1;
								}
								wbool=0;
								//printf("got 2\n");
								continue;
							}
						}
					
						strcat(ifbody,nextstep);
					}
					ifbody[strlen(ifbody)-1]=0;
					//printf("abody %s\n",body);
					body+=strlen(ifbody)+strlen(cond)+7+strlen(num)*2+6;
					//printf("body ifsasdf2365 %c\n",*body);
					if(*body==',')
						body++;
					//printf("body ifsasdf %s\n",body);
					if(haselse){
						ifbody[0]=0;
						k=0;
						wbool=1;
						//printf("body elsesasdf %s\n",body);
						while(wbool){
							for(i=0;body[k]!=','&&body[k]!=0;k++,i++){
								nextstep[i]=body[k];
								//printf("i = %d body=%c\n",i,body[k]);
							}
							nextstep[i]=body[k];
							k++;
							i++;
							nextstep[i]=0;
							//printf("nextstep %s num %s\n",nextstep,num);
							if(!strncmp(nextstep,"//ende",6)){
								//printf("got 1\n");
								if(!strncmp(nextstep+6,num,strlen(num))){
									wbool=0;
									//printf("got 2\n");
									continue;
								}
							}
					
							strcat(ifbody,nextstep);
						}
						ifbody[strlen(ifbody)-1]=0;
						//printf("elsebody %s\n",ifbody);
						step(ifbody);
						//printf("bodypree jump elso %s\n",body);
						body+=strlen(ifbody)+7+strlen(num);
						if(*body==',')
							body++;
						//printf("body else1345 %s\n",body);
					}
					if(*body==0)
						takeinput=0;
				}
			}
			else{
				//printf("adding body\n");
				if(body[i]!=0)
					body+=i+1;
				else//were done
					takeinput=0;
				executeStatement* e = new executeStatement(nextstep);
				e->execute();
			}
			for(i=0;body[i]!=','&&body[i]!=0;i++){
				nextstep[i]=body[i];
			}
			nextstep[i]=0;
			printf("nextstep %s %d\n",nextstep,i);
		}
		else if(!strcmp(in,"continue")||!strcmp(in,"c")){
			//continue the program
			lastcommand=2;
		}
		else if(!strcmp(in,"quit")||!strcmp(in,"q")){
			//quit the program
			takeinput=0;
		}
		//insert more commands here possibly break, print, set, etc
		else if(!strcmp(in,"print")||!strcmp(in,"p")){
			frame * curframe=cstack::thiscstack.getframe(cstack::thiscstack.stacksize-1);
			scanf("%s",in);
			
			int ret=cstack::thiscstack.find(curframe,in);
			if(ret>=0){
				stack *s = curframe->sstack[ret];
				viz(s);
			}
			else
				printf("variable does not exist %s\n",in);
		}
		
	}  

  return;
}