Пример #1
0
void BamKeysKeyView::Draw(BRect update) {
	if (fKeyLabel != NULL) {
		DrawTo(this, this->Bounds(), fKey, fPressed, fKeyLabel->String(), fTransparency);
	} else {
		DrawTo(this, this->Bounds(), fKey, fPressed, NULL, fTransparency);
	}
}
Пример #2
0
// Draw a line using the current pen color.
void ScrollView::Line(int x1, int y1, int x2, int y2) {
  if (!points_->xcoords.empty() && x1 == points_->xcoords.back() &&
      TranslateYCoordinate(y1) == points_->ycoords.back()) {
    // We are already at x1, y1, so just draw to x2, y2.
    DrawTo(x2, y2);
  } else if (!points_->xcoords.empty() && x2 == points_->xcoords.back() &&
      TranslateYCoordinate(y2) == points_->ycoords.back()) {
    // We are already at x2, y2, so just draw to x1, y1.
    DrawTo(x1, y1);
  } else {
    // This is a new line.
    SetCursor(x1, y1);
    DrawTo(x2, y2);
  }
}
Пример #3
0
void 
GEOM_WireframeFace:: 
CreateIso__(const BRepAdaptor_Surface& theSurface, 
            GeomAbs_IsoType theIsoType,
                                    Standard_Real& theU, 
                                    Standard_Real& theV, 
                                    Standard_Real theStep, 
            vtkPolyData* thePolyData,
            vtkPoints* thePts)
{
  gp_Pnt Pl, Pr, Pm;
  if (theIsoType == GeomAbs_IsoU) {
    theSurface.D0(theU, theV, Pl);
    theSurface.D0(theU, theV + theStep/2., Pm);
    theSurface.D0(theU, theV + theStep, Pr);
  } else {
    theSurface.D0(theU, theV, Pl);
    theSurface.D0(theU + theStep/2., theV, Pm);
    theSurface.D0(theU + theStep, theV, Pr);
  }

  static Standard_Real ISO_RATIO = 1.001;
  if (Pm.Distance(Pl) + Pm.Distance(Pr) <= ISO_RATIO*Pl.Distance(Pr)) {
    DrawTo(Pr,thePolyData,thePts);
  } else {
    if (theIsoType == GeomAbs_IsoU) {
      CreateIso__(theSurface, theIsoType, theU, theV, theStep/2, thePolyData, thePts);
      Standard_Real aLocalV = theV + theStep/2 ;
      CreateIso__(theSurface, theIsoType, theU, aLocalV , theStep/2, thePolyData, thePts);
    } else {
      CreateIso__(theSurface, theIsoType, theU, theV, theStep/2, thePolyData, thePts);
      Standard_Real aLocalU = theU + theStep/2 ;
      CreateIso__(theSurface, theIsoType, aLocalU , theV, theStep/2, thePolyData, thePts);
    }
  }
}
Пример #4
0
// Sets the position from which to draw to (x,y).
void ScrollView::SetCursor(int x, int y) {
  SendPolygon();
  DrawTo(x, y);
}
Пример #5
0
void 
GEOM_WireframeFace:: 
CreateIso_(const TopoDS_Face& theFace,
           GeomAbs_IsoType theIsoType, 
           Standard_Real Par, 
           Standard_Real T1,
           Standard_Real T2,
           const int theDiscret, 
           vtkPolyData* thePolyData,
           vtkPoints* thePts)
{
  Standard_Real U1, U2, V1, V2, stepU=0., stepV=0.;
  Standard_Integer j;
  gp_Pnt P;

  TopLoc_Location aLoc;
  const Handle(Geom_Surface)& S = BRep_Tool::Surface(theFace,aLoc);

  if(!S.IsNull()){
    BRepAdaptor_Surface S(theFace,Standard_False);
      
    GeomAbs_SurfaceType SurfType = S.GetType();

    GeomAbs_CurveType CurvType = GeomAbs_OtherCurve;

    Standard_Integer Intrv, nbIntv;
    Standard_Integer nbUIntv = S.NbUIntervals(GeomAbs_CN);
    Standard_Integer nbVIntv = S.NbVIntervals(GeomAbs_CN);
    TColStd_Array1OfReal TI(1,Max(nbUIntv, nbVIntv)+1);

    if(theIsoType == GeomAbs_IsoU){
      S.VIntervals(TI, GeomAbs_CN);
      V1 = Max(T1, TI(1));
      V2 = Min(T2, TI(2));
      U1 = Par;
      U2 = Par;
      stepU = 0;
      nbIntv = nbVIntv;
    }else{
      S.UIntervals(TI, GeomAbs_CN);
      U1 = Max(T1, TI(1));
      U2 = Min(T2, TI(2));
      V1 = Par;
      V2 = Par;
      stepV = 0;
      nbIntv = nbUIntv;
    }   
        
    S.D0(U1,V1,P);
    MoveTo(P,thePts);

    for(Intrv = 1; Intrv <= nbIntv; Intrv++){
      if(TI(Intrv) <= T1 && TI(Intrv + 1) <= T1)
        continue;
      if(TI(Intrv) >= T2 && TI(Intrv + 1) >= T2)
              continue;
      if(theIsoType == GeomAbs_IsoU){
              V1 = Max(T1, TI(Intrv));
              V2 = Min(T2, TI(Intrv + 1));
              stepV = (V2 - V1) / theDiscret;
      }else{
              U1 = Max(T1, TI(Intrv));
              U2 = Min(T2, TI(Intrv + 1));
              stepU = (U2 - U1) / theDiscret;
      }

      switch (SurfType) {
      case GeomAbs_Plane :
              break;
      case GeomAbs_Cylinder :
      case GeomAbs_Cone :
        if(theIsoType == GeomAbs_IsoV){
                for(j = 1; j < theDiscret; j++){
                  U1 += stepU;
                  V1 += stepV;
                  S.D0(U1,V1,P);
                  DrawTo(P,thePolyData,thePts);
                }
              }
              break;
      case GeomAbs_Sphere :
      case GeomAbs_Torus :
      case GeomAbs_OffsetSurface :
      case GeomAbs_OtherSurface :
        for(j = 1; j < theDiscret; j++){
                U1 += stepU;
                V1 += stepV;
                S.D0(U1,V1,P);
                DrawTo(P,thePolyData,thePts);
              }
              break;
      case GeomAbs_BezierSurface :
      case GeomAbs_BSplineSurface :
        for(j = 1; j <= theDiscret/2; j++){
          Standard_Real aStep = (theIsoType == GeomAbs_IsoV) ? stepU*2. : stepV*2.;
                CreateIso__(S, theIsoType, U1, V1, aStep, thePolyData, thePts);
                U1 += stepU*2.;
                V1 += stepV*2.;
              }
              break;
      case GeomAbs_SurfaceOfExtrusion :
      case GeomAbs_SurfaceOfRevolution :
        if((theIsoType == GeomAbs_IsoV && SurfType == GeomAbs_SurfaceOfRevolution) ||
                 (theIsoType == GeomAbs_IsoU && SurfType == GeomAbs_SurfaceOfExtrusion)) 
        {
                if(SurfType == GeomAbs_SurfaceOfExtrusion) 
            break;
                for(j = 1; j < theDiscret; j++){
                  U1 += stepU;
                  V1 += stepV;
                  S.D0(U1,V1,P);
                  DrawTo(P,thePolyData,thePts);
                }
              }else{
                CurvType = (S.BasisCurve())->GetType();
                switch(CurvType){
                case GeomAbs_Line :
                  break;
                case GeomAbs_Circle :
                case GeomAbs_Ellipse :
                  for (j = 1; j < theDiscret; j++) {
                    U1 += stepU;
                    V1 += stepV;
                    S.D0(U1,V1,P);
                    DrawTo(P,thePolyData,thePts);
                  }
                  break;
                case GeomAbs_Parabola :
                case GeomAbs_Hyperbola :
                case GeomAbs_BezierCurve :
                case GeomAbs_BSplineCurve :
                case GeomAbs_OtherCurve :
                  for(j = 1; j <= theDiscret/2; j++){
              Standard_Real aStep = (theIsoType == GeomAbs_IsoV) ? stepU*2. : stepV*2.;
                  CreateIso__(S, theIsoType, U1, V1, aStep, thePolyData, thePts);
                    U1 += stepU*2.;
                    V1 += stepV*2.;
                  }
                  break;
                }
              }
      }
    }
    S.D0(U2,V2,P);
    DrawTo(P,thePolyData,thePts);
  }  
}