コード例 #1
0
ファイル: pdf.cpp プロジェクト: Ambrevar/fr_public
sBool Wz4PDF::TraceRay(sVector31 &p, sVector30 &n, const sRay &ray, const sF32 md, const sF32 mx, const sInt mi)
{   
  sInt i=0;
  sF32 d=10000;  
  sF32 id=0;
  sVector31 np;
  sVector31 tp = ray.Start;  

  do
  {
    p = tp;
    sF32 td = Obj->GetDistance(p);          
    if (td<=d)
    {
      d=td;  
      np=p;
    }
    tp = tp + ray.Dir * sAbs(td);
    id+= sAbs(td);
  }while (d>md && i++!=mi && id<mx);
   
  if (d<=md)
    Obj->GetNormal(np,n);

  return d<=md;
}
コード例 #2
0
ファイル: pdf.cpp プロジェクト: Ambrevar/fr_public
sF32 Wz4PDFCube::GetDistance(const sVector31 &p)
{

  sF32 t=sAbs(p.x);  
  t = sMax(t,sAbs(p.y));
  t = sMax(t,sAbs(p.z));
  t -= 0.5f;

  if ((p.x>0.5f || p.x<-0.5f) &&
      (p.y>0.5f || p.y<-0.5f) &&
      (p.z>0.5f || p.z<-0.5f))
  {
    sF32 x=p.x>0.0f ? 0.5f:-0.5f;
    sF32 y=p.y>0.0f ? 0.5f:-0.5f;
    sF32 z=p.z>0.0f ? 0.5f:-0.5f;
    x-=p.x;
    y-=p.y;
    z-=p.z;
    t=sSqrt(x*x+y*y+z*z);
  }
 
  return t;
}
コード例 #3
0
ファイル: adf.cpp プロジェクト: loCurnus/werkkzeug4CE
sBool Wz4ADF::TraceRay(sVector31 &p, sVector30 &n, const sRay &ray, const sF32 md, const sF32 mx, const sInt mi)
{  
  if (!SDF)
    return false;

  sAABBox box;
  SDF->GetBox(box);

  box.Min.x += 1/8192.0f;
  box.Min.y += 1/8192.0f;
  box.Min.z += 1/8192.0f;
  box.Max.x -= 1/8192.0f;
  box.Max.y -= 1/8192.0f;
  box.Max.z -= 1/8192.0f;

  p = ray.Start;
  sF32 d;  

  sF32 mind=0;
  sF32 maxd=10000.0;      

  if (ray.HitAABB(mind,maxd,box.Min,box.Max))      
  {        
    p = ray.Start + ray.Dir * mind;
    d = 0;                

    n.x = 0.0f;
    n.y = 1.0f;
    n.z = 0.0f;

    while (SDF->IsInBox(p))        
    {          
      d = SDF->GetDistance(p);
      if (d<=1.0f/64.0f)
      {
        SDF->GetNormal(p,n);
        return true;
      }                  
      n.x = 0.0f;
      n.y = 0.0f;
      n.z = 1.0f;
      p = p + ray.Dir * sAbs(d);
    }            
  }
  return false;  
}
コード例 #4
0
ファイル: winpage.cpp プロジェクト: Ambrevar/fr_public
void PageWin::OnDrag(sDragData &dd)
{
  sU32 key;
  PageOp *po;
  PageDoc *pd;
  sInt i,max;
  sRect r;
  ParaWin *parawin;
  sBool pickit;

  pd = Doc;
  if(pd==0) return;
  max = pd->Ops->GetCount();

  if(MMBScrolling(dd,DragStartX,DragStartY)) return;

  switch(dd.Mode)
  {
  case sDD_START:
    CursorX = sRange<sInt>((dd.MouseX-Client.x0)/PAGEX-1,PAGESX-3,0);
    CursorY = sRange<sInt>((dd.MouseY-Client.y0)/PAGEY  ,PAGESY-1,0);
    CursorWidth = 3;
    pickit = 0;

    if(dd.Buttons&2)
    {
      sGui->Post(CMD_POPUP,this);
      break;
    }
    SelectMode = SM_SET;
    key = sSystem->GetKeyboardShiftState();
    if(key&sKEYQ_SHIFT)
      SelectMode = SM_ADD;
    if(key&sKEYQ_CTRL)
      SelectMode = SM_TOGGLE;

    DragMode = DragKey;

    if(DragMode==DM_SELECT)
    {
      po = FindOp(dd.MouseX,dd.MouseY);
      if(po)
      {
        DragMode = DM_PICK;
        pickit = 1;
        if(po->Selected)
          SelectMode = SM_ADD;
      }
      else 
      {
        DragMode = DM_RECT;
      }
    }

    if(DragMode==DM_DUPLICATE || DragMode==DM_WIDTH || DragMode==DM_MOVE)
    {
      po = FindOp(dd.MouseX,dd.MouseY);
      if(po && !po->Selected)
      {
        pickit = 1;
        SelectMode = SM_SET;
      }
    }

    DragStartX = dd.MouseX;
    DragStartY = dd.MouseY;
    DragMoveX = 0;
    DragMoveY = 0;
    DragWidth = 0;

    if(DragMode==DM_PICK || pickit)
    {
      if(SelectMode==SM_SET)
        for(i=0;i<max;i++)
          pd->Ops->Get(i)->Selected = sFALSE;
      EditOp = po = FindOp(dd.MouseX,dd.MouseY);
      if(po)
      {
        parawin = (ParaWin *) App->FindActiveWindow(sCID_TOOL_PARAWIN);
        if(parawin)
        {
          parawin->SetOp(po,Doc);
          pd->UpdatePage();
        }
        if(SelectMode==SM_TOGGLE)
          po->Selected = !po->Selected;
        else
          po->Selected = sTRUE;
      }
    }

    if(DragMode==DM_RECT)
    {
      DragRect.Init(dd.MouseX,dd.MouseY,dd.MouseX+1,dd.MouseY+1);
      EditOp = 0;
    }
    if(DragMode==DM_SCROLL)
    {
      DragStartX = ScrollX;
      DragStartY = ScrollY;
    }
    break;

  case sDD_DRAG:
    switch(DragMode)
    {
    case DM_PICK:
      if(sAbs(dd.DeltaX)>2 || sAbs(dd.DeltaY)>2)
        DragMode = DM_MOVE;
      break;
    case DM_RECT:
      DragRect.Init(dd.MouseX,dd.MouseY,DragStartX,DragStartY);
      DragRect.Sort();
      break;
    case DM_MOVE:
    case DM_DUPLICATE:
      DragMoveX = (dd.DeltaX+1024*PAGEX+PAGEX/2)/PAGEX-1024;
      DragMoveY = (dd.DeltaY+1024*PAGEY+PAGEY/2)/PAGEY-1024;
      break;
    case DM_WIDTH:
      DragWidth = (dd.DeltaX+1024*PAGEX+PAGEX/2)/PAGEX-1024;
      break;
    case DM_SCROLL:
      ScrollX = sRange<sInt>(DragStartX-dd.DeltaX,SizeX-RealX,0);
      ScrollY = sRange<sInt>(DragStartY-dd.DeltaY,SizeY-RealY,0);
      break;
    }
    break;

  case sDD_STOP:
    switch(DragMode)
    {
    case DM_RECT:
      for(i=0;i<max;i++)
      {
        po = pd->Ops->Get(i);
        if(SelectMode==SM_SET)
          po->Selected = sFALSE;
        po->MakeRect(r,Client);
        if(r.Hit(DragRect))
        {
          if(SelectMode==SM_TOGGLE)
            po->Selected = !po->Selected;
          else
            po->Selected = sTRUE;
        }
      }
      break;
    case DM_MOVE:
    case DM_WIDTH:
      if(CheckDest(sFALSE))
        MoveDest(sFALSE);
      break;
    case DM_DUPLICATE:
      if(CheckDest(sTRUE))
        MoveDest(sTRUE);
      break;
    }
    DragMode = 0;
    DragMoveX = 0;
    DragMoveY = 0;
    DragWidth = 0;
    break;
  }
}
コード例 #5
0
ファイル: trigger.c プロジェクト: ChrisCarlsen/tortuga
int blockTrigger(struct dataset * s, int ch, int highestDftSample)
{
    if(s == NULL)
        return -1;

    if(highestDftSample < BACKTRACK)
    {
        fprintf(stderr, "DFT trigger point too close to left edge of ping.\n");
        return -1;
    }

    fprintf(stderr, "Beginning block triggering using %d blocks at sample %d\n",
                    BACKTRACK / BLOCKSIZE, highestDftSample);

    int i=0, j=0;
    int searchStart, searchEnd;

    searchStart = highestDftSample - BACKTRACK;
    searchEnd = highestDftSample;

    int blockMax = 0;
    int lastBlockMax = 0;

    int blockJump = 0;
    int highestJump = 0;
    int highestJumpIndex = 0;

    int curBlock=0;
    int triggeredBlock = 0;


    fprintf(stdout, "Searching region %d to %d\n", searchStart, searchEnd);

    for(i=searchStart; i<searchEnd; i+= BLOCKSIZE)
    {
        lastBlockMax = blockMax;
        blockMax = sAbs(getSample(s, ch, i+j));

        /* Find maximum of this block */
        for(j=0; j<BLOCKSIZE; j++)
        {
            signed short curSample = sAbs(getSample(s, ch, i+j));
            if(sAbs(curSample) > blockMax)
                blockMax = curSample;
        }

        blockJump = abs(blockMax - lastBlockMax);

        if(blockJump > highestJump)
        {
            highestJump = blockJump;
            highestJumpIndex = i;
            triggeredBlock = curBlock;
        }
        curBlock++;
    }

    fprintf(stderr, "Highest block jump occurs at sample %d\n", highestJumpIndex);
    fprintf(stderr, "Triggered on block %d\n", triggeredBlock);


    return highestJumpIndex;
}
コード例 #6
0
ファイル: genvector.cpp プロジェクト: Ambrevar/fr_public
static sU32 deltaCode(sInt val, sInt& last)
{
  sInt delta = val-last;
  last = val;
  return sAbs(delta) * 2 - (delta < 0);
}