示例#1
0
int main (int argc, char **argv) {
  FILE *f;
  int i,j;
  char temp[255],*s;

  f=fopen (argv[1],"rt");
  for (j=0; j<SIZE; j++) {
    s=fgets (temp,255,f);
    for (i=0; i<SIZE; i++)
      maze[i][j]=s[i]=='X';
  }
  fclose (f);

  for (j=0; j<SIZE; j++) {
    for (i=0; i<SIZE; i++)
      printf (maze[i][j]?"X":" ");
    printf ("\n");
  }

  build_wall();

  for (j=0; j<SIZE; j++) 
    for (i=0; i<SIZE; i++)
      if (!maze[i][j])
        vis (i,j);

  return 0;
}
示例#2
0
DesignView::DesignView(ViewStack* vs, MapView* mapv, City* c)
: vstk(vs), mv(mapv), city(c), fdv(new FurnitureDesignView(this)), rdv(new RoomsDesignView(this))
{
  nav.register_key(KEY_Escape, "[Esc] Back", [this]() { vstk->pop(); });
  nav.register_key(KEY_space, "[Spc] Pause", [this]() { paused = !paused; });
  nav.register_key(KEY_Return, "[Ent] Build Wall", [this]() { build_wall(); });
  nav.register_key(KEY_Delete, "[Del] Remove Wall", [this]() { remove_wall(); });

  nav.register_key(KEY_r, "[r] Construct Room", [this]() { vstk->push(rdv.get()); });
  nav.register_key(KEY_f, "[f] Place Furniture", [this]() { vstk->push(fdv.get()); });

}
示例#3
0
//____________________________________________________________________
int geometry_tpc_v5() {

  gROOT->LoadMacro("$VMCWORKDIR/macro/mpd/geometry/mpdshape.class.C");
  gROOT->LoadClass("Mpdshape");

  const char* filename = "tpc_v5.geo";

  // output file
  f = new ofstream(filename, ios::out | ios::trunc);

  // streams
  std::ostringstream points, position, rotation;
  points.setf(ios::showpoint); points.setf(ios::fixed);
  points << setprecision(6);
  position.setf(ios::showpoint); position.setf(ios::fixed);
  position << setprecision(6);
  rotation.setf(ios::showpoint); rotation.setf(ios::fixed);
  rotation << setprecision(6);


  // create full tpc volume
  Fill_TUBE(tpc_z, TpcInnRad, TpcOutRad);
  // std::cout << points.str() << endl;
  Mpdshape* tube = new Mpdshape(f, "tpcChamber1", "cave", "TUBE",
				"air", points.str());
  tube->SetSegment(0);
  tube->DumpToFile();

  build_wall("In", TpcInnRad);
  build_wall("Out", TpcOutRad - wall_thickness);
  delete tube;
  

  // ===========================================================
  //     make TPC membrane

  Clear();
  Double_t xWidth,yWidth,zWidth,kx,my,kz,phi_cent;
  // make membrane
  zWidth = mem_thick;

  Fill_TUBE(zWidth, TpcInnRad + wall_thickness, TpcOutRad - wall_thickness);

  Mpdshape* membrane = new Mpdshape(f, "tpc01mb", "tpcChamber1", "TUBE",
				"rohacellhf71", points.str());
  membrane->SetPosition(0., 0., 0.);
  membrane->DumpToFile();

#ifdef SENSIT
  // ===========================================================
  //     TPC sensitive volume

  // make half of sensitive volume
  zWidth = .5*(tpc_drift_z - mem_thick);

  Fill_TUBE(zWidth, TpcInnRad + wall_thickness, TpcOutRad - wall_thickness);

  Mpdshape* tpchalf = new Mpdshape(f, "tpc01mod", "tpcChamber1", "TUBE",
				"air", points.str());
  tpchalf->SetSegment(1);
  tpchalf->SetPosition(0., 0., tpc_drift_z - zWidth);
  tpchalf->SetRotation(" 1. 0. 0. 0. 1. 0. 0. 0.  1.");
  tpchalf->DumpWithIncrement();

  // make field cage
  FieldCage(zWidth);
  
  // make sectors
  internal_sector();
  
  //  second half sens vol
  tpchalf->SetPosition(0., 0., -tpc_drift_z + zWidth);
  tpchalf->SetRotation(" 1. 0. 0. 0. 1. 0. 0. 0. -1.");
  tpchalf->DumpToFile();

#endif

#ifdef ENDCAP

  // ===========================================================
  //                          Begin EndCap
  // ===========================================================

  zWidth =.5*(tpc_z - tpc_drift_z); 
  
  Fill_TUBE(zWidth, TpcInnRad, TpcOutRad);
  
  //  endcap
  Mpdshape* tpcendcap = new Mpdshape(f, "tpc01ec", "tpcChamber1", "TUBE",
				"air", points.str());
  tpcendcap->SetSegment(1);
  
  Double_t z_ec = zWidth + tpc_drift_z;
  tpcendcap->SetPosition(0., 0., z_ec);
  tpcendcap->SetRotation(" 1. 0. 0. 0. 1. 0. 0. 0.  1.");
  tpcendcap->DumpWithIncrement();


  //============================================================
  //            Flanches
  //============================================================

  // al flanch outer

  Fill_TUBE(.5*flanch_thickness, outer_flanch_in_rad, TpcOutRad);

  Mpdshape* flanch = new Mpdshape(f, "tpc01of", "tpc01ec#1", "TUBE",
				"aluminium", points.str());
  flanch->SetPosition(0., 0., .5*flanch_thickness - zWidth );
  flanch->DumpToFile();

  // al flanch  inner South

  Fill_TUBE(.5*flanch_thickness, TpcInnRad, inner_flanch_out_rad);

  flanch->SetVolumeName("tpc01if");
  flanch->SetMedia("aluminium");
  flanch->SetPoints(points.str());
  flanch->DumpToFile();

 // ==========  Ribs  ============================

  xWidth = 0.5*rib_width_x; // x - half-dimension of block
  yWidth = .5*(TMath::Sqrt(TpcOutRad*TpcOutRad - xWidth*xWidth) -
			TpcInnRad); // y - half-dimension of block
  zWidth = .5*rib_width_z; // z - half-dimension of block

  kz = flanch_thickness + rib_pos_z - zWidth;

  // tpc ribs 
  Fill_BOX(xWidth, yWidth, zWidth);

  Mpdshape* tpcrib = new Mpdshape(f, "tpc01Rib", "tpc01ec#1", "BOX", "aluminium",
				   points.str(), position.str());
  tpcrib->SetSegment(1);

  Double_t center_rad = TpcInnRad + yWidth;
  //  cout << "center_rad_rib: " << center_rad << "\n";

  for (Int_t k = 0; k <  Nsect; k++) {

    phi_cent = k*phi_step + .5*phi_step;
    Double_t kx = center_rad* TMath::Cos(phi_cent);
    Double_t my = center_rad* TMath::Sin(phi_cent);
    Double_t zRot = step*k  - 90. + .5*step;

    tpcrib->SetPosition(kx, my, kz);
    tpcrib->SetRotation(zRot, 0.0, .0);

    tpcrib->DumpWithIncrement();
  }
  external_sector();                            
 
//  second end-cup:
  tpcendcap->SetPosition(0., 0., -z_ec);
  tpcendcap->SetRotation(" 1. 0. 0. 0. 1. 0. 0. 0. -1.");
  tpcendcap->DumpToFile();

#endif

  // close geometry file                                                       
  f->close(); 

}