New option for convert-menu font->curve: "Curve (Single filling group)".

Since the text-object remake, it was not possible anymore to 'cut out'
text from, say, a box made by a polycurve, by converting text to curve
and then joining - only the first character would be cut out.

This is because of the filling groups (nu/dl->charidx)
I introduced for getting the vast speedup and the possibility
of overlapping characters.

The new convert menu option now assigns filling group 0 to all of
the nurbs generated.

Maybe filling groups should be exposed in the UI in general for curves -
there are various occasions where they are useful.

(Hint to the UI mafia! ;)
This commit is contained in:
Alexander Ewering
2006-04-04 09:14:07 +00:00
parent b6c3f3f352
commit 3be66f6d8d

View File

@@ -2245,6 +2245,7 @@ void convertmenu(void)
Base *base, *basen, *basact, *basedel=NULL;
Object *obact, *ob, *ob1;
Curve *cu;
Nurb *nu;
MetaBall *mb;
Mesh *me;
DispList *dl;
@@ -2260,7 +2261,7 @@ void convertmenu(void)
basact= BASACT; /* will be restored */
if(obact->type==OB_FONT) {
nr= pupmenu("Convert Font to%t|Curve");
nr= pupmenu("Convert Font to%t|Curve%x1|Curve (Single filling group)%x2");
if(nr>0) ok= 1;
}
else if(obact->type==OB_MBALL) {
@@ -2340,41 +2341,45 @@ void convertmenu(void)
}
}
else if(ob->type==OB_FONT) {
if(nr==1) {
ob->flag |= OB_DONE;
ob->type= OB_CURVE;
cu= ob->data;
if(cu->vfont) {
cu->vfont->id.us--;
cu->vfont= 0;
}
if(cu->vfontb) {
cu->vfontb->id.us--;
cu->vfontb= 0;
}
if(cu->vfonti) {
cu->vfonti->id.us--;
cu->vfonti= 0;
}
if(cu->vfontbi) {
cu->vfontbi->id.us--;
cu->vfontbi= 0;
}
/* other users */
if(cu->id.us>1) {
ob1= G.main->object.first;
while(ob1) {
if(ob1->data==cu) {
ob1->type= OB_CURVE;
ob1->recalc |= OB_RECALC;
}
ob1= ob1->id.next;
ob->flag |= OB_DONE;
ob->type= OB_CURVE;
cu= ob->data;
if(cu->vfont) {
cu->vfont->id.us--;
cu->vfont= 0;
}
if(cu->vfontb) {
cu->vfontb->id.us--;
cu->vfontb= 0;
}
if(cu->vfonti) {
cu->vfonti->id.us--;
cu->vfonti= 0;
}
if(cu->vfontbi) {
cu->vfontbi->id.us--;
cu->vfontbi= 0;
}
/* other users */
if(cu->id.us>1) {
ob1= G.main->object.first;
while(ob1) {
if(ob1->data==cu) {
ob1->type= OB_CURVE;
ob1->recalc |= OB_RECALC;
}
ob1= ob1->id.next;
}
}
if (nr==2) {
nu= cu->nurb.first;
while(nu) {
nu->charidx= 0;
nu= nu->next;
}
}
}
else if ELEM(ob->type, OB_CURVE, OB_SURF) {
if(nr==1) {