Graphviz 14.1.3~dev.20260207.0611
Loading...
Searching...
No Matches
csolve_VPSC.cpp
Go to the documentation of this file.
1
18#include "config.h"
19
20#include <iostream>
21#include <vpsc/variable.h>
22#include <vpsc/constraint.h>
24#include <vpsc/solve_VPSC.h>
25#include <cstdlib>
26#include <cassert>
27#include <vector>
28#include <vpsc/csolve_VPSC.h>
29Variable* newVariable(int id, double desiredPos, double weight) {
30 return new Variable(id,desiredPos,weight);
31}
33 return new Constraint(left,right,gap);
34}
35VPSC* newIncVPSC(int n, Variable* vs[], int m, Constraint* cs[]) {
36 return new IncVPSC(n,vs,m,cs);
37}
38
39int genXConstraints(int n, boxf *bb, Variable **vs, Constraint ***cs,
40 bool transitiveClosure) {
41 std::vector<Rectangle> rs;
42 for(int i=0;i<n;i++) {
43 rs.emplace_back(bb[i].LL.x,bb[i].UR.x,bb[i].LL.y,bb[i].UR.y);
44 }
45 const int m = generateXConstraints(rs, vs, *cs, transitiveClosure);
46 return m;
47}
48int genYConstraints(int n, boxf* bb, Variable** vs, Constraint*** cs) {
49 std::vector<Rectangle> rs;
50 for(int i=0;i<n;i++) {
51 rs.emplace_back(bb[i].LL.x,bb[i].UR.x,bb[i].LL.y,bb[i].UR.y);
52 }
53 const int m = generateYConstraints(rs, vs, *cs);
54 return m;
55}
56
58 return new Constraint*[m];
59}
60void deleteConstraints(int m, Constraint **cs) {
61 for(int i=0;i<m;i++) {
62 delete cs[i];
63 }
64 delete [] cs;
65}
67 delete c;
68}
70 delete v;
71}
72void satisfyVPSC(VPSC* vpsc) {
73 try {
74 vpsc->satisfy();
75 } catch(const char *e) {
76 std::cerr << e << "\n";
77 std::exit(1);
78 }
79}
80void deleteVPSC(VPSC *vpsc) {
81 assert(vpsc!=nullptr);
82 delete vpsc;
83}
84void solveVPSC(VPSC* vpsc) {
85 vpsc->solve();
86}
87void setVariableDesiredPos(Variable *v, double desiredPos) {
88 v->desiredPosition = desiredPos;
89}
90double getVariablePos(const Variable *v) {
91 return v->position();
92}
93void remapInConstraints(Variable *u, Variable *v, double dgap) {
94 for (Constraint *c : u->in) {
95 c->right=v;
96 c->gap+=dgap;
97 v->in.push_back(c);
98 }
99 u->in.clear();
100}
101void remapOutConstraints(Variable *u, Variable *v, double dgap) {
102 for (Constraint *c : u->out) {
103 c->left=v;
104 c->gap+=dgap;
105 v->out.push_back(c);
106 }
107 u->out.clear();
108}
#define right(i)
Definition closest.c:74
void setVariableDesiredPos(Variable *v, double desiredPos)
Variable * newVariable(int id, double desiredPos, double weight)
Bridge for C programs to access solve_VPSC (which is in C++)
Constraint ** newConstraints(int m)
void deleteConstraint(Constraint *c)
VPSC * newIncVPSC(int n, Variable *vs[], int m, Constraint *cs[])
void deleteVariable(Variable *v)
void deleteConstraints(int m, Constraint **cs)
Constraint * newConstraint(Variable *left, Variable *right, double gap)
void remapInConstraints(Variable *u, Variable *v, double dgap)
int genXConstraints(int n, boxf *bb, Variable **vs, Constraint ***cs, bool transitiveClosure)
void remapOutConstraints(Variable *u, Variable *v, double dgap)
double getVariablePos(const Variable *v)
void satisfyVPSC(VPSC *vpsc)
int genYConstraints(int n, boxf *bb, Variable **vs, Constraint ***cs)
void deleteVPSC(VPSC *vpsc)
void solveVPSC(VPSC *vpsc)
#define left
Definition dthdr.h:12
int generateYConstraints(const vector< Rectangle > &rs, Variable **vars, Constraint **&cs)
int generateXConstraints(const vector< Rectangle > &rs, Variable **vars, Constraint **&cs, const bool useNeighbourLists)
A constraint determines a minimum or exact spacing required between two variables.
Definition constraint.h:25
virtual void solve()
virtual void satisfy()
double desiredPosition
Definition variable.h:30
Constraints out
Definition variable.h:36
Constraints in
Definition variable.h:35
double position() const
Definition variable.h:46
Definition geom.h:41
pointf UR
Definition geom.h:41
pointf LL
Definition geom.h:41
double x
Definition geom.h:29
double y
Definition geom.h:29