115
115
int vergscdata(const void *a1, const void *a2);
116
116
int vergpoly(const void *a1, const void *a2);
117
117
void *new_mem_element(int size);
118
void addfillvlak(EditVert *v1, EditVert *v2, EditVert *v3);
118
void addfillface(EditVert *v1, EditVert *v2, EditVert *v3);
119
119
int boundinside(PolyFill *pf1, PolyFill *pf2);
120
120
int boundisect(PolyFill *pf2, PolyFill *pf1);
121
121
void mergepolysSimp(PolyFill *pf1, PolyFill *pf2) /* pf2 added to pf1 */;
138
138
ListBase fillvertbase = {0,0};
139
139
ListBase filledgebase = {0,0};
140
ListBase fillvlakbase = {0,0};
140
ListBase fillfacebase = {0,0};
228
228
fillvertbase.first= fillvertbase.last= 0;
229
229
filledgebase.first= filledgebase.last= 0;
230
fillvlakbase.first= fillvlakbase.last= 0;
230
fillfacebase.first= fillfacebase.last= 0;
233
233
/* **** FILL ROUTINES *************************** */
265
void addfillvlak(EditVert *v1, EditVert *v2, EditVert *v3)
265
void addfillface(EditVert *v1, EditVert *v2, EditVert *v3)
267
267
/* does not make edges */
270
evl= new_mem_element(sizeof(EditVlak));
271
BLI_addtail(&fillvlakbase, evl);
270
evl= new_mem_element(sizeof(EditFace));
271
BLI_addtail(&fillfacebase, evl);
461
461
sc= (ScFillVert *)bsearch(&scsearch,scdata,len,
462
462
sizeof(ScFillVert), vergscdata);
464
if(sc==0) printf("Error in search edge: %x\n",eed);
464
if(sc==0) printf("Error in search edge: %lx\n",eed);
465
465
else if(addedgetoscanvert(sc,eed)==0) return sc;
596
596
EditVert *eve,*v1,*v2,*v3;
597
597
EditEdge *eed,*nexted,*ed1,*ed2,*ed3;
598
598
float miny = 0.0;
599
int a,b,verts, maxvlak, totvlak; /* vlak = face in dutch! */
599
int a,b,verts, maxface, totface;
600
600
short nr, test, twoconnected=0;
695
695
if(pf->f==0) twoconnected= 1;
697
697
/* (temporal) security: never much more faces than vertices */
699
maxvlak= 2*verts; /* 2*verts: based at a filled circle within a triangle */
699
maxface= 2*verts; /* 2*verts: based at a filled circle within a triangle */
702
702
for(a=0;a<verts;a++) {
717
717
while(sc->first) { /* for as long there are edges */
721
if(callLocalInterruptCallBack()) break;
722
if(totvlak>maxvlak) {
721
/* commented out... the ESC here delivers corrupted memory (and doesnt work during grab) */
722
/* if(callLocalInterruptCallBack()) break; */
723
if(totface>maxface) {
723
724
/* printf("Fill error: endless loop. Escaped at vert %d, tot: %d.\n", a, verts); */
775
776
/* new triangle */
776
777
/* printf("add face %x %x %x\n",v1,v2,v3); */
777
addfillvlak(v1, v2, v3);
778
addfillface(v1, v2, v3);
779
780
BLI_remlink((ListBase *)&(sc->first),ed1);
780
781
BLI_addtail(&filledgebase,ed1);
1128
1129
addlisttolist(&fillvertbase,&tempve);
1129
1130
addlisttolist(&filledgebase,&temped);
1131
/* evl= fillvlakbase.first;
1133
printf("new face %x %x %x\n",evl->v1,evl->v2,evl->v3);
1140
1134
MEM_freeN(pflist);
1146
MOVED TO EDITMESH.C since it's really bad to leave it here
1148
void fill_mesh(void)
1150
EditMesh *em = G.editMesh;
1152
EditEdge *eed,*e1,*nexted;
1153
EditVlak *evl,*nextvl;
1156
if(G.obedit==0 || (G.obedit->type!=OB_MESH)) return;
1160
/ * alle selected vertices kopieeren * /
1161
eve= em->verts.first;
1164
v1= addfillvert(eve->co);
1171
/ * alle selected edges kopieeren * /
1172
eed= em->edges.first;
1174
if( (eed->v1->f & 1) && (eed->v2->f & 1) ) {
1175
e1= addfilledge(eed->v1->vn, eed->v2->vn);
1181
/ * van alle selected vlakken vertices en edges verwijderen om dubbels te voorkomen * /
1182
/ * alle edges tellen punten op, vlakken trekken af,
1183
edges met vertices ->h<2 verwijderen * /
1184
evl= em->faces.first;
1188
if( vlakselectedAND(evl, 1) ) {
1192
if(evl->v4) evl->v4->vn->h--;
1198
if(ok) { / * er zijn vlakken geselecteerd * /
1199
eed= filledgebase.first;
1202
if(eed->v1->h<2 || eed->v2->h<2) {
1203
remlink(&filledgebase,eed);
1209
/ * tijd=clock(); * /
1213
/ * printf("time: %d\n",(clock()-tijd)/1000); * /
1216
evl= fillvlakbase.first;
1218
addvlaklist(evl->v1->vn, evl->v2->vn, evl->v3->vn, 0, evl);
1222
/ * else printf("fill error\n"); * /
1229
allqueue(REDRAWVIEW3D, 0);
1232
MOVED TO editmesh.c !!!!! (you bastards!)