Revision: 52512
          http://brlcad.svn.sourceforge.net/brlcad/?rev=52512&view=rev
Author:   bob1961
Date:     2012-09-21 16:04:05 +0000 (Fri, 21 Sep 2012)
Log Message:
-----------
A hole flag is now expected to be included with each polygon contour.

Modified Paths:
--------------
    brlcad/trunk/src/libtclcad/tclcad_obj.c

Modified: brlcad/trunk/src/libtclcad/tclcad_obj.c
===================================================================
--- brlcad/trunk/src/libtclcad/tclcad_obj.c     2012-09-20 22:33:23 UTC (rev 
52511)
+++ brlcad/trunk/src/libtclcad/tclcad_obj.c     2012-09-21 16:04:05 UTC (rev 
52512)
@@ -3327,6 +3327,7 @@
        int ac;
        size_t point_ac;
        const char **point_av;
+       int hole;
 
        /* Split contour j into points */
        if (Tcl_SplitList(current_top->to_interp, contour_av[j], &ac, 
&point_av) != TCL_OK) {
@@ -3335,16 +3336,25 @@
        }
        point_ac = ac;
 
-       if (mode != TCLCAD_POLY_CONTOUR_MODE && point_ac < 3) {
+       /* point_ac includes a hole flag */
+       if (mode != TCLCAD_POLY_CONTOUR_MODE && point_ac < 4) {
            bu_vls_printf(gedp->ged_result_str, "There must be atleast 3 points 
per contour");
            Tcl_Free((char *)point_av);
            return GED_ERROR;
        }
 
-       gpp->gp_contour[j].gpc_num_points = point_ac;
+       gpp->gp_contour[j].gpc_num_points = point_ac - 1;
        gpp->gp_contour[j].gpc_point = (point_t *)bu_calloc(point_ac, 
sizeof(point_t), "gpc_point");
 
-       for (k = 0; k < point_ac; ++k) {
+       if (bu_sscanf(point_av[0], "%d", &hole) != 1) {
+           bu_vls_printf(gedp->ged_result_str, "contour %zu, point %zu: bad 
hole flag - %s\n",
+                         j, k, point_av[k]);
+           Tcl_Free((char *)point_av);
+           return GED_ERROR;
+       }
+       gpp->gp_hole[j] = hole;
+
+       for (k = 1; k < point_ac; ++k) {
            point_t pt;
 
            if (bu_sscanf(point_av[k], "%lf %lf %lf", &pt[X], &pt[Y], &pt[Z]) 
!= 3) {
@@ -3355,9 +3365,9 @@
            }
 
            if (vflag) {
-               MAT4X3PNT(gpp->gp_contour[j].gpc_point[k], 
gdvp->gdv_view->gv_view2model, pt);
+               MAT4X3PNT(gpp->gp_contour[j].gpc_point[k-1], 
gdvp->gdv_view->gv_view2model, pt);
            } else {
-               VMOVE(gpp->gp_contour[j].gpc_point[k], pt);
+               VMOVE(gpp->gp_contour[j].gpc_point[k-1], pt);
            }
 
        }
@@ -3988,7 +3998,7 @@
                bu_vls_printf(gedp->ged_result_str, " {");
 
                for (j = 0; j < 
gdpsp->gdps_polygons.gp_polygon[i].gp_num_contours; ++j) {
-                   bu_vls_printf(gedp->ged_result_str, " {");
+                   bu_vls_printf(gedp->ged_result_str, " {%d ", 
gdpsp->gdps_polygons.gp_polygon[i].gp_hole[j]);
 
                    for (k = 0; k < 
gdpsp->gdps_polygons.gp_polygon[i].gp_contour[j].gpc_num_points; ++k) {
                        point_t pt;
@@ -4067,7 +4077,7 @@
        }
        contour_ac = ac;
 
-       if (to_extract_contours_av(gedp, gdvp, &gp, contour_ac, 
contour_av,gdvp->gdv_view->gv_mode, 0) != GED_OK) {
+       if (to_extract_contours_av(gedp, gdvp, &gp, contour_ac, contour_av, 
gdvp->gdv_view->gv_mode, 0) != GED_OK) {
            Tcl_Free((char *)contour_av);
            return GED_ERROR;
        }
@@ -7635,7 +7645,7 @@
     fx = x * inv_width * 2.0 - 1.0;
     fy = (y * inv_height * -2.0 + 1.0) * inv_aspect;
 
-    bu_vls_printf(&plist, "{ ");
+    bu_vls_printf(&plist, "{0 ");
 
     {
        vect_t vdiff;
@@ -7857,7 +7867,7 @@
     fx = x * inv_width * 2.0 - 1.0;
     fy = (y * inv_height * -2.0 + 1.0) * inv_aspect;
 
-    bu_vls_printf(&plist, "{ ");
+    bu_vls_printf(&plist, "{0 ");
 
     {
        fastf_t a, b, arc;
@@ -8010,7 +8020,7 @@
     }
 
     MAT4X3PNT(m_pt, gdvp->gdv_view->gv_view2model, gdpsp->gdps_prev_point);
-    bu_vls_printf(&plist, "{ {%lf %lf %lf} ",  V3ARGS(m_pt));
+    bu_vls_printf(&plist, "{0 {%lf %lf %lf} ",  V3ARGS(m_pt));
 
     VSET(v_pt, gdpsp->gdps_prev_point[X], fy, 1.0);
     MAT4X3PNT(m_pt, gdvp->gdv_view->gv_view2model, v_pt);

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


------------------------------------------------------------------------------
Got visibility?
Most devs has no idea what their production app looks like.
Find out how fast your code is with AppDynamics Lite.
http://ad.doubleclick.net/clk;262219671;13503038;y?
http://info.appdynamics.com/FreeJavaPerformanceDownload.html
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to