Page Menu
Home
Search
Configure Global Search
Log In
Files
F4466
curve_select_03.patch
Public
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Authored By
Joshua Leung (aligorith)
Nov 13 2013, 1:16 PM
Size
11 KB
Subscribers
None
curve_select_03.patch
View Options
Index: blender/include/BDR_editcurve.h
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/include/BDR_editcurve.h,v
retrieving revision 1.13
diff -u -r1.13 BDR_editcurve.h
--- blender/include/BDR_editcurve.h 3 Jan 2006 02:35:44 -0000 1.13
+++ blender/include/BDR_editcurve.h 11 Sep 2006 07:22:43 -0000
@@ -78,6 +78,9 @@
void makecyclicNurb(void);
void selectconnected_nurb(void);
void selectrow_nurb(void);
+void selectends_nurb(int selFirst);
+void select_more_nurb(void);
+void select_less_nurb(void);
void adduplicate_nurb(void);
void delNurb(void);
void nurb_set_smooth(short event);
Index: blender/src/editcurve.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/editcurve.c,v
retrieving revision 1.50
diff -u -r1.50 editcurve.c
--- blender/src/editcurve.c 13 Aug 2006 07:37:51 -0000 1.50
+++ blender/src/editcurve.c 24 Sep 2006 07:48:41 -0000
@@ -2976,6 +2976,263 @@
}
+void selectends_nurb(int selFirst)
+{
+ Nurb *nu;
+ BPoint *bp;
+ BezTriple *bezt;
+ int a;
+
+ if(G.obedit==0) return;
+
+ nu= editNurb.first;
+ while (nu) {
+ if((nu->type & 7)==CU_BEZIER) {
+ a= nu->pntsu;
+
+ /* which point? */
+ if (selFirst==0) /* select last */
+ bezt= (nu->bezt + (a-1));
+ else /* select first */
+ bezt= nu->bezt;
+
+ if (bezt->hide == 0) {
+ /* check if anything is selected */
+ if (bezt->f1 & 1 || bezt->f2 & 1 || bezt->f3 & 1) {
+ /* deselct all handles */
+ bezt->f1 &= ~1;
+ bezt->f2 &= ~1;
+ bezt->f3 &= ~1;
+ }
+ else {
+ /* just select all handles */
+ bezt->f1 |= 1;
+ bezt->f2 |= 1;
+ bezt->f3 |= 1;
+ }
+ }
+ }
+ else {
+ /* ummm... doesn't really make sense, but... */
+ a= nu->pntsu*nu->pntsv;
+
+ /* which point? */
+ if (selFirst==0) /* select last */
+ bp= (nu->bp + (a-1));
+ else /* select first */
+ bp= nu->bp;
+
+ if (bp->hide == 0) {
+ if (bp->f1 & 1) /* deselect */
+ bp->f1 &= ~1;
+ else /* select */
+ bp->f1 |= 1;
+ }
+ }
+
+ nu= nu->next;
+ }
+
+ countall();
+ allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Select/Deselect End");
+}
+
+void select_more_nurb()
+{
+ Nurb *nu;
+ BezTriple *bezt;
+ BPoint *bp;
+ int *selectFlags; /* array of ints defining */
+ int totCount=0, totSel=0, totChange=0, totU=0, totV=0;
+ int i=0, n=0, x=0;
+
+ if(G.obedit==0) return;
+
+ nu= editNurb.first;
+ while (nu) {
+ /* check what type of curve/nurb it is */
+ if((nu->type & 7)==CU_BEZIER) {
+ totCount= nu->pntsu;
+ selectFlags= MEM_callocN(sizeof(int)*totCount, "selectlist");
+
+ /* find out which beztriples are selected */
+ for (i=0; i<totCount; i++) {
+ bezt= (nu->bezt + i);
+ selectFlags[i]= BEZSELECTED(bezt);
+ if (selectFlags[i]) totSel++;
+ }
+
+ /* check if anything is selected at all */
+ if (totSel==0) continue;
+
+ /* find out which ones deserve an extra flag */
+ for (i=0; i<totCount; i++) {
+ if (selectFlags[i] == 1) {
+ if ((totCount > (i+1)) && (selectFlags[i+1] == 0)) {
+ selectFlags[i+1] = 2;
+ totChange++;
+ }
+ }
+ else {
+ if ((totCount > (i+1)) && (selectFlags[i+1] == 1)) {
+ selectFlags[i] = 2;
+ totChange++;
+ }
+ }
+ }
+
+ /* set select flags based on select flag */
+ for (i=0; i<totCount; i++) {
+ if (selectFlags[i] == 2) {
+ bezt = (nu->bezt + i);
+
+ if (bezt->hide == 0) {
+ bezt->f1 |= 1;
+ bezt->f2 |= 1;
+ bezt->f3 |= 1;
+ }
+ }
+ }
+
+ /* free tempolary array */
+ MEM_freeN(selectFlags);
+ }
+ else {
+ totCount= nu->pntsu*nu->pntsv;
+ totU= nu->pntsu;
+ totV= nu->pntsv;
+ selectFlags= MEM_callocN(sizeof(int)*totCount, "selectlist");
+
+ /* find out which bpoints are selected */
+ for (i=0; i<totCount; i++) {
+ bp = (nu->bp + i);
+ selectFlags[i]= (bp->f1 & 1);
+ if (selectFlags[i]) totSel++;
+ }
+
+ /* check if anything selected */
+ if (totSel==0) continue;
+
+ /* find out which ones deserve an extra flag */
+ /* FIXME: why the heck does this go wrong? */
+ for (i=0; i<totV; i++) {
+ /* search column */
+ for (n=0; n<totU; n++) {
+ x = ((i * totU) + n);
+
+ if (selectFlags[i] == 1) {
+ if ((totU > (n+1)) && (selectFlags[x+1] == 0))
+ selectFlags[x+1] = 2;
+ }
+ else {
+ if ((totU > (n+1)) && (selectFlags[x+1] == 1))
+ selectFlags[i] = 2;
+ }
+ }
+
+ /* search row */
+ /*
+ if (selectFlags[(i*totU)] == 1) {
+ if ((totV > (i+1)) && (selectFlags[((i+1)*totU)] == 0))
+ selectFlags[((i+1)*totU)] = 2;
+ }
+ else {
+ if ((totV > (i+1)) && (selectFlags[((i+1)*totU)] == 1))
+ selectFlags[(i*totU)] = 2;
+ } */
+ }
+
+ /* set select flags based on select flag */
+ for (i=0; i<totCount; i++) {
+ if (selectFlags[i] == 2) {
+ bp = (nu->bp + i);
+ if (bp->hide == 0) bp->f1 |= 1;
+ }
+ }
+
+ /* free tempolary array */
+ MEM_freeN(selectFlags);
+ }
+
+ nu= nu->next;
+ }
+
+ countall();
+ allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Select More");
+}
+
+void select_less_nurb()
+{
+ Nurb *nu;
+ BPoint *bp;
+ BezTriple *bezt;
+ int *selectFlags; /* array of ints*/
+ int totCount=0, totSel=0, totChange=0, i;
+
+ if(G.obedit==0) return;
+
+ nu= editNurb.first;
+ while (nu) {
+ /* check what type of curve/nurb it is */
+ if((nu->type & 7)==CU_BEZIER) {
+ totCount= nu->pntsu;
+ totSel= 0;
+ selectFlags= MEM_callocN(sizeof(int)*totCount, "selectlist");
+
+ /* find out which beztriples are selected */
+ for (i=0; i<totCount; i++) {
+ bezt= (nu->bezt + i);
+ selectFlags[i]= BEZSELECTED(bezt);
+ if (selectFlags[i]) totSel++;
+ }
+
+ /* check if enough to select-less of */
+ if (totSel<=1) continue;
+
+ /* find out which ones deserve an extra flag */
+ for (i=0; i<totCount; i++) {
+ if (selectFlags[i] == 1) {
+ if ((i < (totCount-1)) && (selectFlags[i+1] == 0)) {
+ selectFlags[i] = 2;
+ totChange++;
+ }
+ else if ((i > 0) && (selectFlags[i-1] == 0)) {
+ selectFlags[i] = 2;
+ totChange++;
+ }
+ }
+ }
+
+ /* set select flags based on select flag */
+ for (i=0; i<totCount; i++) {
+ if (selectFlags[i] == 2) {
+ bezt = (nu->bezt + i);
+
+ if (bezt->hide == 0) {
+ bezt->f1 &= ~1;
+ bezt->f2 &= ~1;
+ bezt->f3 &= ~1;
+ }
+ }
+ }
+
+ /* free tempolary array */
+ MEM_freeN(selectFlags);
+ }
+ else {
+ /* TODO: figure out method of nurbs surfaces */
+ }
+
+ nu= nu->next;
+ }
+
+ countall();
+ allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Select Less");
+}
+
void adduplicate_nurb()
{
Index: blender/src/header_view3d.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/header_view3d.c,v
retrieving revision 1.182
diff -u -r1.182 header_view3d.c
--- blender/src/header_view3d.c 27 Aug 2006 13:29:00 -0000 1.182
+++ blender/src/header_view3d.c 11 Sep 2006 08:54:56 -0000
@@ -866,7 +866,7 @@
case 8: /* select less */
select_less();
break;
- case 9: /* select less */
+ case 9: /* select non-manifold */
select_non_manifold();
break;
case 11: /* select triangles */
@@ -878,10 +878,10 @@
case 13: /* select non-triangles/quads */
select_faces_by_numverts(5);
break;
- case 14: /* select less */
+ case 14: /* select sharp edges */
select_sharp_edges();
break;
- case 15: /* select less */
+ case 15: /* select linked flat faces */
select_linked_flat_faces();
break;
@@ -1011,6 +1011,18 @@
case 5: /* select row (nurb) */
selectrow_nurb();
break;
+ case 7: /* select/deselect first */
+ selectends_nurb(1);
+ break;
+ case 8: /* select/deselect last */
+ selectends_nurb(0);
+ break;
+ case 9: /* select more */
+ select_more_nurb();
+ break;
+ case 10: /* select less */
+ select_less_nurb();
+ break;
}
allqueue(REDRAWVIEW3D, 0);
}
@@ -1036,6 +1048,17 @@
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Control Point Row|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
}
+ else {
+ uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect First", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect Last", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
+ }
+
+ uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
+
/* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */
/*uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connected Control Points|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");*/
Index: blender/src/space.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/space.c,v
retrieving revision 1.376
diff -u -r1.376 space.c
--- blender/src/space.c 4 Sep 2006 12:48:25 -0000 1.376
+++ blender/src/space.c 11 Sep 2006 11:18:26 -0000
@@ -2018,6 +2018,14 @@
if ( (G.qual==LR_CTRLKEY)
&& (G.obedit) && (G.obedit->type==OB_MESH) )
select_less();
+ else if ( (G.qual==LR_CTRLKEY)
+ && (G.obedit) && (G.obedit->type==OB_CURVE) )
+ select_less_nurb();
+ /*
+ else if ( (G.qual==LR_CTRLKEY)
+ && (G.obedit) && (G.obedit->type==OB_SURF) )
+ select_less_nurb();
+ */
else {
persptoetsen(event);
doredraw= 1;
@@ -2028,6 +2036,14 @@
if ( (G.qual==LR_CTRLKEY)
&& (G.obedit) && (G.obedit->type==OB_MESH) )
select_more();
+ else if ( (G.qual==LR_CTRLKEY)
+ && (G.obedit) && (G.obedit->type==OB_CURVE) )
+ select_more_nurb();
+ /*
+ else if ( (G.qual==LR_CTRLKEY)
+ && (G.obedit) && (G.obedit->type==OB_SURF) )
+ select_more_nurb();
+ */
else {
persptoetsen(event);
doredraw= 1;
Index: blender/src/toolbox.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/toolbox.c,v
retrieving revision 1.138
diff -u -r1.138 toolbox.c
--- blender/src/toolbox.c 12 Jul 2006 14:51:30 -0000 1.138
+++ blender/src/toolbox.c 11 Sep 2006 08:58:30 -0000
@@ -903,6 +903,12 @@
{ 0, "(De)select All|A", 2, NULL},
{ 0, "Inverse", 3, NULL},
{ 0, "Row|Shift R", 5, NULL},
+{ 0, "SEPR", 0, NULL},
+{ 0, "(De)select First", 7, NULL},
+{ 0, "(De)select Last", 8, NULL},
+{ 0, "SEPR", 0, NULL},
+{ 0, "More|Ctrl NumPad +", 9, NULL},
+{ 0, "Less|Ctrl NumPad -", 10, NULL},
{ -1, "", 0, do_view3d_select_curvemenu}};
static TBitem tb__select[]= {
File Metadata
Details
Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
b3/6c/4719baafccdf47bd00c2352fafea
Event Timeline
Log In to Comment