[brlcad-commits] SF.net SVN: brlcad:[69168] brlcad/branches/brep-debug
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <n_...@us...> - 2016-10-27 23:46:06
|
Revision: 69168 http://sourceforge.net/p/brlcad/code/69168 Author: n_reed Date: 2016-10-27 23:45:58 +0000 (Thu, 27 Oct 2016) Log Message: ----------- sync r69050 through r69153 changes from trunk Revision Links: -------------- http://sourceforge.net/p/brlcad/code/69050 http://sourceforge.net/p/brlcad/code/69153 Modified Paths: -------------- brlcad/branches/brep-debug/CMakeLists.txt brlcad/branches/brep-debug/NEWS brlcad/branches/brep-debug/db/CMakeLists.txt brlcad/branches/brep-debug/include/bu/defines.h brlcad/branches/brep-debug/include/bu/exit.h brlcad/branches/brep-debug/include/nmg.h brlcad/branches/brep-debug/include/rt/CMakeLists.txt brlcad/branches/brep-debug/include/rt/nmg.h brlcad/branches/brep-debug/misc/CMake/BRLCAD_Targets.cmake brlcad/branches/brep-debug/misc/CMake/CompilerFlags.cmake brlcad/branches/brep-debug/misc/CMake/distclean.cmake.in brlcad/branches/brep-debug/regress/repository.sh brlcad/branches/brep-debug/src/CMakeLists.txt brlcad/branches/brep-debug/src/conv/CMakeLists.txt brlcad/branches/brep-debug/src/conv/asc/CMakeLists.txt brlcad/branches/brep-debug/src/conv/dxf/dxf-g.c brlcad/branches/brep-debug/src/conv/g-shell-rect.c brlcad/branches/brep-debug/src/conv/gcv/CMakeLists.txt brlcad/branches/brep-debug/src/conv/iges/CMakeLists.txt brlcad/branches/brep-debug/src/conv/iges/iges_struct.h brlcad/branches/brep-debug/src/conv/iges/spline.c brlcad/branches/brep-debug/src/conv/iges/trimsurf.c brlcad/branches/brep-debug/src/conv/jack/g-jack.c brlcad/branches/brep-debug/src/conv/off/g-off.c brlcad/branches/brep-debug/src/conv/ply/CMakeLists.txt brlcad/branches/brep-debug/src/conv/raw/CMakeLists.txt brlcad/branches/brep-debug/src/conv/step/step-g/OpenNurbsInterfaces.cpp brlcad/branches/brep-debug/src/libanalyze/CMakeLists.txt brlcad/branches/brep-debug/src/libanalyze/MeshHealing/DCEL.h brlcad/branches/brep-debug/src/libanalyze/MeshHealing/Geometry.cpp brlcad/branches/brep-debug/src/libanalyze/MeshHealing/Geometry.h brlcad/branches/brep-debug/src/libanalyze/MeshHealing/MeshConversion.cpp brlcad/branches/brep-debug/src/libanalyze/MeshHealing/MeshConversion.h brlcad/branches/brep-debug/src/libanalyze/MeshHealing/MeshConversion_brlcad.cpp brlcad/branches/brep-debug/src/libanalyze/MeshHealing/MeshConversion_brlcad.h brlcad/branches/brep-debug/src/libanalyze/MeshHealing/Stitch.cpp brlcad/branches/brep-debug/src/libanalyze/MeshHealing/Stitch.h brlcad/branches/brep-debug/src/libanalyze/MeshHealing/Zipper.cpp brlcad/branches/brep-debug/src/libanalyze/MeshHealing/Zipper.h brlcad/branches/brep-debug/src/libbg/tests/CMakeLists.txt brlcad/branches/brep-debug/src/libbn/tests/CMakeLists.txt brlcad/branches/brep-debug/src/libbn/tests/bntester.c brlcad/branches/brep-debug/src/libbrep/boolean.cpp brlcad/branches/brep-debug/src/libbu/temp.c brlcad/branches/brep-debug/src/libbu/tests/CMakeLists.txt brlcad/branches/brep-debug/src/libbu/tests/tests_bitv.cmake brlcad/branches/brep-debug/src/libbu/tests/tests_vls.cmake brlcad/branches/brep-debug/src/libbu/vls.c brlcad/branches/brep-debug/src/libbu/vls_vprintf.c brlcad/branches/brep-debug/src/libdm/dm_obj.c brlcad/branches/brep-debug/src/libdm/labels.c brlcad/branches/brep-debug/src/libgcv/CMakeLists.txt brlcad/branches/brep-debug/src/libged/CMakeLists.txt brlcad/branches/brep-debug/src/libged/draw.c brlcad/branches/brep-debug/src/libged/edbot.c brlcad/branches/brep-debug/src/libged/edpipe.c brlcad/branches/brep-debug/src/libged/ged_private.h brlcad/branches/brep-debug/src/libged/get_solid_kp.c brlcad/branches/brep-debug/src/libged/loadview.c brlcad/branches/brep-debug/src/libicv/tests/CMakeLists.txt brlcad/branches/brep-debug/src/librt/CMakeLists.txt brlcad/branches/brep-debug/src/librt/binunif/db5_bin.c brlcad/branches/brep-debug/src/librt/cache.c brlcad/branches/brep-debug/src/librt/db_diff.c brlcad/branches/brep-debug/src/librt/globals.c brlcad/branches/brep-debug/src/librt/librt_private.h brlcad/branches/brep-debug/src/librt/prep.c brlcad/branches/brep-debug/src/librt/primitives/arb8/arb8.c brlcad/branches/brep-debug/src/librt/primitives/ars/ars.c brlcad/branches/brep-debug/src/librt/primitives/bot/bot.c brlcad/branches/brep-debug/src/librt/primitives/bot/btg.c brlcad/branches/brep-debug/src/librt/primitives/bot/g_bot_include.c brlcad/branches/brep-debug/src/librt/primitives/bspline/bspline.cpp brlcad/branches/brep-debug/src/librt/primitives/bspline/bspline_mirror.c brlcad/branches/brep-debug/src/librt/primitives/ell/ell.c brlcad/branches/brep-debug/src/librt/primitives/extrude/extrude.c brlcad/branches/brep-debug/src/librt/primitives/metaball/metaball.c brlcad/branches/brep-debug/src/librt/primitives/metaball/metaball_tri.c brlcad/branches/brep-debug/src/librt/primitives/mirror.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_mirror.c brlcad/branches/brep-debug/src/librt/primitives/sketch/sketch.c brlcad/branches/brep-debug/src/librt/primitives/tgc/tgc.c brlcad/branches/brep-debug/src/librt/tests/CMakeLists.txt brlcad/branches/brep-debug/src/librt/tree.c brlcad/branches/brep-debug/src/libtclcad/CMakeLists.txt brlcad/branches/brep-debug/src/libwdb/CMakeLists.txt brlcad/branches/brep-debug/src/libwdb/nurb.c brlcad/branches/brep-debug/src/mged/CMakeLists.txt brlcad/branches/brep-debug/src/mged/chgmodel.c brlcad/branches/brep-debug/src/mged/edars.c brlcad/branches/brep-debug/src/mged/edpipe.c brlcad/branches/brep-debug/src/mged/edsol.c brlcad/branches/brep-debug/src/mged/tedit.c brlcad/branches/brep-debug/src/proc-db/CMakeLists.txt brlcad/branches/brep-debug/src/proc-db/spltest.c brlcad/branches/brep-debug/src/proc-db/tea.c brlcad/branches/brep-debug/src/proc-db/tea_nmg.c brlcad/branches/brep-debug/src/proc-db/tube.c brlcad/branches/brep-debug/src/proc-db/wavy.c brlcad/branches/brep-debug/src/rt/CMakeLists.txt brlcad/branches/brep-debug/src/tab/CMakeLists.txt brlcad/branches/brep-debug/src/tclscripts/archer/ArcherCore.tcl brlcad/branches/brep-debug/src/tclscripts/archer/ShaderEdit.tcl brlcad/branches/brep-debug/src/tclscripts/lib/gui_conversion.tcl brlcad/branches/brep-debug/src/tclscripts/mged/shaders.tcl brlcad/branches/brep-debug/src/util/CMakeLists.txt Added Paths: ----------- brlcad/branches/brep-debug/db/aet.rt brlcad/branches/brep-debug/src/libbn/tests/complex.c brlcad/branches/brep-debug/src/libbn/tests/list.c brlcad/branches/brep-debug/src/libbn/tests/mat.c brlcad/branches/brep-debug/src/libbn/tests/plane_dist.c brlcad/branches/brep-debug/src/libbn/tests/plane_isect.c brlcad/branches/brep-debug/src/libbn/tests/plane_pt.c brlcad/branches/brep-debug/src/libbn/tests/poly_add.c brlcad/branches/brep-debug/src/libbn/tests/poly_cubic_roots.c brlcad/branches/brep-debug/src/libbn/tests/poly_multiply.c brlcad/branches/brep-debug/src/libbn/tests/poly_quartic_roots.c brlcad/branches/brep-debug/src/libbn/tests/poly_scale.c brlcad/branches/brep-debug/src/libbn/tests/poly_sub.c brlcad/branches/brep-debug/src/libbn/tests/poly_synthetic_div.c brlcad/branches/brep-debug/src/libbn/tests/qmath.c brlcad/branches/brep-debug/src/libbn/tests/tabdata.c brlcad/branches/brep-debug/src/libbu/tests/b64.c brlcad/branches/brep-debug/src/libbu/tests/badmagic.c brlcad/branches/brep-debug/src/libbu/tests/basename.c brlcad/branches/brep-debug/src/libbu/tests/bitv.c brlcad/branches/brep-debug/src/libbu/tests/booleanize.c brlcad/branches/brep-debug/src/libbu/tests/color.c brlcad/branches/brep-debug/src/libbu/tests/datetime.c brlcad/branches/brep-debug/src/libbu/tests/dirname.c brlcad/branches/brep-debug/src/libbu/tests/encode.c brlcad/branches/brep-debug/src/libbu/tests/escape.c brlcad/branches/brep-debug/src/libbu/tests/file_mime.c brlcad/branches/brep-debug/src/libbu/tests/gethostname.c brlcad/branches/brep-debug/src/libbu/tests/hash.cpp brlcad/branches/brep-debug/src/libbu/tests/heap.c brlcad/branches/brep-debug/src/libbu/tests/opt.c brlcad/branches/brep-debug/src/libbu/tests/parallel.c brlcad/branches/brep-debug/src/libbu/tests/path_component.c brlcad/branches/brep-debug/src/libbu/tests/progname.c brlcad/branches/brep-debug/src/libbu/tests/redblack.c brlcad/branches/brep-debug/src/libbu/tests/semaphore.c brlcad/branches/brep-debug/src/libbu/tests/sort.c brlcad/branches/brep-debug/src/libbu/tests/sscanf.c brlcad/branches/brep-debug/src/libbu/tests/str.c brlcad/branches/brep-debug/src/libbu/tests/str_isprint.c brlcad/branches/brep-debug/src/libbu/tests/uuid.c brlcad/branches/brep-debug/src/libbu/tests/vls.c brlcad/branches/brep-debug/src/libbu/tests/vls_vprintf.c brlcad/branches/brep-debug/src/libicv/tests/crop.c brlcad/branches/brep-debug/src/libicv/tests/fade.c brlcad/branches/brep-debug/src/libicv/tests/filter.c brlcad/branches/brep-debug/src/libicv/tests/operations.c brlcad/branches/brep-debug/src/libicv/tests/read_write.c brlcad/branches/brep-debug/src/libicv/tests/rect.c brlcad/branches/brep-debug/src/libicv/tests/saturate.c brlcad/branches/brep-debug/src/libicv/tests/size_down.c brlcad/branches/brep-debug/src/libicv/tests/size_up.c brlcad/branches/brep-debug/src/libnmg/ brlcad/branches/brep-debug/src/librt/primitives/bspline/bspline_brep.cpp brlcad/branches/brep-debug/src/librt/tests/binary_attribute.c brlcad/branches/brep-debug/src/librt/tests/bundle.c brlcad/branches/brep-debug/src/librt/tests/diff.c brlcad/branches/brep-debug/src/librt/tests/dvec.cpp brlcad/branches/brep-debug/src/librt/tests/nmg_copy.c brlcad/branches/brep-debug/src/librt/tests/nmg_mk.c brlcad/branches/brep-debug/src/librt/tests/ssi.cpp Removed Paths: ------------- brlcad/branches/brep-debug/include/rt/nurb.h brlcad/branches/brep-debug/src/libbn/tests/bn_complex.c brlcad/branches/brep-debug/src/libbn/tests/bn_list.c brlcad/branches/brep-debug/src/libbn/tests/bn_mat.c brlcad/branches/brep-debug/src/libbn/tests/bn_plane_dist.c brlcad/branches/brep-debug/src/libbn/tests/bn_plane_isect.c brlcad/branches/brep-debug/src/libbn/tests/bn_plane_pt.c brlcad/branches/brep-debug/src/libbn/tests/bn_poly_add.c brlcad/branches/brep-debug/src/libbn/tests/bn_poly_cubic_roots.c brlcad/branches/brep-debug/src/libbn/tests/bn_poly_multiply.c brlcad/branches/brep-debug/src/libbn/tests/bn_poly_quartic_roots.c brlcad/branches/brep-debug/src/libbn/tests/bn_poly_scale.c brlcad/branches/brep-debug/src/libbn/tests/bn_poly_sub.c brlcad/branches/brep-debug/src/libbn/tests/bn_poly_synthetic_div.c brlcad/branches/brep-debug/src/libbn/tests/bn_qmath.c brlcad/branches/brep-debug/src/libbn/tests/bn_tabdata.c brlcad/branches/brep-debug/src/libbu/tests/bu_b64.c brlcad/branches/brep-debug/src/libbu/tests/bu_badmagic.c brlcad/branches/brep-debug/src/libbu/tests/bu_basename.c brlcad/branches/brep-debug/src/libbu/tests/bu_bitv.c brlcad/branches/brep-debug/src/libbu/tests/bu_booleanize.c brlcad/branches/brep-debug/src/libbu/tests/bu_color.c brlcad/branches/brep-debug/src/libbu/tests/bu_datetime.c brlcad/branches/brep-debug/src/libbu/tests/bu_dirname.c brlcad/branches/brep-debug/src/libbu/tests/bu_encode.c brlcad/branches/brep-debug/src/libbu/tests/bu_escape.c brlcad/branches/brep-debug/src/libbu/tests/bu_file_mime.c brlcad/branches/brep-debug/src/libbu/tests/bu_gethostname.c brlcad/branches/brep-debug/src/libbu/tests/bu_hash.cpp brlcad/branches/brep-debug/src/libbu/tests/bu_heap.c brlcad/branches/brep-debug/src/libbu/tests/bu_opt.c brlcad/branches/brep-debug/src/libbu/tests/bu_parallel.c brlcad/branches/brep-debug/src/libbu/tests/bu_path_component.c brlcad/branches/brep-debug/src/libbu/tests/bu_progname.c brlcad/branches/brep-debug/src/libbu/tests/bu_redblack.c brlcad/branches/brep-debug/src/libbu/tests/bu_semaphore.c brlcad/branches/brep-debug/src/libbu/tests/bu_sort.c brlcad/branches/brep-debug/src/libbu/tests/bu_sscanf.c brlcad/branches/brep-debug/src/libbu/tests/bu_str.c brlcad/branches/brep-debug/src/libbu/tests/bu_str_isprint.c brlcad/branches/brep-debug/src/libbu/tests/bu_uuid.c brlcad/branches/brep-debug/src/libbu/tests/bu_vls.c brlcad/branches/brep-debug/src/libbu/tests/bu_vls_vprintf.c brlcad/branches/brep-debug/src/libicv/tests/icv_crop.c brlcad/branches/brep-debug/src/libicv/tests/icv_fade.c brlcad/branches/brep-debug/src/libicv/tests/icv_filter.c brlcad/branches/brep-debug/src/libicv/tests/icv_operations.c brlcad/branches/brep-debug/src/libicv/tests/icv_read_write.c brlcad/branches/brep-debug/src/libicv/tests/icv_rect.c brlcad/branches/brep-debug/src/libicv/tests/icv_saturate.c brlcad/branches/brep-debug/src/libicv/tests/icv_size_down.c brlcad/branches/brep-debug/src/libicv/tests/icv_size_up.c brlcad/branches/brep-debug/src/librt/bezier.c brlcad/branches/brep-debug/src/librt/oslo_calc.c brlcad/branches/brep-debug/src/librt/oslo_map.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_basis.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_bezier.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_bound.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_brep.cpp brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_c2.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_copy.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_diff.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_eval.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_flat.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_interp.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_knot.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_norm.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_plot.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_poly.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_ray.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_refine.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_reverse.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_solve.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_split.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_tess.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_trim.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_trim_util.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_util.c brlcad/branches/brep-debug/src/librt/primitives/bspline/nurb_xsplit.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_bool.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_ck.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_class.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_copy.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_eval.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_extrude.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_fcut.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_fuse.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_index.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_info.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_inter.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_junk.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_manif.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_mesh.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_misc.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_mk.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_mod.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_plot.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_pr.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_pt_fu.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_rt_isect.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_rt_segs.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_tri.c brlcad/branches/brep-debug/src/librt/primitives/nmg/nmg_visit.c brlcad/branches/brep-debug/src/librt/tests/test_binary_attribute.c brlcad/branches/brep-debug/src/librt/tests/test_bundle.c brlcad/branches/brep-debug/src/librt/tests/test_diff.c brlcad/branches/brep-debug/src/librt/tests/test_dvec.cpp brlcad/branches/brep-debug/src/librt/tests/test_nmg_copy.c brlcad/branches/brep-debug/src/librt/tests/test_nmg_mk.c brlcad/branches/brep-debug/src/librt/tests/test_ssi.cpp Property Changed: ---------------- brlcad/branches/brep-debug/ brlcad/branches/brep-debug/NEWS brlcad/branches/brep-debug/src/libged/polyclip.cpp Index: brlcad/branches/brep-debug =================================================================== --- brlcad/branches/brep-debug 2016-10-26 18:31:12 UTC (rev 69167) +++ brlcad/branches/brep-debug 2016-10-27 23:45:58 UTC (rev 69168) Property changes on: brlcad/branches/brep-debug ___________________________________________________________________ Modified: svn:mergeinfo ## -5,4 +5,4 ## /brlcad/branches/opencl:65867-66137 /brlcad/branches/osg:62110-62113 /brlcad/branches/prep-cache:68236-68933 -/brlcad/trunk:61364-68144,68146-68249,68252-68266,68284-68821,68823-68945,68947-69049 +/brlcad/trunk:61364-68144,68146-68249,68252-68266,68284-68821,68823-68945,68947-69153 \ No newline at end of property Modified: brlcad/branches/brep-debug/CMakeLists.txt =================================================================== --- brlcad/branches/brep-debug/CMakeLists.txt 2016-10-26 18:31:12 UTC (rev 69167) +++ brlcad/branches/brep-debug/CMakeLists.txt 2016-10-27 23:45:58 UTC (rev 69168) @@ -483,7 +483,12 @@ include(ProcessorCount) ProcessorCount(N) if(NOT N EQUAL 0) - set(JFLAG "-j${N}") + math(EXPR NC "${N} / 2") + if(${NC} GREATER 1) + set(JFLAG "-j${NC}") + else(${NC} GREATER 1) + set(JFLAG) + endif(${NC} GREATER 1) else(NOT N EQUAL 0) # Huh? No j flag if we can't get a processor count set(JFLAG) @@ -511,7 +516,12 @@ include(ProcessorCount) ProcessorCount(N) if(NOT N EQUAL 0) - set(JFLAG "-j${N}") + math(EXPR NC "${N} / 2") + if(${NC} GREATER 1) + set(JFLAG "-j${NC}") + else(${NC} GREATER 1) + set(JFLAG) + endif(${NC} GREATER 1) else(NOT N EQUAL 0) # Huh? No j flag if we can't get a processor count set(JFLAG) @@ -530,7 +540,7 @@ COMMAND ${CMAKE_COMMAND} -E echo " tests not currently under development\\). All dependencies required" COMMAND ${CMAKE_COMMAND} -E echo " by the tests are compiled automatically." COMMAND ${CMAKE_COMMAND} -E echo "\"**********************************************************************\"" - COMMAND ${CMAKE_CTEST_COMMAND} -C ${CONFIG} -LE \"Regression|NOT_WORKING\" -E \"^regress-|NOTE\" ${JFLAG} + COMMAND ${CMAKE_CTEST_COMMAND} -C ${CONFIG} -LE \"Regression|NOT_WORKING\" -E \"^regress-|NOTE|benchmark\" ${JFLAG} ) set_target_properties(unit PROPERTIES FOLDER "BRL-CAD Validation Testing") @@ -2207,6 +2217,7 @@ BRLCAD_FUNCTION_EXISTS(XQueryExtension HAVE_XQUERYEXTENSION) BRLCAD_FUNCTION_EXISTS(_putenv_s HAVE__PUTENV_S) +BRLCAD_FUNCTION_EXISTS(_splitpath HAVE__SPLITPATH) BRLCAD_FUNCTION_EXISTS(alarm HAVE_ALARM) BRLCAD_FUNCTION_EXISTS(dlopen HAVE_DLOPEN) BRLCAD_FUNCTION_EXISTS(drand48 HAVE_DRAND48) @@ -2493,9 +2504,9 @@ # Before we finalize, set some specific global linker flags if(MSVC) - set(CMAKE_EXE_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT} /NOLOGO) - set(CMAKE_SHARED_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT} /NOLOGO) - set(CMAKE_MODULE_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT} /NOLOGO) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10000000 /NOLOGO") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /STACK:10000000 /NOLOGO") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /STACK:10000000 /NOLOGO") endif(MSVC) #----------------------------------------------------------------------------- @@ -2784,7 +2795,6 @@ include("${BRLCAD_CMAKE_DIR}/BRLCAD_Summary.cmake") endif(NOT BRLCAD_DISABLE_SUMMARY) - # ******************************************************************* # *** Timestamp Rules *** # ******************************************************************* @@ -3146,6 +3156,18 @@ set(CONFIG_FATAL_ERROR 0) +function(DIFF_FILE filename) + file(READ "${BRLCAD_SOURCE_DIR}/${filename}" SRC_STR) + file(READ "${BRLCAD_BINARY_DIR}/${filename}.new" BIN_STR) + string(REGEX REPLACE "\r?\n" "" OLD_STR "${SRC_STR}") + string(REGEX REPLACE "\r?\n" "" NEW_STR "${BIN_STR}") + if(NOT "${OLD_STR}" STREQUAL "${NEW_STR}") + set(CONFIG_FATAL_ERROR 1 PARENT_SCOPE) + message("\n\"${BRLCAD_SOURCE_DIR}/${filename}\" is out of date. An updated version has been generated at \"${BRLCAD_BINARY_DIR}/${filename}.new\"\nTo clear this warning, replace \"${BRLCAD_SOURCE_DIR}/${filename}\" with \"${BRLCAD_BINARY_DIR}/${filename}.new\"\n") + endif(NOT "${OLD_STR}" STREQUAL "${NEW_STR}") +endfunction(DIFF_FILE filename) + +# Finalize and check INSTALL file file(READ "${BRLCAD_SOURCE_DIR}/INSTALL" SRC_INSTALL_STR) string(REGEX REPLACE "${CONFIG_OPT_STRING}.*" "" INSTALL_PREFIX "${SRC_INSTALL_STR}") file(WRITE "${BRLCAD_BINARY_DIR}/INSTALL.new" "${INSTALL_PREFIX}") @@ -3156,29 +3178,15 @@ the toplevel CMakeLists.txt file and src/other/CMakeLists.txt - any changes should be made in those files. The CMake configuration process will automatically re-generate INSTALL with the new descriptions and alias - information.\n") -execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files - "${BRLCAD_SOURCE_DIR}/INSTALL" "${BRLCAD_BINARY_DIR}/INSTALL.new" - RESULT_VARIABLE IS_DIFFERENT OUTPUT_VARIABLE DIFF_OUTPUT ERROR_VARIABLE - DIFF_ERROR) -if(IS_DIFFERENT) - set(CONFIG_FATAL_ERROR 1) - message("\n\"${BRLCAD_SOURCE_DIR}/INSTALL\" is out of date. An updated version has been generated at \"${BRLCAD_BINARY_DIR}/INSTALL.new\"\nTo clear this warning, replace \"${BRLCAD_SOURCE_DIR}/INSTALL\" with \"${BRLCAD_BINARY_DIR}/INSTALL.new\"\n") -endif(IS_DIFFERENT) + information.\n" + ) +DIFF_FILE(INSTALL) # Do the same thing for the configure shell script - finish it and check # for differences. file(READ "${BRLCAD_CMAKE_DIR}/configure_suffix.sh" CONFIG_SUFFIX) file(APPEND "${CMAKE_BINARY_DIR}/configure.new" "${CONFIG_SUFFIX}") -# Compare -execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files - "${BRLCAD_SOURCE_DIR}/configure" "${BRLCAD_BINARY_DIR}/configure.new" - RESULT_VARIABLE IS_CONFIG_SH_DIFFERENT OUTPUT_VARIABLE DIFF_OUTPUT ERROR_VARIABLE - DIFF_ERROR) -if(IS_CONFIG_SH_DIFFERENT) - set(CONFIG_FATAL_ERROR 1) - message("\n\"${BRLCAD_SOURCE_DIR}/configure\" is out of date. An updated version has been generated at \"${BRLCAD_BINARY_DIR}/configure.new\"\nTo clear this warning, replace \"${BRLCAD_SOURCE_DIR}/configure\" with \"${BRLCAD_BINARY_DIR}/configure.new\"\n") -endif(IS_CONFIG_SH_DIFFERENT) +DIFF_FILE(configure) if(CONFIG_FATAL_ERROR) message(FATAL_ERROR "Configure haulted.") Modified: brlcad/branches/brep-debug/NEWS =================================================================== --- brlcad/branches/brep-debug/NEWS 2016-10-26 18:31:12 UTC (rev 69167) +++ brlcad/branches/brep-debug/NEWS 2016-10-27 23:45:58 UTC (rev 69168) @@ -13,6 +13,9 @@ --- 2016-07-XX Release 7.26.2 --- ---------------------------------------------------------------------- +* improved 'loadview' command view script handling - Sean Morrison +* fixed TIE raytracing for zero thickness BoTs - Cliff Yapp +* added Wavefront OBJ File->Open GUI support in Archer - Cliff Yapp * fixed attr show error printing large attribute values - Cliff Yapp * fixed rt support for lights created prior to rel 6.0 - Sean Morrison * fixed infinite loop bug in when using shadow lights - Sean Morrison Property changes on: brlcad/branches/brep-debug/NEWS ___________________________________________________________________ Modified: svn:mergeinfo ## -5,4 +5,4 ## /brlcad/branches/opencl/NEWS:65867-66137 /brlcad/branches/osg/NEWS:62110-62113 /brlcad/branches/prep-cache/NEWS:68236-68933 -/brlcad/trunk/NEWS:61364-68144,68146-68249,68252-68266,68284-68821,68823-68945,68947-69049 +/brlcad/trunk/NEWS:61364-68144,68146-68249,68252-68266,68284-68821,68823-68945,68947-69153 \ No newline at end of property Modified: brlcad/branches/brep-debug/db/CMakeLists.txt =================================================================== --- brlcad/branches/brep-debug/db/CMakeLists.txt 2016-10-26 18:31:12 UTC (rev 69167) +++ brlcad/branches/brep-debug/db/CMakeLists.txt 2016-10-27 23:45:58 UTC (rev 69168) @@ -93,6 +93,7 @@ BRLCAD_ADDDATA(terra.dsp db) endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY) CMAKEFILES( + aet.rt cornell.rt cube.rt db.php Copied: brlcad/branches/brep-debug/db/aet.rt (from rev 69153, brlcad/trunk/db/aet.rt) =================================================================== --- brlcad/branches/brep-debug/db/aet.rt (rev 0) +++ brlcad/branches/brep-debug/db/aet.rt 2016-10-27 23:45:58 UTC (rev 69168) @@ -0,0 +1,13 @@ +#!/bin/sh +rt -M -p50 -W \ + $*\ + aet.g\ + 'diagram.r' \ + <<EOF +viewsize 3.58095758486442e+00; +orientation 4.58468551319667e-01 5.46381543126676e-01 5.36927647047512e-01 4.50535790606452e-01; +eye_pt 2.16300884070308e+00 6.60866025843505e-01 3.68751836397137e-01; +start 0; clean; +end; + +EOF Modified: brlcad/branches/brep-debug/include/bu/defines.h =================================================================== --- brlcad/branches/brep-debug/include/bu/defines.h 2016-10-26 18:31:12 UTC (rev 69167) +++ brlcad/branches/brep-debug/include/bu/defines.h 2016-10-27 23:45:58 UTC (rev 69168) @@ -177,19 +177,6 @@ * Quick and easy macros to generate an informative error message and * abort execution if the specified condition does not hold true. * - * @def BU_ASSERT_PTR(eqn) - * Quick and easy macros to generate an informative error message and - * abort execution if the specified condition does not hold true. - * - * @def BU_ASSERT_LONG(eqn) - * Quick and easy macros to generate an informative error message and - * abort execution if the specified condition does not hold true. - * - * @def BU_ASSERT_DOUBLE(eqn) - * Quick and easy macros to generate an informative error message and - * abort execution if the specified condition does not hold true. - * - * Example: BU_ASSERT_LONG(j+7, <, 42); */ #ifdef NO_BOMBING_MACROS # define BU_ASSERT(_equation) (void)(_equation) @@ -202,70 +189,7 @@ } #endif -#ifdef NO_BOMBING_MACROS -# define BU_ASSERT_PTR(_lhs, _relation, _rhs) (void)(_lhs); (void)(_rhs) -#else -# define BU_ASSERT_PTR(_lhs, _relation, _rhs) \ - if (UNLIKELY(!((_lhs) _relation (_rhs)))) { \ - bu_log("BU_ASSERT_PTR(" #_lhs #_relation #_rhs ") failed, lhs=%p, rhs=%p, file %s, line %d\n", \ - (void *)(_lhs), (void *)(_rhs), \ - __FILE__, __LINE__); \ - bu_bomb("BU_ASSERT_PTR failure\n"); \ - } -#endif - -#ifdef NO_BOMBING_MACROS -# define BU_ASSERT_LONG(_lhs, _relation, _rhs) (void)(_lhs); (void)(_rhs) -#else -# define BU_ASSERT_LONG(_lhs, _relation, _rhs) \ - if (UNLIKELY(!((_lhs) _relation (_rhs)))) { \ - bu_log("BU_ASSERT_LONG(" #_lhs #_relation #_rhs ") failed, lhs=%ld, rhs=%ld, file %s, line %d\n", \ - (long)(_lhs), (long)(_rhs), \ - __FILE__, __LINE__); \ - bu_bomb("BU_ASSERT_LONG failure\n"); \ - } -#endif - - -#ifdef NO_BOMBING_MACROS -# define BU_ASSERT_SIZE_T(_lhs, _relation, _rhs) (void)(_lhs); (void)(_rhs) -#else -# define BU_ASSERT_SIZE_T(_lhs, _relation, _rhs) \ - if (UNLIKELY(!((_lhs) _relation (_rhs)))) { \ - bu_log("BU_ASSERT_SIZE_T(" #_lhs #_relation #_rhs ") failed, lhs=%zd, rhs=%zd, file %s, line %d\n", \ - (size_t)(_lhs), (size_t)(_rhs), \ - __FILE__, __LINE__); \ - bu_bomb("BU_ASSERT_SIZE_T failure\n"); \ - } -#endif - - -#ifdef NO_BOMBING_MACROS -# define BU_ASSERT_SSIZE_T(_lhs, _relation, _rhs) (void)(_lhs); (void)(_rhs) -#else -# define BU_ASSERT_SSIZE_T(_lhs, _relation, _rhs) \ - if (UNLIKELY(!((_lhs) _relation (_rhs)))) { \ - bu_log("BU_ASSERT_SSIZE_T(" #_lhs #_relation #_rhs ") failed, lhs=%zd, rhs=%zd, file %s, line %d\n", \ - (ssize_t)(_lhs), (ssize_t)(_rhs), \ - __FILE__, __LINE__); \ - bu_bomb("BU_ASSERT_SSIZE_T failure\n"); \ - } -#endif - - -#ifdef NO_BOMBING_MACROS -# define BU_ASSERT_DOUBLE(_lhs, _relation, _rhs) (void)(_lhs); (void)(_rhs) -#else -# define BU_ASSERT_DOUBLE(_lhs, _relation, _rhs) \ - if (UNLIKELY(!((_lhs) _relation (_rhs)))) { \ - bu_log("BU_ASSERT_DOUBLE(" #_lhs #_relation #_rhs ") failed, lhs=%lf, rhs=%lf, file %s, line %d\n", \ - (double)(_lhs), (double)(_rhs), \ - __FILE__, __LINE__); \ - bu_bomb("BU_ASSERT_DOUBLE failure\n"); \ - } -#endif - /** * fastf_t - Intended to be the fastest floating point data type on * the current machine, with at least 64 bits of precision. On 16 and Modified: brlcad/branches/brep-debug/include/bu/exit.h =================================================================== --- brlcad/branches/brep-debug/include/bu/exit.h 2016-10-26 18:31:12 UTC (rev 69167) +++ brlcad/branches/brep-debug/include/bu/exit.h 2016-10-27 23:45:58 UTC (rev 69168) @@ -87,7 +87,7 @@ * 4. Outputs str to the terminal device in case standard error is * redirected. * - * 5. Aborts abnormally (via abort()) if BU_DEBUG_COREDUMP is defined. + * 5. Aborts abnormally (via abort) if BU_DEBUG_COREDUMP is defined. * * 6. Exits with exit(12). * Modified: brlcad/branches/brep-debug/include/nmg.h =================================================================== --- brlcad/branches/brep-debug/include/nmg.h 2016-10-26 18:31:12 UTC (rev 69167) +++ brlcad/branches/brep-debug/include/nmg.h 2016-10-27 23:45:58 UTC (rev 69168) @@ -30,18 +30,60 @@ /** @{ */ /** @file include/nmg.h */ +/* + * TODO: since this original work, there have been a number of subsequent + * papers published on ways of representing non-manifold geometry. In + * particular, the "partial entity" structure is purported to have essentially + * the same representation power as Weiler's radial edge approach but with + * more compact storage: + * + * Sang Hun Lee and Kunwoo Lee, Partial Entity Structure: A Compact Boundary + * Representation for Non-Manifold Geometric Modeling, J. Comput. Inf. Sci. + * Eng 1(4), 356-365 (Nov 01, 2001) + * + * Sang Hun Lee and Kunwoo Lee, Partial entity structure: a compact + * non-manifold boundary representation based on partial topological entities, + * SMA '01 Proceedings of the sixth ACM symposium on Solid modeling and + * applications Pages 159-170 + * + * Also, from a design perspective, it would be nice if we could set this up so + * that the more general non-manifold data structures include less general + * containers and just extend them with the necessary extra information... + * Don't know if that's possible, but it would be really nice from a data + * conversion standpoint... + */ + #ifndef NMG_H #define NMG_H #include "common.h" /* interface headers */ +#include "vmath.h" #include "bu/list.h" #include "bu/log.h" #include "bu/magic.h" #include "bu/ptbl.h" +#include "bn/plane.h" +#include "bn/tol.h" +#include "bn/vlist.h" #include "vmath.h" +#ifndef NMG_EXPORT +# if defined(NMG_DLL_EXPORTS) && defined(NMG_DLL_IMPORTS) +# error "Only NMG_DLL_EXPORTS or NMG_DLL_IMPORTS can be defined, not both." +# elif defined(NMG_DLL_EXPORTS) +# define NMG_EXPORT __declspec(dllexport) +# elif defined(NMG_DLL_IMPORTS) +# define NMG_EXPORT __declspec(dllimport) +# else +# define NMG_EXPORT +# endif +#endif + + +__BEGIN_DECLS + #define DEBUG_PL_ANIM 0x00000001 /**< @brief 1 mged: animated evaluation */ #define DEBUG_PL_SLOW 0x00000002 /**< @brief 2 mged: add delays to animation */ #define DEBUG_GRAPHCL 0x00000004 /**< @brief 3 mged: graphic classification */ @@ -153,6 +195,9 @@ bu_bomb("bye"); \ } + +NMG_EXPORT extern uint32_t nmg_debug; /**< @brief debug bits for NMG's see nmg.h */ + /** * @brief * Definition of a knot vector. @@ -779,6 +824,2018 @@ void (*vis_vertex_g)(uint32_t *, void *, int); }; +struct nmg_radial { + struct bu_list l; + struct edgeuse *eu; + struct faceuse *fu; /**< @brief Derived from eu */ + struct shell *s; /**< @brief Derived from eu */ + int existing_flag; /**< @brief !0 if this eu exists on dest edge */ + int is_crack; /**< @brief This eu is part of a crack. */ + int is_outie; /**< @brief This crack is an "outie" */ + int needs_flip; /**< @brief Insert eumate, not eu */ + fastf_t ang; /**< @brief angle, in radians. 0 to 2pi */ +}; +#define NMG_CK_RADIAL(_p) NMG_CKMAG(_p, NMG_RADIAL_MAGIC, "nmg_radial") + +struct nmg_inter_struct { + uint32_t magic; + struct bu_ptbl *l1; /**< @brief vertexuses on the line of */ + struct bu_ptbl *l2; /**< @brief intersection between planes */ + fastf_t *mag1; /**< @brief Distances along intersection line */ + fastf_t *mag2; /**< @brief for each vertexuse in l1 and l2. */ + size_t mag_len; /**< @brief Array size of mag1 and mag2 */ + struct shell *s1; + struct shell *s2; + struct faceuse *fu1; /**< @brief null if l1 comes from a wire */ + struct faceuse *fu2; /**< @brief null if l2 comes from a wire */ + struct bn_tol tol; + int coplanar; /**< @brief a flag */ + struct edge_g_lseg *on_eg; /**< @brief edge_g for line of intersection */ + point_t pt; /**< @brief 3D line of intersection */ + vect_t dir; + point_t pt2d; /**< @brief 2D projection of isect line */ + vect_t dir2d; + fastf_t *vert2d; /**< @brief Array of 2d vertex projections [index] */ + size_t maxindex; /**< @brief size of vert2d[] */ + mat_t proj; /**< @brief Matrix to project onto XY plane */ + const uint32_t *twod; /**< @brief ptr to face/edge of 2d projection */ +}; +#define NMG_CK_INTER_STRUCT(_p) NMG_CKMAG(_p, NMG_INTER_STRUCT_MAGIC, "nmg_inter_struct") + + + +/*NURBS*/ + +#define RT_NURB_SPLIT_ROW 0 +#define RT_NURB_SPLIT_COL 1 +#define RT_NURB_SPLIT_FLAT 2 + +/* Definition of NURB point types and coordinates + * Bit: 8765 4321 0 + * |nnnn|tttt|h + * h - 1 if Homogeneous + * tttt - point type + * 1 = XY + * 2 = XYZ + * 3 = UV + * 4 = Random data + * 5 = Projected surface + * nnnnn - number of coordinates per point + * includes the rational coordinate + */ + +/* point types */ +#define RT_NURB_PT_XY 1 /**< @brief x, y coordinates */ +#define RT_NURB_PT_XYZ 2 /**< @brief x, y, z coordinates */ +#define RT_NURB_PT_UV 3 /**< @brief trim u, v parameter space */ +#define RT_NURB_PT_DATA 4 /**< @brief random data */ +#define RT_NURB_PT_PROJ 5 /**< @brief Projected Surface */ + +#define RT_NURB_PT_RATIONAL 1 +#define RT_NURB_PT_NONRAT 0 + +#define RT_NURB_MAKE_PT_TYPE(n, t, h) ((n<<5) | (t<<1) | h) +#define RT_NURB_EXTRACT_COORDS(pt) (pt>>5) +#define RT_NURB_EXTRACT_PT_TYPE(pt) ((pt>>1) & 0x0f) +#define RT_NURB_IS_PT_RATIONAL(pt) (pt & 0x1) +#define RT_NURB_STRIDE(pt) (RT_NURB_EXTRACT_COORDS(pt) * sizeof( fastf_t)) + +#define DEBUG_NMG_SPLINE 0x00000100 /**< @brief 9 Splines */ + +/* macros to check/validate a structure pointer + */ +#define NMG_CK_KNOT(_p) BU_CKMAG(_p, RT_KNOT_VECTOR_MAGIC, "knot_vector") +#define NMG_CK_CNURB(_p) BU_CKMAG(_p, NMG_EDGE_G_CNURB_MAGIC, "cnurb") +#define NMG_CK_SNURB(_p) BU_CKMAG(_p, NMG_FACE_G_SNURB_MAGIC, "snurb") + +/* DEPRECATED */ +#define GET_CNURB(p/*, m*/) { \ + BU_ALLOC((p), struct edge_g_cnurb); \ + /* NMG_INCR_INDEX(p, m); */ \ + BU_LIST_INIT( &(p)->l ); (p)->l.magic = NMG_EDGE_G_CNURB_MAGIC; \ +} + +/* DEPRECATED */ +#define GET_SNURB(p/*, m*/) { \ + BU_ALLOC((p), struct face_g_snurb); \ + /* NMG_INCR_INDEX(p, m); */ \ + BU_LIST_INIT( &(p)->l ); (p)->l.magic = NMG_FACE_G_SNURB_MAGIC; \ +} + + +/* ----- Internal structures ----- */ + +struct nmg_nurb_poly { + struct nmg_nurb_poly * next; + point_t ply[3]; /**< @brief Vertices */ + fastf_t uv[3][2]; /**< @brief U, V parametric values */ +}; + +struct nmg_nurb_uv_hit { + struct nmg_nurb_uv_hit * next; + int sub; + fastf_t u; + fastf_t v; +}; + + +struct oslo_mat { + struct oslo_mat * next; + int offset; + int osize; + fastf_t * o_vec; +}; + +/* --- new way */ + +struct bezier_2d_list { + struct bu_list l; + point2d_t *ctl; +}; + +/** + * * Evaluate a Bezier curve at a particular parameter value. Fill in + * * control points for resulting sub-curves if "Left" and "Right" are + * * non-null. + * */ +NMG_EXPORT extern void bezier(point2d_t *V, int degree, double t, point2d_t *Left, point2d_t *Right, point2d_t eval_pt, point2d_t normal ); + +/** + * * Given an equation in Bernstein-Bezier form, find all of the roots + * * in the interval [0, 1]. Return the number of roots found. + * */ +NMG_EXPORT extern int bezier_roots(point2d_t *w, int degree, point2d_t **intercept, point2d_t **normal, point2d_t ray_start, point2d_t ray_dir, point2d_t ray_perp, int depth, fastf_t epsilon); + +/** + * * subdivide a 2D bezier curve at t=0.5 + * */ +NMG_EXPORT extern struct bezier_2d_list *bezier_subdivide(struct bezier_2d_list *bezier_hd, int degree, fastf_t epsilon, int depth); + + +/* TODO - these structs and ray_in_rpp are versions of librt functionality, + * and we need to think about how/where to merge them into a common function + * and struct that are available to both libraries without introducing a + * coupling dependency. */ + +NMG_EXPORT extern struct bu_list re_nmgfree; /**< @brief head of NMG hitmiss freelist */ + +#define NMG_HIT_LIST 0 +#define NMG_MISS_LIST 1 + +/* These values are for the hitmiss "in_out" variable and indicate the + * nature of the hit when known + */ +#define HMG_INBOUND_STATE(_hm) (((_hm)->in_out & 0x0f0) >> 4) +#define HMG_OUTBOUND_STATE(_hm) ((_hm)->in_out & 0x0f) + + +#define NMG_RAY_STATE_INSIDE 1 +#define NMG_RAY_STATE_ON 2 +#define NMG_RAY_STATE_OUTSIDE 4 +#define NMG_RAY_STATE_ANY 8 + +#define HMG_HIT_IN_IN 0x11 /**< @brief hit internal structure */ +#define HMG_HIT_IN_OUT 0x14 /**< @brief breaking out */ +#define HMG_HIT_OUT_IN 0x41 /**< @brief breaking in */ +#define HMG_HIT_OUT_OUT 0x44 /**< @brief edge/vertex graze */ +#define HMG_HIT_IN_ON 0x12 +#define HMG_HIT_ON_IN 0x21 +#define HMG_HIT_ON_ON 0x22 +#define HMG_HIT_OUT_ON 0x42 +#define HMG_HIT_ON_OUT 0x24 +#define HMG_HIT_ANY_ANY 0x88 /**< @brief hit on non-3-manifold */ + +#define NMG_VERT_ENTER 1 +#define NMG_VERT_ENTER_LEAVE 0 +#define NMG_VERT_LEAVE -1 +#define NMG_VERT_UNKNOWN -2 + +#define NMG_HITMISS_SEG_IN 0x696e00 /**< @brief "in" */ +#define NMG_HITMISS_SEG_OUT 0x6f757400 /**< @brief "out" */ + +#define NMG_CK_RD(_rd) NMG_CKMAG(_rd, NMG_RAY_DATA_MAGIC, "ray data"); + +#ifdef NO_BOMBING_MACROS +# define NMG_CK_HITMISS(hm) (void)(hm) +#else +# define NMG_CK_HITMISS(hm) \ + {\ + switch (hm->l.magic) { \ + case NMG_RT_HIT_MAGIC: \ + case NMG_RT_HIT_SUB_MAGIC: \ + case NMG_RT_MISS_MAGIC: \ + break; \ + case NMG_MISS_LIST: \ + bu_log(CPP_FILELINE ": struct hitmiss has NMG_MISS_LIST magic #\n"); \ + bu_bomb("NMG_CK_HITMISS: going down in flames\n"); \ + case NMG_HIT_LIST: \ + bu_log(CPP_FILELINE ": struct hitmiss has NMG_MISS_LIST magic #\n"); \ + bu_bomb("NMG_CK_HITMISS: going down in flames\n"); \ + default: \ + bu_log(CPP_FILELINE ": bad struct hitmiss magic: %u:(0x%08x)\n", \ + hm->l.magic, hm->l.magic); \ + bu_bomb("NMG_CK_HITMISS: going down in flames\n"); \ + }\ + if (!hm->hit.hit_private) { \ + bu_log(CPP_FILELINE ": NULL hit_private in hitmiss struct\n"); \ + bu_bomb("NMG_CK_HITMISS: going down in flames\n"); \ + } \ + } +#endif + +#ifdef NO_BOMBING_MACROS +# define NMG_CK_HITMISS_LISTS(rd) (void)(rd) +#else +# define NMG_CK_HITMISS_LISTS(rd) \ + { \ + struct nmg_hitmiss *_a_hit; \ + for (BU_LIST_FOR(_a_hit, nmg_hitmiss, &rd->rd_hit)) {NMG_CK_HITMISS(_a_hit);} \ + for (BU_LIST_FOR(_a_hit, nmg_hitmiss, &rd->rd_miss)) {NMG_CK_HITMISS(_a_hit);} \ + } +#endif + + +#define NMG_GET_HITMISS(_p) { \ + (_p) = BU_LIST_FIRST(nmg_hitmiss, &(re_nmgfree)); \ + if (BU_LIST_IS_HEAD((_p), &(re_nmgfree))) \ + BU_ALLOC((_p), struct nmg_hitmiss); \ + else \ + BU_LIST_DEQUEUE(&((_p)->l)); \ + } + + +#define NMG_FREE_HITLIST(_p) { \ + BU_CK_LIST_HEAD((_p)); \ + BU_LIST_APPEND_LIST(&(re_nmgfree), (_p)); \ + } + +#ifdef NO_BOMBING_MACROS +# define nmg_bu_bomb(rd, vlfree, str) (void)(rd) +#else +# define nmg_bu_bomb(rd, vlfree, str) { \ + bu_log("%s", str); \ + if (nmg_debug & DEBUG_NMGRT) bu_bomb("End of diagnostics"); \ + BU_LIST_INIT(&rd->rd_hit); \ + BU_LIST_INIT(&rd->rd_miss); \ + nmg_debug |= DEBUG_NMGRT; \ + nmg_isect_ray_model(rd,vlfree); \ + bu_bomb("Should have bombed before this\n"); \ + } +#endif + + +#define HIT 1 /**< @brief a hit on a face */ +#define MISS 0 /**< @brief a miss on the face */ + + +struct nmg_ray { + uint32_t magic; + point_t r_pt; /**< @brief Point at which ray starts */ + vect_t r_dir; /**< @brief Direction of ray (UNIT Length) */ + fastf_t r_min; /**< @brief entry dist to bounding sphere */ + fastf_t r_max; /**< @brief exit dist from bounding sphere */ +}; + +struct nmg_hit { + uint32_t hit_magic; + fastf_t hit_dist; /**< @brief dist from r_pt to hit_point */ + point_t hit_point; /**< @brief DEPRECATED: Intersection point, use VJOIN1 hit_dist */ + vect_t hit_normal; /**< @brief DEPRECATED: Surface Normal at hit_point, use RT_HIT_NORMAL */ + vect_t hit_vpriv; /**< @brief PRIVATE vector for xxx_*() */ + void * hit_private; /**< @brief PRIVATE handle for xxx_shot() */ + int hit_surfno; /**< @brief solid-specific surface indicator */ + struct nmg_ray * hit_rayp; /**< @brief pointer to defining ray */ +}; + +struct nmg_seg { + struct bu_list l; + struct nmg_hit seg_in; /**< @brief IN information */ + struct nmg_hit seg_out; /**< @brief OUT information */ + void * seg_stp; /**< @brief pointer back to soltab */ +}; + +struct nmg_hitmiss { + struct bu_list l; + struct nmg_hit hit; + fastf_t dist_in_plane; /**< @brief distance from plane intersect */ + int in_out; /**< @brief status of ray as it transitions + * this hit point. + */ + long *inbound_use; + vect_t inbound_norm; + long *outbound_use; + vect_t outbound_norm; + int start_stop; /**< @brief is this a seg_in or seg_out */ + struct nmg_hitmiss *other; /**< @brief for keeping track of the other + * end of the segment when we know + * it + */ +}; + +/** + * Ray Data structure + * + * A) the hitmiss table has one element for each nmg structure in the + * nmgmodel. The table keeps track of which elements have been + * processed before and which haven't. Elements in this table will + * either be: (NULL) item not previously processed hitmiss ptr item + * previously processed + * + * the 0th item in the array is a pointer to the head of the "hit" + * list. The 1th item in the array is a pointer to the head of the + * "miss" list. + * + * B) If plane_pt is non-null then we are currently processing a face + * intersection. The plane_dist and ray_dist_to_plane are valid. The + * ray/edge intersector should check the distance from the plane + * intercept to the edge and update "plane_closest" if the current + * edge is closer to the intercept than the previous closest object. + */ +struct nmg_ray_data { + uint32_t magic; + struct model *rd_m; + char *manifolds; /**< @brief structure 1-3manifold table */ + vect_t rd_invdir; + struct nmg_ray *rp; + void * *ap; + struct nmg_seg *seghead; + void * *stp; + const struct bn_tol *tol; + struct nmg_hitmiss **hitmiss; /**< @brief 1 struct hitmiss ptr per elem. */ + struct bu_list rd_hit; /**< @brief list of hit elements */ + struct bu_list rd_miss; /**< @brief list of missed/sub-hit elements */ + +/* The following are to support isect_ray_face() */ + + /** + * plane_pt is the intercept point of the ray with the plane of + * the face. + */ + point_t plane_pt; /**< @brief ray/plane(face) intercept point */ + + /** + * ray_dist_to_plane is the parametric distance along the ray from + * the ray origin (rd->rp->r_pt) to the ray/plane intercept point + */ + fastf_t ray_dist_to_plane; /**< @brief ray parametric dist to plane */ + + /** + * the "face_subhit" element is a boolean used by isect_ray_face + * and [e|v]u_touch_func to record the fact that the + * ray/(plane/face) intercept point was within tolerance of an + * edge/vertex of the face. In such instances, isect_ray_face + * does NOT need to generate a hit point for the face, as the hit + * point for the edge/vertex will suffice. + */ + int face_subhit; + + /** + * the "classifying_ray" flag indicates that this ray is being + * used to classify a point, so that the "eu_touch" and "vu_touch" + * functions should not be called. + */ + int classifying_ray; +}; + +int +ray_in_rpp(struct nmg_ray *rp, + register const fastf_t *invdir, /* inverses of rp->r_dir[] */ + register const fastf_t *min, + register const fastf_t *max); + +/** + * global nmg animation vblock callback + */ +NMG_EXPORT extern void (*nmg_vlblock_anim_upcall)(void); + +/** + * global nmg mged display debug callback (ew) + */ +NMG_EXPORT extern void (*nmg_mged_debug_display_hack)(void); + + + + +/* From file nmg_mk.c */ +/* MAKE routines */ +NMG_EXPORT extern struct model *nmg_mm(void); +NMG_EXPORT extern struct model *nmg_mmr(void); +NMG_EXPORT extern struct nmgregion *nmg_mrsv(struct model *m); +NMG_EXPORT extern struct shell *nmg_msv(struct nmgregion *r_p); +NMG_EXPORT extern struct faceuse *nmg_mf(struct loopuse *lu1); +NMG_EXPORT extern struct loopuse *nmg_mlv(uint32_t *magic, + struct vertex *v, + int orientation); +NMG_EXPORT extern struct edgeuse *nmg_me(struct vertex *v1, + struct vertex *v2, + struct shell *s); +NMG_EXPORT extern struct edgeuse *nmg_meonvu(struct vertexuse *vu); +NMG_EXPORT extern struct loopuse *nmg_ml(struct shell *s); +/* KILL routines */ +NMG_EXPORT extern int nmg_keg(struct edgeuse *eu); +NMG_EXPORT extern int nmg_kvu(struct vertexuse *vu); +NMG_EXPORT extern int nmg_kfu(struct faceuse *fu1); +NMG_EXPORT extern int nmg_klu(struct loopuse *lu1); +NMG_EXPORT extern int nmg_keu(struct edgeuse *eu); +NMG_EXPORT extern int nmg_keu_zl(struct shell *s, + const struct bn_tol *tol); +NMG_EXPORT extern int nmg_ks(struct shell *s); +NMG_EXPORT extern int nmg_kr(struct nmgregion *r); +NMG_EXPORT extern void nmg_km(struct model *m); +/* Geometry and Attribute routines */ +NMG_EXPORT extern void nmg_vertex_gv(struct vertex *v, + const point_t pt); +NMG_EXPORT extern void nmg_vertex_g(struct vertex *v, + fastf_t x, + fastf_t y, + fastf_t z); +NMG_EXPORT extern void nmg_vertexuse_nv(struct vertexuse *vu, + const vect_t norm); +NMG_EXPORT extern void nmg_vertexuse_a_cnurb(struct vertexuse *vu, + const fastf_t *uvw); +NMG_EXPORT extern void nmg_edge_g(struct edgeuse *eu); +NMG_EXPORT extern void nmg_edge_g_cnurb(struct edgeuse *eu, + int order, + int n_knots, + fastf_t *kv, + int n_pts, + int pt_type, + fastf_t *points); +NMG_EXPORT extern void nmg_edge_g_cnurb_plinear(struct edgeuse *eu); +NMG_EXPORT extern int nmg_use_edge_g(struct edgeuse *eu, + uint32_t *eg); +NMG_EXPORT extern void nmg_loop_g(struct loop *l, + const struct bn_tol *tol); +NMG_EXPORT extern void nmg_face_g(struct faceuse *fu, + const plane_t p); +NMG_EXPORT extern void nmg_face_new_g(struct faceuse *fu, + const plane_t pl); +NMG_EXPORT extern void nmg_face_g_snurb(struct faceuse *fu, + int u_order, + int v_order, + int n_u_knots, + int n_v_knots, + fastf_t *ukv, + fastf_t *vkv, + int n_rows, + int n_cols, + int pt_type, + fastf_t *mesh); +NMG_EXPORT extern void nmg_face_bb(struct face *f, + const struct bn_tol *tol); +NMG_EXPORT extern void nmg_shell_a(struct shell *s, + const struct bn_tol *tol); +NMG_EXPORT extern void nmg_region_a(struct nmgregion *r, + const struct bn_tol *tol); +/* DEMOTE routines */ +NMG_EXPORT extern int nmg_demote_lu(struct loopuse *lu); +NMG_EXPORT extern int nmg_demote_eu(struct edgeuse *eu); +/* MODIFY routines */ +NMG_EXPORT extern void nmg_movevu(struct vertexuse *vu, + struct vertex *v); +NMG_EXPORT extern void nmg_je(struct edgeuse *eudst, + struct edgeuse *eusrc); +NMG_EXPORT extern void nmg_unglueedge(struct edgeuse *eu); +NMG_EXPORT extern void nmg_jv(struct vertex *v1, + struct vertex *v2); +NMG_EXPORT extern void nmg_jfg(struct face *f1, + struct face *f2); +NMG_EXPORT extern void nmg_jeg(struct edge_g_lseg *dest_eg, + struct edge_g_lseg *src_eg); + +/* From nmg_mod.c */ +/* REGION Routines */ +NMG_EXPORT extern void nmg_merge_regions(struct nmgregion *r1, + struct nmgregion *r2, + const struct bn_tol *tol); + +/* SHELL Routines */ +NMG_EXPORT extern void nmg_shell_coplanar_face_merge(struct shell *s, + const struct bn_tol *tol, + const int simplify, + struct bu_list *vlfree); +NMG_EXPORT extern int nmg_simplify_shell(struct shell *s, struct bu_list *vlfree); +NMG_EXPORT extern void nmg_rm_redundancies(struct shell *s, + struct bu_list *vlfree, + const struct bn_tol *tol); +NMG_EXPORT extern void nmg_sanitize_s_lv(struct shell *s, + int orient); +NMG_EXPORT extern void nmg_s_split_touchingloops(struct shell *s, + const struct bn_tol *tol); +NMG_EXPORT extern void nmg_s_join_touchingloops(struct shell *s, + const struct bn_tol *tol); +NMG_EXPORT extern void nmg_js(struct shell *s1, + struct shell *s2, + struct bu_list *vlfree, + const struct bn_tol *tol); +NMG_EXPORT extern void nmg_invert_shell(struct shell *s); + +/* FACE Routines */ +NMG_EXPORT extern struct faceuse *nmg_cmface(struct shell *s, + struct vertex **vt[], + int n); +NMG_EXPORT extern struct faceuse *nmg_cface(struct shell *s, + struct vertex **vt, + int n); +NMG_EXPORT extern struct faceuse *nmg_add_loop_to_face(struct shell *s, + struct faceuse *fu, + struct vertex **verts, + int n, + int dir); +NMG_EXPORT extern int nmg_fu_planeeqn(struct faceuse *fu, + const struct bn_tol *tol); +NMG_EXPORT extern void nmg_gluefaces(struct faceuse *fulist[], + int n, + struct bu_list *vlfree, + const struct bn_tol *tol); +NMG_EXPORT extern int nmg_simplify_face(struct faceuse *fu, struct bu_list *vlfree); +NMG_EXPORT extern void nmg_reverse_face(struct faceuse *fu); +NMG_EXPORT extern void nmg_mv_fu_between_shells(struct shell *dest, + struct shell *src, + struct faceuse *fu); +NMG_EXPORT extern void nmg_jf(struct faceuse *dest_fu, + struct faceuse *src_fu); +NMG_EXPORT extern struct faceuse *nmg_dup_face(struct faceuse *fu, + struct shell *s); +/* LOOP Routines */ +NMG_EXPORT extern void nmg_jl(struct loopuse *lu, + struct edgeuse *eu); +NMG_EXPORT extern struct vertexuse *nmg_join_2loops(struct vertexuse *vu1, + struct vertexuse *vu2); +NMG_EXPORT extern struct vertexuse *nmg_join_singvu_loop(struct vertexuse *vu1, + struct vertexuse *vu2); +NMG_EXPORT extern struct vertexuse *nmg_join_2singvu_loops(struct vertexuse *vu1, + struct vertexuse *vu2); +NMG_EXPORT extern struct loopuse *nmg_cut_loop(struct vertexuse *vu1, + struct vertexuse *vu2, + struct bu_list *vlfree); +NMG_EXPORT extern struct loopuse *nmg_split_lu_at_vu(struct loopuse *lu, + struct vertexuse *vu); +NMG_EXPORT extern struct vertexuse *nmg_find_repeated_v_in_lu(struct vertexuse *vu); +NMG_EXPORT extern void nmg_split_touchingloops(struct loopuse *lu, + const struct bn_tol *tol); +NMG_EXPORT extern int nmg_join_touchingloops(struct loopuse *lu); +NMG_EXPORT extern int nmg_get_touching_jaunts(const struct loopuse *lu, + struct bu_ptbl *tbl, + int *need_init); +NMG_EXPORT extern void nmg_kill_accordions(struct loopuse *lu); +NMG_EXPORT extern int nmg_loop_split_at_touching_jaunt(struct loopuse *lu, + const struct bn_tol *tol); +NMG_EXPORT extern void nmg_simplify_loop(struct loopuse *lu, struct bu_list *vlfree); +NMG_EXPORT extern int nmg_kill_snakes(struct loopuse *lu, struct bu_list *vlfree); +NMG_EXPORT extern void nmg_mv_lu_between_shells(struct shell *dest, + struct shell *src, + struct loopuse *lu); +NMG_EXPORT extern void nmg_moveltof(struct faceuse *fu, + struct shell *s); +NMG_EXPORT extern struct loopuse *nmg_dup_loop(struct loopuse *lu, + uint32_t *parent, + long **trans_tbl); +NMG_EXPORT extern void nmg_set_lu_orientation(struct loopuse *lu, + int is_opposite); +NMG_EXPORT extern void nmg_lu_reorient(struct loopuse *lu); +/* EDGE Routines */ +NMG_EXPORT extern struct edgeuse *nmg_eusplit(struct vertex *v, + struct edgeuse *oldeu, + int share_geom); +NMG_EXPORT extern struct edgeuse *nmg_esplit(struct vertex *v, + struct edgeuse *eu, + int share_geom); +NMG_EXPORT extern struct edgeuse *nmg_ebreak(struct vertex *v, + struct edgeuse *eu); +NMG_EXPORT extern struct edgeuse *nmg_ebreaker(struct vertex *v, + struct edgeuse *eu, + const struct bn_tol *tol); +NMG_EXPORT extern struct vertex *nmg_e2break(struct edgeuse *eu1, + struct edgeuse *eu2); +NMG_EXPORT extern int nmg_unbreak_edge(struct edgeuse *eu1_first); +NMG_EXPORT extern int nmg_unbreak_shell_edge_unsafe(struct edgeuse *eu1_first); +NMG_EXPORT extern struct edgeuse *nmg_eins(struct edgeuse *eu); +NMG_EXPORT extern void nmg_mv_eu_between_shells(struct shell *dest, + struct shell *src, + struct edgeuse *eu); +/* VERTEX Routines */ +NMG_EXPORT extern void nmg_mv_vu_between_shells(struct shell *dest, + struct shell *src, + struct vertexuse *vu); + +/* From nmg_info.c */ +/* Model routines */ +NMG_EXPORT extern struct model *nmg_find_model(const uint32_t *magic_p); +NMG_EXPORT extern struct shell *nmg_find_shell(const uint32_t *magic_p); +NMG_EXPORT extern void nmg_model_bb(point_t min_pt, + point_t max_pt, + const struct model *m); + + +/* Shell routines */ +NMG_EXPORT extern int nmg_shell_is_empty(const struct shell *s); +NMG_EXPORT extern struct shell *nmg_find_s_of_lu(const struct loopuse *lu); +NMG_EXPORT extern struct shell *nmg_find_s_of_eu(const struct edgeuse *eu); +NMG_EXPORT extern struct shell *nmg_find_s_of_vu(const struct vertexuse *vu); + +/* Face routine... [truncated message content] |