/* 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); } }
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; }
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(); }
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(); }
void UnitGroup::addUnit(Unit* unit) { if (unit != NULL) { mUnits.push_back(unit); updateBB(unit); } }
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, ¶ms); if (Verbose) printData(objs, n_objs, lbls, n_lbls, ¶ms); 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(); }