Exemple #1
0
/* makeSelfArcs:
 * Generate loops. We use the library routine makeSelfEdge
 * which also places the labels.
 * We have to handle port labels here.
 * as well as update the bbox from edge labels.
 */
void makeSelfArcs(path * P, edge_t * e, int stepx)
{
    int cnt = ED_count(e);

    if ((cnt == 1) || Concentrate) {
	edge_t *edges1[1];
	edges1[0] = e;
	makeSelfEdge(P, edges1, 0, 1, stepx, stepx, &sinfo);
	if (ED_label(e))
	    updateBB(agraphof(agtail(e)), ED_label(e));
	makePortLabels(e);
    } else {
	int i;
	edge_t **edges = N_GNEW(cnt, edge_t *);
	for (i = 0; i < cnt; i++) {
	    edges[i] = e;
	    e = ED_to_virt(e);
	}
	makeSelfEdge(P, edges, 0, cnt, stepx, stepx, &sinfo);
	for (i = 0; i < cnt; i++) {
	    e = edges[i];
	    if (ED_label(e))
		updateBB(agraphof(agtail(e)), ED_label(e));
	    makePortLabels(e);
	}
	free(edges);
    }
}
Exemple #2
0
bool BVHRefine::refineRecursive(unsigned int idx, Vector3 &min, Vector3 &max)
{
	BSPArrayTreeNode node;
	fseek(fpo, GETNODEOFFSET(idx), SEEK_SET);
	fread(&node, sizeof(BSPArrayTreeNode), 1, fpo);
	I32 minQ[3], maxQ[3];
	pq->EnQuantize(node.min.e, minQ);
	pq->EnQuantize(node.max.e, maxQ);
	pq->DeQuantize(minQ, node.min.e);
	pq->DeQuantize(maxQ, node.max.e);
	min = node.min;
	max = node.max;

	if(ISLEAF(&node)) return true;

	Vector3 lChildMin, lChildMax;
	Vector3 rChildMin, rChildMax;
	refineRecursive(node.children, lChildMin, lChildMax);
	refineRecursive(node.children2, rChildMin, rChildMax);
	updateBB(node.min, node.max, lChildMin);
	updateBB(node.min, node.max, lChildMax);
	updateBB(node.min, node.max, rChildMin);
	updateBB(node.min, node.max, rChildMax);

	fseek(fpd, GETNODEOFFSET(idx), SEEK_SET);
	fwrite(&node, sizeof(BSPArrayTreeNode), 1, fpd);
	min = node.min;
	max = node.max;

	return true;
}
OBJCTXT<_DOF6> &OBJCTXT<_DOF6>::transform(const DOF6 &tf)
{
  for(size_t i=0; i<objs_.size(); i++)
    objs_[i]->transform(tf.getRotation(), tf.getTranslation(), tf.getRotationVariance(), tf.getTranslationVariance());
  updateBB();
  return *this;
}
Exemple #4
0
void CsgDisk::T_applyTransfo(float tx, float ty, float rad, float vx, float vy)
{
    m_T_matrix.setId();
    m_T_matrix.addTranslation(tx, ty);
    m_T_matrix.addScaling(vx, vy);
    //m_T_matrix.addRotation(rad); ignoré: un cercle n'a pas de rotation...
    m_T_inverted=m_T_matrix.invert();
    updateBB();
}
Exemple #5
0
void UnitGroup::update() {
	//clear mBB
	mBB = osg::BoundingBox();
	//add all units to the bb
	for (unsigned int i=0; i < mUnits.size(); i++) {
		if (theApp->unitExists(mUnits[i])) {
			updateBB(mUnits[i]);
		}
	}
}
HRESULT IDXGISwapChainNew::ResizeBuffers(UINT BufferCount,UINT Width,UINT Height,DXGI_FORMAT NewFormat,UINT SwapChainFlags)
{
  dbg("dxgi_sc: ResizeBuffers %dx%d", Width, Height);
  preUpdateBB(&Width, &Height);
  HRESULT ret = dxgsc->ResizeBuffers(BufferCount, Width, Height, NewFormat, SwapChainFlags);
  if(ret == S_OK) {
    updateBB(); // Backbuffer was recreated
  } else {
    dbg("dxgi_sc: ResizeBuffers failed!");
  }
  return ret;
};
IDXGISwapChainNew::IDXGISwapChainNew(IDXGIFactory *parentNew, IDXGIFactory *dxgifNew, IUnknown *pDevice, DXGI_SWAP_CHAIN_DESC *scd)
{
  // Creating new swapchain
  dbg("dxgi_sc: IDXGISwapChainNew 0x%08X 0x%08X", this, pDevice);


  win = scd->OutputWindow;
  newbb10 = NULL;
  newbb11 = NULL;
  //stagedSurfs11 = NULL;
  dev10 = NULL;
  dev10_1 = NULL;
  dev11 = NULL;
  //dev12 = NULL;
  dxgsc = NULL;
  dxgif = (IDXGIFactory1*)dxgifNew;
  parent = (IDXGIFactory1*)parentNew;
  realbb10 = NULL;
  realbb11 = NULL;

  if(!pDevice)
    dbg("dxgi_sc: ERROR: NULL device!");
  else {
    // Check for D3D10/11 device
    if(pDevice->QueryInterface(__uuidof(ID3D10Device), (void**) &dev10) == S_OK)
      dbg("Got Direct3D 10 device");
    else if(pDevice->QueryInterface(__uuidof(ID3D10Device1), (void**) &dev10_1) == S_OK)
      dbg("dxgi_sc: Got Direct3D 10.1 device");
    else if(pDevice->QueryInterface(__uuidof(ID3D11Device), (void**) &dev11) == S_OK)
      dbg("dxgi_sc: Got Direct3D 11 device");
    else
      dbg("dxgi_sc: ERROR: Unknown swapchain device type!");

    if(dev11 || dev10_1 || dev10)
    {
      // Check for TH mode and create bb texture
      preUpdateBB(&scd->BufferDesc.Width, &scd->BufferDesc.Height);
    }
  }

  // Create the swapchain
  HRESULT ret = dxgif->CreateSwapChain(pDevice, scd, &dxgsc);
  if(ret != S_OK)
    dbg("dxgi_sc: CreateSwapChain failed!");
  else
    updateBB();

}
Exemple #8
0
void UnitGroup::addUnit(Unit* unit) {
	if (unit != NULL) {
		mUnits.push_back(unit);
		updateBB(unit);
	}
}
Exemple #9
0
static void addXLabels(Agraph_t * gp)
{
    Agnode_t *np;
    Agedge_t *ep;
    int cnt, i, n_objs, n_lbls;
    int n_nlbls = 0;		/* # of unset node xlabels */
    int n_elbls = 0;		/* # of unset edge labels or xlabels */
    int n_set_lbls = 0;		/* # of set xlabels and edge labels */
    int n_clbls = 0;		/* # of set cluster labels */
    boxf bb;
    pointf ur;
    textlabel_t* lp;
    label_params_t params;
    object_t* objs;
    xlabel_t* lbls;
    object_t* objp;
    xlabel_t* xlp;
    Agsym_t* force;
    int et = EDGE_TYPE(gp);

    if (!(GD_has_labels(gp) & NODE_XLABEL) &&
	!(GD_has_labels(gp) & EDGE_XLABEL) &&
	!(GD_has_labels(gp) & TAIL_LABEL) &&
	!(GD_has_labels(gp) & HEAD_LABEL) &&
	(!(GD_has_labels(gp) & EDGE_LABEL) || EdgeLabelsDone))
	return;

    for (np = agfstnode(gp); np; np = agnxtnode(gp, np)) {
	if (ND_xlabel(np)) {
	    if (ND_xlabel(np)->set)
		n_set_lbls++;
	    else
		n_nlbls++;
	}
	for (ep = agfstout(gp, np); ep; ep = agnxtout(gp, ep)) {
	    if (ED_xlabel(ep)) {
		if (ED_xlabel(ep)->set)
		    n_set_lbls++;
		else if (HAVE_EDGE(ep))
		    n_elbls++;
	    }
	    if (ED_head_label(ep)) {
		if (ED_head_label(ep)->set)
		    n_set_lbls++;
		else if (HAVE_EDGE(ep))
		    n_elbls++;
	    }
	    if (ED_tail_label(ep)) {
		if (ED_tail_label(ep)->set)
		    n_set_lbls++;
		else if (HAVE_EDGE(ep))
		    n_elbls++;
	    }
	    if (ED_label(ep)) {
		if (ED_label(ep)->set)
		    n_set_lbls++;
		else if (HAVE_EDGE(ep))
		    n_elbls++;
	    }
	}
    }
    if (GD_has_labels(gp) & GRAPH_LABEL)
	n_clbls = countClusterLabels (gp);

    /* A label for each unpositioned external label */
    n_lbls = n_nlbls + n_elbls;
    if (n_lbls == 0) return;

    /* An object for each node, each positioned external label, any cluster label, 
     * and all unset edge labels and xlabels.
     */
    n_objs = agnnodes(gp) + n_set_lbls + n_clbls + n_elbls;
    objp = objs = N_NEW(n_objs, object_t);
    xlp = lbls = N_NEW(n_lbls, xlabel_t);
    bb.LL = pointfof(INT_MAX, INT_MAX);
    bb.UR = pointfof(-INT_MAX, -INT_MAX);

    for (np = agfstnode(gp); np; np = agnxtnode(gp, np)) {

	bb = addNodeObj (np, objp, bb);
	if ((lp = ND_xlabel(np))) {
	    if (lp->set) {
		objp++;
		bb = addLabelObj (lp, objp, bb);
	    }
	    else {
		addXLabel (lp, objp, xlp, 0, ur); 
		xlp++;
	    }
	}
	objp++;
	for (ep = agfstout(gp, np); ep; ep = agnxtout(gp, ep)) {
	    if ((lp = ED_label(ep))) {
		if (lp->set) {
		    bb = addLabelObj (lp, objp, bb);
		}
		else if (HAVE_EDGE(ep)) {
		    addXLabel (lp, objp, xlp, 1, edgeMidpoint(gp, ep)); 
		    xlp++;
		}
		else {
		    agerr(AGWARN, "no position for edge with label %s",
			    ED_label(ep)->text);
		    continue;
		}
	        objp++;
	    }
	    if ((lp = ED_tail_label(ep))) {
		if (lp->set) {
		    bb = addLabelObj (lp, objp, bb);
		}
		else if (HAVE_EDGE(ep)) {
		    addXLabel (lp, objp, xlp, 1, edgeTailpoint(ep)); 
		    xlp++;
		}
		else {
		    agerr(AGWARN, "no position for edge with tail label %s",
			    ED_tail_label(ep)->text);
		    continue;
		}
		objp++;
	    }
	    if ((lp = ED_head_label(ep))) {
		if (lp->set) {
		    bb = addLabelObj (lp, objp, bb);
		}
		else if (HAVE_EDGE(ep)) {
		    addXLabel (lp, objp, xlp, 1, edgeHeadpoint(ep)); 
		    xlp++;
		}
		else {
		    agerr(AGWARN, "no position for edge with head label %s",
			    ED_head_label(ep)->text);
		    continue;
		}
		objp++;
	    }
	    if ((lp = ED_xlabel(ep))) {
		if (lp->set) {
		    bb = addLabelObj (lp, objp, bb);
		}
		else if (HAVE_EDGE(ep)) {
		    addXLabel (lp, objp, xlp, 1, edgeMidpoint(gp, ep)); 
		    xlp++;
		}
		else {
		    agerr(AGWARN, "no position for edge with xlabel %s",
			    ED_xlabel(ep)->text);
		    continue;
		}
		objp++;
	    }
	}
    }
    if (n_clbls) {
	cinfo_t info;
	info.bb = bb;
	info.objp = objp;
	info = addClusterObj (gp, info);
	bb = info.bb;
    }

    force = agfindgraphattr(gp, "forcelabels");

    params.force = late_bool(gp, force, TRUE);
    params.bb = bb;
    placeLabels(objs, n_objs, lbls, n_lbls, &params);
    if (Verbose)
	printData(objs, n_objs, lbls, n_lbls, &params);

    xlp = lbls;
    cnt = 0;
    for (i = 0; i < n_lbls; i++) {
	if (xlp->set) {
	    cnt++;
	    lp = (textlabel_t *) (xlp->lbl);
	    lp->set = 1;
	    lp->pos = centerPt(xlp);
	    updateBB (gp, lp);
	}
	xlp++;
    }
    if (Verbose)
	fprintf (stderr, "%d out of %d labels positioned.\n", cnt, n_lbls);
    else if (cnt != n_lbls)
	agerr(AGWARN, "%d out of %d exterior labels positioned.\n", cnt, n_lbls);
    free(objs);
    free(lbls);
}
void OBJCTXT<_DOF6>::update()
{
  filter();
  updateBB();
}