Revision: 76689
          http://sourceforge.net/p/brlcad/code/76689
Author:   starseeker
Date:     2020-08-07 20:03:58 +0000 (Fri, 07 Aug 2020)
Log Message:
-----------
Start working on function implementations

Modified Paths:
--------------
    brlcad/branches/bioh/include/bg/vlist.h
    brlcad/branches/bioh/src/libbg/vlist.cpp

Modified: brlcad/branches/bioh/include/bg/vlist.h
===================================================================
--- brlcad/branches/bioh/include/bg/vlist.h     2020-08-07 19:09:00 UTC (rev 
76688)
+++ brlcad/branches/bioh/include/bg/vlist.h     2020-08-07 20:03:58 UTC (rev 
76689)
@@ -119,23 +119,32 @@
  * size is set via command, it applies to the points/segments defined after 
that
  * command is introduced. */
 
-BG_EXPORT extern long
+BG_EXPORT extern size_t 
 bg_vlist_npts(struct bg_vlist *v);
 
-BG_EXPORT extern long
+BG_EXPORT extern size_t
 bg_vlist_ncmds(struct bg_vlist *v);
 
 BG_EXPORT extern long
-bg_vlist_add(struct bg_vlist *v, long i, bg_vlist_cmd_t cmd, point_t *p);
+bg_vlist_append(struct bg_vlist *v, bg_vlist_cmd_t cmd, point_t *p);
 
+BG_EXPORT extern long
+bg_vlist_insert(struct bg_vlist *v, size_t i, bg_vlist_cmd_t cmd, point_t *p);
+
 BG_EXPORT extern bg_vlist_cmd_t
-bg_vlist_get(point_t *op, struct bg_vlist *v, long i, point_t *p, 
bg_vlist_cmd_t cmd);
+bg_vlist_get(point_t *op, struct bg_vlist *v, size_t i);
 
+BG_EXPORT extern int
+bg_vlist_set(struct bg_vlist *v, size_t i, point_t *op, bg_vlist_cmd_t cmd);
+
+BG_EXPORT extern size_t
+bg_vlist_find(struct bg_vlist *v, size_t start_ind, bg_vlist_cmd_t cmd, 
point_t *p);
+
 BG_EXPORT extern long
-bg_vlist_rm(struct bg_vlist *v, bg_vlist_cmd_t cmd, point_t *p, long i);
+bg_vlist_rm(struct bg_vlist *v, size_t i);
 
 BG_EXPORT extern long
-bg_vlist_get_pnt_size(struct bg_vlist *v, size_t i, point_t *p);
+bg_vlist_get_pnt_size(struct bg_vlist *v, size_t i);
 
 /* Analytic functions */
 

Modified: brlcad/branches/bioh/src/libbg/vlist.cpp
===================================================================
--- brlcad/branches/bioh/src/libbg/vlist.cpp    2020-08-07 19:09:00 UTC (rev 
76688)
+++ brlcad/branches/bioh/src/libbg/vlist.cpp    2020-08-07 20:03:58 UTC (rev 
76689)
@@ -92,25 +92,86 @@
 
 
 
-#if 0
 size_t
 bg_vlist_npnts(struct bg_vlist *v)
 {
-    size_t num_commands;
-    struct bn_vlist *vp;
+    size_t cnt = 0;
 
-    if (UNLIKELY(vlist == NULL)) {
-       return 0;
+    for (size_t i = 0; i < v->i->v.size(); i++) {
+       bg_vlist_cmd_t cmd = bg_vlist_get(NULL, v, i);
+       switch (cmd) {
+           case BG_VLIST_POINT_DRAW:
+           case BG_VLIST_TRI_MOVE:
+           case BG_VLIST_TRI_DRAW:
+           case BG_VLIST_POLY_MOVE:
+           case BG_VLIST_POLY_DRAW:
+               cnt++;
+               break;
+           default:
+               // Note:  not counting normal data as points
+               continue;
+       }
     }
 
-    num_commands = 0;
-    for (BU_LIST_FOR(vp, bn_vlist, &(vlist->l))) {
-       num_commands += vp->nused;
+    return cnt;
+}
+
+size_t
+bg_vlist_ncmds(struct bg_vlist *v)
+{
+    size_t cnt = 0;
+
+    for (size_t i = 0; i < v->i->v.size(); i++) {
+       bg_vlist_cmd_t cmd = bg_vlist_get(NULL, v, i);
+       if (cmd == BG_VLIST_NULL) {
+           continue;
+       }
+       cnt++;
     }
 
-    return num_commands;
+    return cnt;
 }
 
+bg_vlist_cmd_t
+bg_vlist_get(point_t *op, struct bg_vlist *v, size_t i)
+{
+    if (i > v->i->v.size() - 1) {
+       return BG_VLIST_NULL;
+    }
+
+    // Actual node info is either in the queue or the local vector
+    vobj &cv = (v->i->q) ? v->i->q->i->objs[v->i->v[i]] : 
v->i->vlocal[v->i->v[i]];
+    if (op) {
+       VMOVE(*op, cv.p);
+    }
+    return cv.cmd;
+}
+
+size_t
+bg_vlist_find(struct bg_vlist *v, size_t start_ind, bg_vlist_cmd_t cmd, 
point_t *p)
+{
+    for (size_t i = 0; i < v->i->v.size(); i++) {
+       if (i < start_ind) {
+           continue;
+       }
+       // Actual node info is either in the queue or the local vector
+       vobj &cv = (v->i->q) ? v->i->q->i->objs[v->i->v[i]] : 
v->i->vlocal[v->i->v[i]];
+       if (cmd != BG_VLIST_NULL && cv.cmd != cmd) {
+           // If we have a non-NULL command, filter on it
+           continue;
+       }
+       if (p && DIST_PNT_PNT_SQ(*p, cv.p) > VUNITIZE_TOL) {
+           // If we have a non-NULL point, distance filter using it
+           continue;
+       }
+
+       // If we pass all the filters, we have a match
+       return i;
+    }
+    return BG_VLIST_NULL;
+}
+
+#if 0
 static int
 bn_vlist_bbox_internal(struct bn_vlist *vp, point_t *bmin, point_t *bmax, int 
*disp_mode)
 {

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to