int main() { #if DEBUG freopen("E:\\nyist_008.in", "r" ,stdin); freopen("E:\\nyist_008.out", "w", stdout); #endif VR vec; Rect rt; int testCases, nNums; scanf("%d", &testCases); while (testCases--) { vec.clear(); scanf("%d", &nNums); for (int i = 0; i < nNums; ++i) { scanf("%d %d %d", &rt.number, &rt.length, &rt.width); if (rt.length < rt.width) swap(rt.length, rt.width); vec.push_back(rt); } sort(vec.begin(), vec.end(), compare_1); for (VR::size_type ix = 0; ix < vec.size(); ++ix) printf("%d %d %d\n", vec[ix].number, vec[ix].length, vec[ix].width); unique(vec.begin(), vec.end(), compare_2); /* for (VR::size_type ix = 0; ix < vec.size(); ++ix) printf("%d %d %d\n", vec[ix].number, vec[ix].length, vec[ix].width); */ }// End of while return 0; }
void route_edges2(Layouter &state,plugin& pg, double scale, int iter, double temp, int debug){ VR nodes; double d=state.avgsize/5; int n=state.nw.nodes.size(); for (int i=0;i<n;i++){ nodes.push_back(state.nw.nodes[i].rect()); nodes.back().extend(d); //debugrect(nodes.back(),0,0,255); } for (int i=0,m=state.nw.edges.size();i<m;i++){ //if (i!=iter) continue; Edge &e=state.nw.edges[i]; e.splinehandles.clear(); e.splinepoints.clear(); int n1=e.from; int n2=e.to; Point vec,p1,p2; double dir; switch(e.type){ case substrate: dir=lim(state.nw.nodes[n1].dir+PI/2); vec=Point(dir); swap(n1,n2); p1=state.nw.nodes[n1]; vec=state.nw.nodes[n2].rect().border_vec(vec); p2=state.nw.nodes[n2]+vec; break; case product: dir=lim(state.nw.nodes[n1].dir-PI/2); vec=Point(dir); vec=state.nw.nodes[n1].rect().border_vec(vec); p1=state.nw.nodes[n1]+vec; p2=state.nw.nodes[n2]; break; case activator: case inhibitor: case catalyst: swap(n1,n2); default: p1=state.nw.nodes[n1]; p2=state.nw.nodes[n2]; } vector<Segment> vs; vs.push_back(Segment(ParamEdge(p1,p2),true,true)); split_route(vs,nodes,0,n1,n2); Point vec1=state.nw.nodes[n1].rect().border_vec(vs.front().edge.to()-vs.front().edge.from()); Point vec2=state.nw.nodes[n2].rect().border_vec(vs.back().edge.from()-vs.back().edge.to()); switch(e.type){ case activator: case inhibitor: case catalyst: dir=lim(state.nw.nodes[n2].dir); if (scalar(Point(dir),vs.back().edge.from()-vs.back().edge.to())<0) dir=lim(dir+PI); vec=Point(dir); vec=state.nw.nodes[n2].rect().border_vec(vec); p2=state.nw.nodes[n2]+vec; case substrate: e.splinehandles.push_back(vec1+d); e.splinehandles.push_back(vec+d); break; case product: e.splinehandles.push_back(vec+d); e.splinehandles.push_back(vec2+d); break; default: e.splinehandles.push_back(vec1+d); e.splinehandles.push_back(vec2+d); } for (int j=1,s=vs.size();j<s;j++){ Point before=vs[j-1].edge.from(); Point cur=vs[j-1].edge.to(); //if (cur!=vs[j].edge.from()) throw "ups: edge segments not continious"; Point after=vs[j].edge.to(); Point dv=unit(before-cur)*d+unit(after-cur)*d; debugline(cur,cur+dv,0,255,0,true); e.splinehandles.insert(--e.splinehandles.end(),unit(to_left(dv,PI/2))*sign(scalar(to_left(dv,PI/2),before-cur))*d); e.splinepoints.push_back(cur+dv); } } }