Revision: 71799
          http://sourceforge.net/p/brlcad/code/71799
Author:   starseeker
Date:     2018-09-24 18:34:32 +0000 (Mon, 24 Sep 2018)
Log Message:
-----------
Wire the brep validity test into lint.

Modified Paths:
--------------
    brlcad/trunk/src/libged/lint.cpp

Modified: brlcad/trunk/src/libged/lint.cpp
===================================================================
--- brlcad/trunk/src/libged/lint.cpp    2018-09-24 18:07:54 UTC (rev 71798)
+++ brlcad/trunk/src/libged/lint.cpp    2018-09-24 18:34:32 UTC (rev 71799)
@@ -97,6 +97,7 @@
 
 struct _ged_invalid_data {
     struct ged *gedp;
+    struct _ged_lint_opts *o;
     std::set<struct directory *> invalid_dps;
     std::map<struct directory *, struct invalid_obj> invalid_msgs;
 };
@@ -313,9 +314,9 @@
            bu_free_external(&ext);
            break;
        default:
-           break;          
+           break;
     }
-} 
+}
 
 int
 _ged_missing_check(struct _ged_missing_data *mdata, struct ged *gedp, int 
argc, struct directory **dpa)
@@ -377,6 +378,7 @@
     struct invalid_obj obj;
     struct rt_db_internal intern;
     struct rt_bot_internal *bot;
+    struct bu_vls vlog = BU_VLS_INIT_ZERO;
     int not_valid = 0;
     if (!idata || !gedp || !dp) return;
 
@@ -383,13 +385,14 @@
     if (dp->d_flags & RT_DIR_HIDDEN) return;
     if (dp->d_addr == RT_DIR_PHONY_ADDR) return;
 
+    if (rt_db_get_internal(&intern, dp, gedp->ged_wdbp->dbip, (fastf_t *)NULL, 
&rt_uniresource) < 0) return;
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD) {
+       rt_db_free_internal(&intern);
+       return;
+    }
+
     switch (dp->d_minor_type) {
        case DB5_MINORTYPE_BRLCAD_BOT:
-           if (rt_db_get_internal(&intern, dp, gedp->ged_wdbp->dbip, (fastf_t 
*)NULL, &rt_uniresource) < 0) return;
-           if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD) {
-               rt_db_free_internal(&intern);
-               return;
-           }
            bot = (struct rt_bot_internal *)intern.idb_ptr;
            RT_BOT_CK_MAGIC(bot);
            if (bot->mode != RT_BOT_PLATE && bot->mode != RT_BOT_PLATE_NOCOS) {
@@ -402,6 +405,18 @@
            }
            rt_db_free_internal(&intern);
            break;
+       case DB5_MINORTYPE_BRLCAD_BREP:
+           not_valid = !rt_brep_valid(&intern, &vlog);
+           if (not_valid) {
+               obj.name = std::string(dp->d_namep);
+               obj.type= std::string("brep");
+               if (idata->o->verbosity) {
+                   obj.error = std::string(bu_vls_addr(&vlog));
+               } else {
+                   obj.error = std::string("failed OpenNURBS validity test");
+               }
+           }
+           break;
        case DB5_MINORTYPE_BRLCAD_ARB8:
            // TODO - check for twisted arbs.
            break;
@@ -420,6 +435,7 @@
        idata->invalid_msgs.insert(std::pair<struct directory *, struct 
invalid_obj>(dp, obj));
     }
 
+    bu_vls_free(&vlog);
 }
 
 int
@@ -515,6 +531,7 @@
 
     _ged_lint_opts_verify(opts);
 
+
     if (opts->cyclic_check) {
        bu_log("Checking for cyclic paths...\n");
        BU_GET(cdata, struct _ged_cyclic_data);
@@ -553,6 +570,7 @@
 
     if (opts->invalid_shape_check) {
        bu_log("Checking for invalid objects...\n");
+       idata->o = opts;
        ret = _ged_invalid_shape_check(idata, gedp, argc, dpa);
        if (ret != GED_OK) {
            goto ged_lint_memfree;

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



_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to